From SoftwareAsCapital, p 64.
A creative process such as software design is not deterministic, with output dictated by input through some sort of black-box optimization. This would require the designer to grasp the problem in its entirety at a glance, and on that basis to grasp its "correct" solution. On the contrary, software design is an evolutionary process in which the designer "makes sense" of the problem over time, and gradually puts the design together. In this respect software design would seem to be akin to writing. Composition is not a matter of copying out a book that has somehow popped into the writer's head. Rather the writer works gradually from a vague idea to a fully-conceived book, through a process of fleshing out, defining and refining, finding out what works by trial and error. Similarly, the software designer uses feedback from the design itself, seeing what works, what has promise, what relationships are revealed that were unclear before.