I was thrilled to participate in a Fish Bowl facilitated by Scott Hanselman this weekend at Boise Code Camp. The session quickly and predictably degenerated into a Architecture vs. Design discussion, which is a little frustrating because there are higher level discussions that are actually important.
One higher level discussion is: What is expected of me as an architect?
An answer to that question is the one I gave in the Fish Bowl:
Design is the detail of how a given API may function. What are its signatures, how does it transact, what is the object model, where are the abstraction layers, etc. These are all design issues.
Architecture is the insight that the API is needed in the first place, and the meat space skills to make it real.
Another way of looking at the role of an architect is through a list of characteristics that define the role. Paul Leclerc, another Fish Bowl member came up with this great list on the fly during that session. This section of this post is from Paul.
So you wanna be an architect?
It’s not the technical skills that will make you a successful architect, it’s the soft skills. Here is an expanded version of the list I read out during the Architecture Open Fishbowl panel at the Boise Code Camp.
- Able to influence – you won’t be successful through coercion
- Act as an evangelist – be passionate (but not a zealot)
- Check-in with those who will have to abide by your architecture –
- Be a real leader – leadership is earned and almost never associated with your title
- Mentor those around you – if you want to expand your own responsibilities, you need someone else to do your current tasks.
- Humble – you don’t know it all so admit it up-front
- Open minded – ditto
- Mentally healthy – don’t aspire to be an architect if you think it’s going to fulfill some unmet need.
- Benevolent dictator – ala Linus Torvalds
- Able to be respected – if the people that you’re leading won’t listen to you (for any reason), then how likely are they going to implement what you’re presenting?
- Comfortable communicating up & down the management chain - you have to be able to communicate your viewpoints so those above you and below you will understand you. Sometimes you’ll have to speak "geek", sometimes you’ll have to speak "management".
- Act with integrity – adjusting your language to fit the audience does not mean that you can lie. The geeks will see through your BS and you’ll lose their respect.
- Don’t be an asshole – read the "No Asshole Rule" book and Bob Sutton’s blog at http://bobsutton.typepad.com/my_weblog/
To underscore the significance of soft skills in the role of being an effective architect, let’s look at the list of measured competencies Microsoft defines for its MCA (Microsoft Certified Architect) program.
- Leadership
- Communication
- Organizational Dynamics
- Strategy
- Process and Tactics
- Technology Breadth
- Technology Depth
Each of these competencies are called out in detail on the MCA site, and it is notable that a mere 2 of the 7 competencies measured for certification are based on technology.
Mostly, I think being a software architect is about experience and communication. If you want to be one, you should concentrate on getting good development experience, and work with teams. As you move further away from the software itself (i.e. enterprise architects), then the communication becomes more important, and the technologies less so.