Posted on LJ in April 2006, not edited.
Developing software is most like painting a picture.
You start with a vague idea of what you want to accomplish and roughly how to begin. But your mind’s eye can’t really see the whole picture with any accuracy of form, or the details of the picture with any precision. Thus the picture emerges as you paint. At each point during the work, what is already on the canvas lets you anchor your imagination and see a little bit further. As you try to paint this you encounter an imperfection or an aspect of reality, and have to adjust, until you have converged, by this cycle of imagination and recording, onto a picture that is whole enough.