I came across this post by Michael Platt the other day. It's about the definition of the term "architecture", which is something I've been thinking about a lot recently (due to the fact that I'm writing a class for Pluralsight with the word "architecture" in the title).
Here's the thing: Years ago, I used to have the title "system architect", but I don't think I could have told you what "architecture" means. In fact, I don't think I could have told you clearly what it meant if you asked me last month. The closest I could have gotten was probably "what architects do". And with all respect to Mr. Platt, his definition:
Architecture is the use of abstractions and models to simplify and communicate complex structures and processes to improve understanding and forecasting.
doesn't really do it for me either. Is it really an architect's job exclusively to forecast and communicate? That doesn't sound like a complete or accurate description of what I do when I act as the architect on a project.
It was conversations with my friends Tim and Jeff that really cleared it up for me. They pointed a couple of things out to me. First of all, only software architects talk about "an architecture". Architects that build buildings talk about a design. This really resonates with me - I've always felt uncomfortable with the question "What's your architecture?" - I don't think that's a meaningful thing to ask. Whereas the question "What's your design?" seems far more straightforward and utilitarian.
So that goes straight to the question, "What should a software architect do?" It now seems fairly obvious to me that the answer is "Design software". Hopefully, these designs are based on the users' requirements - sussing out what those requirements are and turning them into a design is what distinguishes a good architect from a bad one. As is having an intimate knowledge of the technologies involved - good software architects should be reasonably good coders the same way good physical architects should know the properties of drywall and steel! Of course, neither can work in a vacuum, and both should rely on practitioners to verify and enhance the design against real-world constraints.
I think there's also another legitimate activity for someone that calls themselves an architect to perform. It involves the distinction between "architecture" and "Enterprise Architecture". The latter term has been so abused as to have nearly lost its meaning, but nevertheless I think it serves as well as any term we have right now as a description of an important activity; namely, that of setting up a framework within which architects can create maximally useful designs. Allow me to elaborate.
In "real world" construction (i.e. the construction of physical buildings), there are both architects and city planners. City planners do things like set up building codes, lay out key pieces of infrastructure, and check for conformance to rules. I believe that "Enterprise architects" should play a similar role in organizations where the resulting consistency is beneficial. We probably need a better name for this role, but Enterprise Architect serves well enough for now.
It seems strange that it has taken me something like ten years to understand this distinction well enough to be able to put it into words. But I feel better for having done so - as I said, I've always felt uncomfortable when people start slinging around the a-word; I guess I've just encountered too many people sporting the title "architect" who were useless, Ivory Tower, overengineering types. But with the analogy to real-world architecture clearer in my head, I can finally easily distinguish between productive and unproductive architectural activities.
I'm sure I'm not the first to arrive here, but based on the massive fog around terms like "architecture", "architect", and "enterprise architecture", I can't imagine I'll be the last, either.
The best definitions I have found come from the Architects of buildings. Here is a classic book on Design, which is really the core activity of an Architect:
ReplyDeletehttp://www.amazon.com/gp/product/0674627512/qid=1143650626/sr=1-6/ref=sr_1_6/103-6429594-2372626?s=books&v=glance&n=283155
The author is Christopher Alexander
Of course they do!! Craig blogged about my architecture definition and said that my definition didn't...
ReplyDeleteI have to say that the Platt definition does nothing for me and I waffle abstractly about architecture quite a lot. I agree also that architecture is a much abused title, viz the job adverts for 'Enterprise Architect', hands on Excel $35K. However, I do see a clear distinction between software architecture and design so let me see whether I can express this in english!
ReplyDeleteThere is a vaguely useful definition of an architecture used in ANSI/IEEE Std 1471-2000: “the fundamental organization of a system, embodied in its components, their relationships to each other and the environment, and the principles governing its design and evolution”.
However, by this definition everything has an architecture of sorts, either good or arbitrary, so far more useful is the question of why do you want (a good) one? It really boils down to two things, you have an architecture to minimise the complexity of a system(& organization) and/or to facilitate growth and change. The two are not always compatible (unless of course you have an abstract flexible architecture factory factory).
So for roles, the enterprise architect will try to optimise complexity/change decisions across a business while a solutions architect will do the same across a large development or a system. Its more about setting the decision framework for software design rather than designing the software itself. The role of the software designer is to implement business function, balancing the express business functional requirements with the architectural direction from the next level up.
So for me the important distinction is in what each of the roles is trying to acheive rather than the exact title.
AnkhSVN and a Monad SVN Provider? [Via: scott@hanselman.com (Scott Hanselman) ]
ReplyDeleteAxis2 [Via: gsusx ]...
Martin Fowler of Thoughtworks, whose wife is a structural engineer, has some thoughts on the relationship between real and software architects:
ReplyDeletehttp://www.martinfowler.com/bliki/BuildingArchitect.html
For me Architecture is:
ReplyDeleteThe art and scince of space making using envilops .to achieve an organizatiothat that is functionally and aesthetically of a positive environmental interaction, within and with the other environments