While re-reading Chapter 8 - Agile Collaboration, of the book Practices of An Agile Developer I smiled again at the section title “Architects Must Write Code”, but I also wondered, What really is an Architect, what Role do they play and do we really need one ? Luckily, Martin Fowler wrote a piece for the IEEE that answers these questions, at least in terms of Software. The article is here.
In the article there is a quote from an email message between Martin Fowler and Ralph Johnson on the the differences between building architecture and software architecture that in my opinion exemplify what it means to be Agile, and that is, to make (software) it easy to change. The quote and article go on to explain how making something easy to change makes the overall system a little more complex and I’m not in total agreement with this, but the point I want to make is that Agile is about the practices that make it easy to change. Practices like Test Driven Design, Pairing, Continuous Integration, feedback loops (Iterations), and a constant focus on working releasable software.
Agile and it’s practices are why I confidently put off decisions on various components until the last possible minute, which is when we are most likely to know the most about the real needs of the component. So embrace change and make it easy to do it.
What I don’t do, and what I don’t believe Agile advocates, is to leave the gathering of scope until the last minute, since having some idea of where the project is going and what it may be delivering is crucial contextual information. I’m not saying you need to get all the stories up front, but most of the epic stories is a good start.