Monday, May 29, 2006

What is a software architect?

It seems to me that architecture is a somewhat arbitrary term in IT, there is just design, construction and validation[1]. Someon can design a class, a module, a package, a set of packages, an application or a set of applications. As they move up the stack the amount of abstraction they deal with increases (since unless they're very smart they cannot hope to understand it all). At some point up that stack people seem to draw the line and label people doing design at that level as 'architects'. I thinks that is pretty much all there is to it.

The question of 'what is a software architect' then becomes 'where do we draw the line in that stack'. Of course, there are many stacks, all interelating. For example, there's a data stack (tables, application schema, logical models, conceptual models) and an infrastructure stack (switch configs, physical network diagrams, ....). Because different people operate in different stacks and at different points, they tend to define architects in terms of their location in a particular stack, and there is normally much confusion as a result.

One thing that has occurred to me is that the point at which people draw the 'architecture' line oftens seems related to the loss of 'singularity of purpose'. Developers and module designers are normally focused on one goal, with normally one stakeholder to manage. At some point they become team leaders or design leads (often called application architects). At this point life becomes that much more complex, singularity of purpose is lost as the job becomes more about weaving a path between all stakeholders and their views.

[1] order, breadth, depth and persistence dependant on the chosen SDLC.