I’ve noticed that the term software architect, a term I use quite often to describe myself, is in vogue these days. It’s interesting to hear that many developers who used to call themselves senior software engineers are doing the same thing that I’m doing — starting to use the term Software Architect. Even Bill Gates now has the title “Chairman and Chief Software Architect” at Microsoft! What’s the difference between a software engineer and a systems/software architect?
In software now there’s even a specialty of “Enterprise Architect” versus “Software Architect”. We all know precisely what an architect and engineer does in the physical world of construction but what about the logical electronic world of software?
I was approached by Amazon.com recently to join their team and found it interesting that they said “We have no ‘architects’ versus ‘implementors’, everyone does everything from requirements and design through rollout.” So does that imply that architects don’t really implement anything? Is software architectue just an intellectual exercise?
I have been coding for about 15 years and still code many hours a week (mainly Java, Perl, Ruby, and C#). In my line of work (J2EE development) I have seen many architects that don’t know how to code what they “architect”. I’m not sure that’s a good idea — hiring architects that can’t code (even a bit of scripting or basic prototyping is useful). I saw someone say on a website a while back “an architect that can not code is like a composer that plays no instrument.” But, is that accurate? Maybe not.
To be fair to all the systems and software architects out there — nobody would expect a building architect do be a carpenter — and perhaps we shouldn’t expect software architects to carry out their plans (simply oversee them). I spend most of my time talking with senior management, executives, and end users that tell me what their systems want to do and then I create systems plans such servers, network, data centers, and the like to carry out the requirements. Code and software construction (as Stevel McConnell puts it) seems to be a smaller and smaller part of my job (to my dismay because I love to code).
Is systems architecture versus software architecture a meaningful distinction? Perhaps systems architects need to be like traditional building architects — be able to take requirements from customers, create a vision, and lay out the plans for implementing the vision in a timely manner. Systems architects may not need to be coders but software architects probably do.