Sunday, November 14, 2010

Software Architects - Who Are They?

I came by Tenets of a Software Architect a few weeks ago. Briefly put the post asserts that a lowly programmer may become a software architect at some point of his career. I guess the main point that irked me about the post is that it clearly separates the roles of an architect and a programmer.

As a result I wrote a longish response to the post that for reason or another never got released. Anyhow, in this post I'm going to reiterate the contents of my response and expand on it a bit.

Architecture - What Is It?

I guess the vault seen on the image left represents one common view on architecture. It's simply a way to describe structure of something.

Often when we are talking about architecture we refer to design of actual buildings. The concept yields itself beyond that domain of course.

Pretty much anything has an architecture. It may not be apparent at first but it's bound to be there.

Architecture can also be seen as a balancing act. It defines what something is, and perhaps more importantly, what something is not. Essentially it sets bounds for actual construction.

Architecture is often seen as something that has to be described explicitly. This does not mean it cannot be implicit, however. Sometimes it's an emergent property.

Architecture As an Emergent Property

The structures of nature provide the most convincing example of architecture as an emergent property. This observation lead to the birth of fractal theory.

The interesting thing about nature in particular is the fact that its structures tend to be recursive. Just consider a tree and its structure for an example.

L-systems have been designed to model this behavior. They manage to mimic nature surprisingly well.

Architecture in Software Development

Both of these views - architecture as an explicit or emergent property - can be seen in software development. Raymond uses concepts of cathedral and bazaar to characterize these views in the context of open and closed source development. Quite fitting metaphors I think. :)

How does architecture manifest itself in software development? It is possible that there is a separate architect that determines the basic structure of the application. On the other hand there may not be one. You just start hacking and end up with something that works more or less.

Is one way better than another? Probably not. Sometimes it makes more sense to focus on actual functionality than the way it has been structured and vice versa. I guess beautiful code manages to combine these aspects in perfect harmony.

Phil Farmmafia as a Software Architect

By this definition even Phil Farmmafia hacking on his old C64 is a software architect. He might not know it but in my view he still is one.

Just being aware of this fact actually makes you a better programmer. I think it's not fair to elevate architects to a pedestal. It may make sense it some particular environment but definitely not in hobby hacking. :)

As I mentioned earlier architecture is all about structures and constraints. By spotting these during the development work you make things a lot easier for yourself in the long run.

Extract the rules out of the code-base and be sure to enforce them. This can be done via various methodologies (testing, refactoring, just plain restructuring).

This might sound like a backwards way to design. It's something that works, however. Simply put it's not possible to know every constraint before you start out implementing something. In casual development you figure them out as you go.


So just to make sure everyone and their granny gets it, I think everyone developing software is an architect. It's possible to separate it to a role of its own. Even still there's still some amount of architecting to be done. It's just a matter of perspective.


The vault image is work of tochis (by-nc). Fábio Pinheiro created the fractal (by-nc-nd). scott_hampson drew the Farmmafia guy (by-nc-nd). All works used are available under Creative Commons license as listed earlier.