Arno Nel has blogged twice raising the question ‘What is Architecture?’, so I’ll take the bait. There are many different definitions of architecture with everyone chipping in - IBM, Agile, Martin Fowler (who unsurprisingly differs with every else’s definition) … there’s even a IEEE Standard to define architecture! So why all the confusion? I think that most of the people reading this are actually more concerned about the role of architect, rather than the formal definition of architecture. If you have been performing architectural functions for while and implementing good architectures, you have a pretty good feeling of what architecture is, regardless of the formal definition tossed up by a big blue vendor, an outdated standards organization or a bunch of academics in tweed jackets.
The reason we want to know what an architect is, is because there are lots of jobs for ‘architects’ and they earn the big bucks. Search on a job site for ‘Software Architect’ and you will see plenty of opportunities at high rates – so why not figure out how to be one? Microsoft has perpetuated this problem by trying to be the first to certify software architects in their Microsoft Certified Architect Program where techies with ten years of experience on any platform (yeah right – from Microsoft) may or may not be accredited by a panel of their peers at a cost of around $10,000.
To me, a bigger problem than defining the term ‘Architecture’ is coming up with a better term for the technical hero on the team who is ultimately responsible for the way the the system looks, feels, smells and behaves (all within time and budget of course); more colloquially known as the Architect. When I am in an ‘Architectural’ role I find myself designing, coding, helping developers, investigating technologies, understanding the requirements, helping with testing and deployments, providing estimates, talking slowly to the project manager, interviewing resources, optimising SQL statements, and so on. It looks like those functions go beyond architectural functions and cross many disciplines in software development. I generally know the detail of how a particular business function has been implemented (even if I didn’t implement it) and can advise developers wanting to add functionality. Sounds like a bit more than 'architecture'.
Some discussions around architecture reflect this problem where architectural discussions are peppered with processes and statements such as ‘..extreme does not work well within an enterprise architecture’. If architecture relates to how the bits and pieces fit together, how did we get to a discussion about development processes? The answer is simple really; Architecture is affected by external factors and stakeholders and a good architect always knows where to compromise the ‘perfect architecture’ with useless users, under skilled developers, scarce test data, small budgets and whining executives. So the architecture that we land up with reflects all the non-technical bits and pieces – development processes amongst them – but it doesn’t mean that a development process is any more part of the architecture (in a formal sense) than the guy with the pointy hair. The Microsoft Certified Architect Program looks quite good to me and it reflects the functions that are not formally considered part of architecture with criteria such as leadership, organization dynamics and communication.
The amount of pure architectural work that an architect will do depends on the size and makeup of the project. If you are the ‘architect’ on a smallish team where you spend four days fighting with VSTS to get it installed properly, you are hardly doing ‘Architecture’, but you probably are the one who designed the system and even if you’re not officially taking responsibility, it is highly likely that it is your head that will be rolling if things go wrong.
My quick definitions:
Architecture : The way the system ‘looks’ at the end of the project
Architect: The person who made it that way.
Simon Munro