Disclaimer: this may be be a Seattle area phenomenon.
I have “software architect” on my resume, and it pains me. Wikipedia has a great article on what a software architect may or may not be. But, in my world, a software architect has the knowledge, insight and responsibility to make educated decisions about the scope and direction of a team-developed software project.
That was a mouthful.
Software architects pick frameworks. They find previously existing packages for functionality just before the rest of the team realizes they need it. And, they plan and communicate how all the moving parts will come together. They’re really-really smart.
Everyone wants to be a software architect. At Seattle’s Startup Weekend, no less than a third of the developers signed up as architects. And why not?! The act of creation - from art to programming - is egotistical. If you’ve ever referred to yourself as a “software engineer” with a straight face, then you’re advertising the capability to plan non-trivial projects.
You’re a liar.
Software is big. You just won’t believe how vastly, hugely, mind-bogglingly big it is. I mean, you may think it’s a long way down the road to the chemist’s, but that’s just peanuts to software.
With all apologies to Douglas Adams. Software projects are the most complex machines created in the history of invention. You’re telling me that you can do better than Leonardo Da Vinci, Thomas Edison, or the Wright Brothers? Because each of those iconic figures were geniuses driven to create simpler machines than a web application. And each was wrong up front.
This isn’t a fair comparison. We have Photoshop, Digi-Key, and kit airplanes. Also, Rails!
Those inventors were forging into unknown territory. Customizing a CMS or integrating SAP ERP into a SOA are known quantities. It could be argued the architect exists for the partially ambiguous problems.
My response is a question oft heard in agile circles. I learned it from working in open source projects, corporate giants, startups and contracting. It’s a kōan:
“What features will you be adding in six months?”
The job of software architect is an answer. Is it the right one?
-
There is value in understanding a problem domain.
But, the stakeholders in a project tautologically have that. -
There is value in making the hard decisions.
But, that is why we have team leaders. -
There is value in planning your design.
But, software structure inevitably resembles its team’s structure.
… and so on.
The software architect exists because of the cultural need to have someone be responsible for these aspects. But it isn’t possible to satisfy these responsibilities and simultaneously attend to the details that inform future decisions. Architecture astronauts just don’t have the time to be any more grounded!
Instead? Go slow. Let the programmers make the decisions. Feed them knowledge and constraints. Try to develop a consensus among the actual stakeholders. And accept everyone’s input. That quiet intern? They go home and spend all their spare time playing with tools that handle 80% of the job.
I’m not arguing for agile development practices.
I’m arguing for considered diligence. Plan a little. Work a little. Rinse and repeat. Never let yourself slip into the tunnel-vision that comes with long cycles.
Because if your team cannot make responsible architectural decisions, then no one can save your project.
4 Comments
July 27, 2008 at 7:04 am
Over the last couple of years I have been tormented with the decision of whether or not to become an architect, longevity, responsibility and interesting work being the drivers.
Recently I have been broadening my scope of learning by reading more and more about the agile methods adopted by freelance and opensource framework developers. Whilst I am not completely sold on some of the techniques (scrum, yagni, rest etc.), I am beginning to question the need for an architect on projects, agreeing with you that decisions should be made at the right level be it stakeholder, leader or development team.
Thanks for the article and convincing me that being a better developer is something to strive for.
July 28, 2008 at 12:19 am
I feel my conclusion was the weakest part of my argument. Your summary of “decisions should be made at the right level” is closer to what I wanted.
I believe the leader, development team, and customers are all stakeholders. The architect role is ostensibly to keep a head out of the dirty details and instead on the grander scope. But, in a healthy development team, there should be a mix of people keeping the greater role in mind - educated by those important details!
Architect roles smack of Central Planning. And we know how well that works…
August 4, 2008 at 8:21 am
Limitations in metaphor aside, a skyscraper’s another respectable feat of design and engineering. It’s one thing to get to the 40th already wired floor with a nail gun, scratch your hardhat and say “yea, we’re going to need 30 extra floors in this piece.” At that point, no amount of 20/20 hindsight or egoistic desire to create magically innovates 30 extra floors. Somebody’s head has to be on the proverbial chopping block in negotiating between requirements and implementation. It’s gotta be another thing to be “that guy.”
Granted, not all software can topple over and domino into other systems. But when it does, 30 guys saying “we were busy organically innovating” probably wont satisfy the parties involved.
Open source is an awesome example of how organic development can provide the foundations for killer implementations that meet specs, lower costs, and enable developers to do what they love. There’s obviously incredible power in recognizing the mastery and creative expertise of a team working within sometimes seemingly illogical constraints.
Anyways, I’m honestly in no position to authoritatively comment on agile methods vs architectural accountability. I think I just agreed with you. And needlessly expounded on the cultural/tactical requirement for “that guy” who’s always holding the conch.
@rsol1: It’s easy to question the need for an architect when the communication process breaks down (at so many levels), but the phrase “benevolent dictator” comes to mind. Somebody’s got to write the customer interface.
(And @scott: django’s way more awesomer than rails.)
September 15, 2008 at 7:01 am
Hi !
I think better not to debate the age-old thing that whether we want An Architect or not but the point here I want to put is,its not a designation or person who should be working as an “Architect” rather Team conscious could play “Architect”!
The only problem I see,is when there is not enough senior people involved in projects,it lacks what we called ability to make architectural decisions.
So,even if I could say that Architect is not required on every project,but there should be somebody or group of people who are playing the role of “Wise man” in the team.
Leave a Reply