Wednesday, May 4, 2011

Over the last year or two, I’ve spoken with a handful of developers about their career. Several of them desire to become software architects. I’ve never really been satisfied with my guidance to them.

With apologies to them for my poor initial responses, here are attributes I look for in an architect.

Be a coach and mentorYou might think technical excellence should be the first item on my list. While it is a requirement, it is not sufficient to be an architect. What matters is one’s ability to coach and mentor others to higher levels of achievement. A highly technical individual who cannot coach and mentor is not an architect. She is a highly technical individual contributor.

Architects build large systems through a team. So while the architect may be the most technical, he must maximize the output of the team as a whole. Some examples of coaching and mentoring:

While reviewing other’s work, look for opportunities to praise good practice and to demonstrate improvements in critical thinking skills. It’s not about showing a better way to implement a specific module. Use the opportunity to teach a better way to think about the problem and possible solutions.

Share your knowledge with the team. Use every opportunity to share not only your technical decisions, but options you considered but eliminated. Help your team understand how you made the decision, not just what the decision was.

Expect your team to have great ideas. You don’t have to be the smartest all the time. You cannot expect your team to be willing to learn from others if you won’t.

Desire to learnThe best architects learn constantly. One monitor has Visual Studio open and the other has a blog about some piece of technology.

Take time to read, study, and practice.

I’ve known architects who spent personal time developing programs to exercise one or two language features. They may not need it immediately, but at some point they encountered a problem that feature was suited for.

Architects learn from everyone. That includes business folks, QA, developers, and their leadership team.

ExperienceThere is no substitute for experience in architecture. I’ve run into twenty-something developers with architect titles. I find that laughable. Experience brings diversity of challenges, solutions, technologies, and business contexts. It also brings time to have studied under other architects and senior mentors.

You don’t have to have had many jobs and worked on dozens of systems. An architect must be exposed to a multitude of problems to solve. Each challenge faced and solved adds a tool to be used for the next problem. It provides maturity and confidence required to push through hard problems and solve them.

A senior developer may master many software engineering technologies. An architect combines this basic requirement with coaching, personal desire to learn, and experience.

An architect brings these elements together to solve new challenges. In this process, the seeds are sowed for new architects to be developed.

On a personal note, I want to thank architects Mary Holstege, Andreas Guenther, Derik Whittaker, and Roger Larson. This article is merely a summary of what separates these folks from the rest of the bunch.