TITLE: The Program Is In The Programming AUTHOR: Eugene Wallingford DATE: April 27, 2015 2:33 PM DESC: ----- BODY:

I would rather have too little architecture
than too much because that might interfere
with the truth of what I say.
-- Ivan Turgenev

How can agile approaches to software development create coherent programs? Don't we need a plan, a well-thought-out design to follow closely? Without one, won't we end up with a mess? Let's turn again to Italo Calvino for some perspective. He is known for novels with intricate structure and acknowledges that, for at least a decade, the "architecture" of his books occupied more of his mind than it should have. Yet his novels never seemed to follow closely any of his advance plans:
I spend a lot of time constructing a book, making outlines that eventually prove to be of no use to me whatsoever. I throw them away. What determines the book is the writing, the material that's actually on the page.
The ultimate architecture of a book comes to life alongside the book itself, hand-in-hand with the writing. And so it can be with software. Programmers can and should think about what they are building but, in the end, what determines the program is the programming, the material that's actually on the page or in the browser. Again, we must careful not to take the analogy too far. Programs are often created for external clients with specific technical requirements. Programmers are not usually free, as novelists are, to change the product they are creating. Even so, design is how we make the product, not what it does. Whether it evolves during the course of programming or is specified up-front, the client can receive the product they asked us to make. Ward Cunningham once gave what is, for me, still the best definition of design:
Design is the thinking you do when you make something.
The most important product of that thinking is not a design document or an architecture. It is the mind that is prepared to make the thing you need to make. -----