Friday, September 19, 2008

What is a Systems Architect?

I have been re-growing some software development related skills, with an eye toward going from "Java Team Lead" to "Java Architect". What does "architect" mean, though?

Sun offers a certification for a Java platform "Enterprise Architect". Based on the objectives for the exam, they define it based on experience with system design that takes into account flexibility, security and other factors.

This topic has been discussed in a number of other places, including this Javaworld article, which makes the points that most positions billed as "Architect" slots are really "Senior Developer" positions. The author's take is that an architect has breadth rather than depth of knowledge.

This I agree with. To me, a true "architect" is someone who:
  • Knows what technologies are available to solve a given design problem.
  • Has a handle on "systems thinking" - a way of approaching problems and designing solutions that looks at the whole rather than decomposing the problem and then attacking the smaller issues that come from this decomposition.
  • Also has a software development skillset.
The first bullet point is something that you can train yourself to do. It entails keeping abreast of what technologies are available, what they're good for, and a realistic assessment of the maturity of each of them.

The "also" in the last bullet point reflects my perspective that an architect is a "developer and..." rather than someone who is really good at software development. I think that you can be a great architect even if you are just a "good" software developer if you have a handle on other skills. For instance, a strong communicator can help move people toward the best technologies by explaining the benefits. Someone who is a really quick study (and hence can understand new technologies easily) will have more options to choose from when designing a solution.

The "systems thinking" point above is the most difficult one to train. If the only problem-solving approach you have is to deconstruct, you probably won't be a great architect (don't lose hope, though - kick-ass software developers are just as valuable, and just as hard to find). Systems thinking is also one of the most difficult things to define for people who don't do it regularly. It is more a way of experiencing the world than it is a discipline. Though there are plenty of descriptions and examples to be found, very few purport to show you how to do it.

So what does this mean for the aspiring architect? Stay in touch with available technologies! Subscribe to blogs and software-related news feeds, join user groups, go to conferences, and read, read, read. If you aren't reading at least one (and preferably two or three) technology book per month, you're falling behind.