"Gardening, not architecture"This Oblique Strategy caught my attention while flipping through the iPhone version of Brian Eno and Peter Schmidt's deck of cards for out-of-the-box thinking. Recently I had been thinking about Software Architecture, the role of an architect and how it relates to the actual work of producing working software. My official title is "IT Architect" but that is more a reflection of the ideas of the HR department than a description of what I actually do.
Our group is responsible for a fairly large engineering software product which has been through many release cycles. We have a large legacy code base in both Fortran and C++ which we need to maintain and extend, adding new features in response to customer requests. Large architectural changes are simply not practical or economically justifiable. The design and "architecture" evolves over time rather than being the result of some grand architectural vision. So what is the role of an architect in this environment? I think that the metaphor as it is commonly applied is flawed.
"Gardening , not architecture" seemed to be a more interesting description of the way software evolves. Often, while updating a module I come across code that seems to have become overgrown. Dead code which is no longer used has been left cluttering up the source files and needs pruning. Poorly formatted functions that need tidying up. Adding new features is a process of evolving the software in a new direction.
If there is a role for an Architect then the best description that I have seen is that given in "The Software Architect's Profession." They use a direct analogy with build architects and argue for separate professions of architect, software engineer and programmer. The architect would be the customer representative and "superintend the construction". I like this view because of its orientation towards the customer and away from the technological details. This description seems more like that of a Program Manager than the senior programmer which it usually seems to mean.