October 17, 2007
Who Needs an Architect Anyway?: Part I
Well it seems setting up a new company can keep you busy at times--which is my official excuse :) for being unusally quiet last week. Hopefully I'll have a little more free time this week.
Note: I am talking in this post about roles and capabilities., i.e. when I say "architect" I mean someone who has the capacity to be an architect (e.g., as demonstrated in the architect training suggestion I made) and takes that role. On a specific project you may have a person that performs multiple roles such as an architect and project manger or an architect and developer while other project warrant one or more full time architects.
Not all projects need architects. There, I've said it. Not all projects need architects and I am not talking here just about trivial projects. There are cases (maybe even many cases) where you can get by with what I call "off-the-shelf" architecture -- maybe with a few adjustments that any master developer (i.e., seasoned and experienced developer) can handle. For instance a lot of websites can do pretty well by using Model-View-Controller (or a derivative of that) along with a simple O/R mapper such as active-record. In fact a lot of them do when they use a framework like Rails that made these architectural choices for them*. Another example is the vanilla 3-tier architecture provided by vendors (such as this one by Microsoft). Yes, when you take something off-the-shelf the result might not be optimal but that doesn't mean it isn't sufficient. You
just have to be aware for the tradeoffs...
Another point is that "design" is not an exclusive architect thing. A developer is not a good developer unless she also known about proper design. mastery of technical details of the language without understanding the wider context of design will just help you code a lot of crap faster.
Having said, that we need to consider a few issues -- When do you need architects? What do they Do? What's their relation and interaction with the developers ?
When do you need architects?
It is sometime a fine line between a project that can get by with an
"off-the-shelf" architecture and one that needs an architect. It would be nice if we could have something like a litmus test that would tell us if architects are needed or not. I don't have one. The closest thing I could get to this is something I call the SCLR test (pronounced "scaler". SCLR stands for Size, Complexity & Limited Resources.
- Size -- well if you are going to have something estimated at 1000 man-years or dozens of teams. I think it is pretty obvious that you can't just use something which isn't made to fit. If anything there's a need to divide the work between the teams in a way that would make sense so that you wouldn't get a big-ball of mud. There's also a lot of need to coordinate the efforts and keep the big-picture inline. Personally I think that it doesn't have to be a huge project to warrent some architects involvement. Since as Fred Brooks notes the number of interactions grows exponentially as we add more people. In my experience trouble starts even with more modest numbers -- more than 4 or even 3 different teams working concurrently is probably a good number to start thinking about architects.
- Complexity -- There are many signs for complexity in a project. The vision statement can provide a hint. "Let's design the software to support the next mars mission", "best CRM platform ever" -- an ambitions project will not make-do with "average" architecture. Size (which I already mentioned) is also a sign of complexity, while previously I talked about size of the project, the size of data, users etc. is also relevant when we're thinking about complexity . A lot of external interfaces is another sign. Integration doesn't seem very complicated, until you actually try to pull it off. When you have to do a lot of that in a project that's complex. And there are many other signs.
- Limited Resources -- Naturally every project has limited resources, but limited resources should be considered as a sign for architect involvement if the resources are extreme. When resources are
extremely limited the tradeoffs that have to be done are more meaningful, which is why wed want people who can help with that (i.e., architects). For instance in a projects I worked on in the past we had
a lot of availability and performance requirements on one hand but only so many "U"s in the rack and even limited electricity to make all this magic happen. This turned something which otherwise was a relatively standard IT project into something a lot more challenging.
Assuming I manage to convince you that some projects can't just choose one of the available blue-prints and need some more work -- the next step would be to convince you that architects are better suited to solve this than developers. I'll try to do that in the next post on this series where I'll explain what (I think) architects do and their place in the development team.
* Rails has more than just MVC and Active-Record but that isn't an important point for this discussion.
Posted by Arnon Rotem-Gal-Oz at 06:45 PM Permalink
|