One of my favourite games to play with my oldest daughter is where I pretend that I don’t understand something really basic – like how to put on socks. I put them on my ears and ask her if I got it right, and she reprimends me and tells me I should have them on my feet. “Like this?” I ask, and tie them around my ankles. Lot’s of giggling, and she tries to help me to get it right. It’s great fun for a three year old to teach her big stupid dad how to dress himself.
With my daughter, I play stupid to amuse her. Sometimes though, I feel just that stupid in my workplace. Something that seems very basic to people around me just doesn’t compile in my brain. One of these things is the role of the software architect. Software architects (or even worse, capital Architects) don’t make sense to me in general, but specifically in an agile environment I don’t understand what they are supposed to do.
From Wikipedia:
[A] software architect is responsible for:
- Interfacing with the user(s) and sponsor(s) and all other stakeholders in order to determine their (evolving) needs to be realized in software. [---]
- Generating the highest level of software requirements, based on the user’s needs and other constraints such as cost and schedule.
- Ensuring that this set of high level requirements is consistent, complete, correct, and operationally defined.
- Ensuring that a maximally robust software architecture is developed.
[---]
- Generating a set of acceptance test requirements, together with the designers, test engineers, and the user, which determine that all of the high level software requirements have been met, especially for the computer-human-interface.
- Ensuring that a maximally robust software architecture is developed.
It’s not that these activities are not important. It just seems to me that these are the tasks of other roles in a project – specifically the business analysts, and for the acceptance tests BAs together with QA.
Even the name itself is confusing. Software architect? The code I write is several steps away from actually runnable bits. Layers and layers of abstraction exists between the source code and the executables. The sourcecode goes through a build to become executable. Doesn’t that make the source code the blueprints the compiler uses to build the executable? And if that is the case, couldn’t the person writing the code be called the architect? To me, every developer is an architect. It’s every developers task to see that “a maximally robust software architecture is developed”. That’s not something you can do in UML. It’s the thousands of small and sometimes seemingly unimportant choices that each developer (pair) makes that creates a robust, smooth system, or a unusable hack.
The term architect in this context makes no sense to me. It’s a leftover from when we thought that software development should be like constructing buildings; with the architects making the blueprints and the construction workers carrying out their plans. Software development is all about the design, and nothing at all about the actual building. So it doesn’t make any sense to split the tech team into developers and architects. The developers are the architects.
As Fred Brooks wrote in No Silver Bullet back in 1987, the building construction metaphor has outlived it’s usefulness. Software is not built, it is grown. Weird that it has not done more difference than it has for almost 20 years now..
Left by Chris Hedgate on November 8th, 2006
Agree 100%. The closest thing to an ‘architect’ on an agile team is probably a senior developer who coaches and guides others in the team (for instance while pairing, or just by keeping an ear open when other pairs are discussing how best to implement someting).
I assume you’ve read Martin Fowler’s article in a similar vein?
Left by Kerry Buckley on November 10th, 2006
architects are domain experts that the org. can’t get rid of, and since they don’t code any longer, they can’t be allowed commit status any more…
I assumed you read my incomplete but a bit more PC recount here:
http://mawi.org/ArchitectsAndSoftwareDevelopment.aspx
Left by Marcus Widerberg on November 11th, 2006
Kerry: Yeah, I’ve read the article. Just like Martin says, it’s an overloaded word, and unfortunately missused more than not, which is why I think that it should be scrapped.
Marcus: Actually, your post was one of the things itching in the back of my mind when I wrote this. You say that we need good architects, but I’m still not clear what an architect is or does.
Left by Andres on November 16th, 2006
The fact that the Wikipedia definition is not very good does not mean that the profession is not needed.
I also agree that the building architect methaphor is problematic
Nevertheless, it is my experience that on large systems and even medium you need someone or someones that spend the time thinking about the big picture, understand and handle the different stakeholders and stike a ballance between all the desired quality attributes, partition the system into smaller components and help others make sure their design stays alighned with the overall goals of the system
This doesn’t mean that, for example, to help others make surre their design is good the architect doesn’t have to pair program with the developers – Architects can’t be disconnected from technology etc. – but they are still needed.
Left by Arnon Rotem-Gal-Oz on March 24th, 2007