Sunday, June 01, 2008

What's it mean to be an architect?

We live in a 19th century station master's house and it's time to either move or add another module (aka extension). We're looking at the latter for a number of reasons. Going this route means we need to have someone come in and draw up plans: the architect. Most people probably think of what an architect does based on the dictionary definition: "One who designs and supervises the construction of buildings or other large structures." But if you think about it more, this person is more than a designer or supervisor: they have to understand a lot about materials and how they fit together in order to assess structural integrity, stress points, resilience to adverse conditions and, of course, the final all-important look. So although they may not get their hands dirty with bricks and mortal (some do), they have to know about the construction as well as the people who will eventually do that work. That doesn't mean they are necessarily as skilled as some others in their team (e.g., I doubt the typical architect would have the skills of a carpenter), but they would need to understand wood, bricks, stone etc.

This requirement for an architect to know how things come together and, if necessary, be able to do some of that development should be common to uses of the term within other sectors and not just building. Whether it be biotechnology, cars or ships, the architect had better be skilled enough to understand how their plans will be affected by the implementation. How they do that may depend upon the industry and the individual (e.g., some building architects have been carpenters in the past).

The software architect needs to be the same. If you've got 'architect' in your title then you need to either be (or have been) a coder. (I think 'be' is better). Whether that means you've coded entire systems, or had to bring together existing modules as well, doesn't really matter as long as you have the understanding of what's possible, practical, reliable and maintainable as a developer. Writing a few XML configuration scripts doesn't cut-it in my opinion, because that does not bring the necessary appreciation for architecture. For instance, how can you understand what it means for a failure to happen in a distributed system if you've never had to implement one (or part of one)? So far I've been in the fortunate position to have only met software architects who fit my definition (I suppose a chicken-and-egg situation could be argued).

However, I know others who have met (suffered) exceptions to this rule. In some companies it appears to be endemic that architects are designers or team managers, with little or no coding experience behind them. Maybe they're just lucky and the development teams pick up the slack, ensuring success of the projects. Or maybe the blame for failed projects just manages to go elsewhere. But I know when we decide to go with an extension on our house I'll be looking for an architect who knows more than how to draw pretty pictures or make sure the work is done on time: I don't want the whole thing collapsing on us months or years later!

4 comments:

Anonymous said...

I totally agree.
An architect who haven't been a coder (and IMHO who had not been one since long time too) is like an elephant dancing in a crystal shop :)
And he would have a lot of problems with leadrship too.
But the question here is why so many architects aren't coder? IMHO because who selected them for the role hasn't been a coder too, and probably don't understand really risks of not well designed systems. Another time the chicken-and-egg situation :)
And I'm not sure that a marketing man would select architect for his house using your priorities...hoping he will be at home after some months or years...:D

Michael Neale said...

MOVE HOUSE ! I wouldn't build. Have seen too many people fall apart when trying.

Although, if you do rennovate, just a tip: don't do both bathrooms at once ;)

Gurney said...

I think architects must participate in coding actually. There are two factors:

1. It is impossible to learn properties of components without coding work. So even if architect was a coder sometime ago, his skill may become out-dated very quickly.

2. There is no effective way of development supervision without participation in the process.

Anonymous said...

Definitely right.