The hardest part of building software is not coding, it's requirements
If you know the address, it is a matter of figuring out directions. But if you do not know the address, no directions may be discovered. How do you figure out the address?<p>If you cannot determine <i>what</i> needs doing, you cannot determine <i>how</i> to do it. How do you determine the <i>what</i>?<p>The answer is in the problem statement, but first you need the problem statement. How do you get to the problem statement?<p>It is easier to follow orders than it is to determine what the orders ought to be. How does one determine the orders?<p>How shall we live?<p>A solution is a response to a question asked within a context of presuppositions and facts. But this is not necessarily a one-directional process in practice. In practice, we do not know the context entirely and in the needed resolution. Thus, we often learn from our attempts at a solution that something in the presuppositions is amiss. And indeed, this is how science functions and how Socratic dialogues proceed. A critical experiment can reveal that something is wrong, but it cannot tell us necessarily what. The needle in the stack of theories, and common or philosophical or merely technical presuppositions, is not necessarily in the theory being tested, though that it where we begin for economical reasons.<p>You need prudence, the heart of practical reason, to know what to do.<p>And then you need to actually <i>do it</i>.