How do you differentiate true designers and architects from other software developers? This may be the hardest question to answer, and the most necessary. A real designer or architect, someone who doesn't just hack a bunch of software together, is worth more to your company than you can pay him/her. A real designer or architect can translate the vision of what the product has to be into the here-and-now, no matter what development practices you use. (The agile practices help more of us become better designers and architects than the top-down, decomposition practices.)So if these people are worth a lot to you, you'll want to think hard about the questions you ask them. Here are some suggestions; I'd love to hear your comments:
- What's the most powerful language you've ever used? Why? (I would listen for LISP or Java. If I hear C or C++, I worry about the exposure this candidate has had to alternative techniques. C and C++ are not particularly powerful. In my never-humble opinion, C and C++ can lead to bad designs if the candidate has not been exposed or hasn't worked with alternative languages.)
- Do you typically generate alternative designs? (The best architects and designers generate at least 3 alternatives.) How do you choose between these designs? (Listen for at least 2 or 3 stories about how the candidate made decisions, and with whom. Did the candidate make decisions alone? With others? When I've worked with great designers, they chose to bounce ideas off their peers. As a project manager or manager, they would explain the differences to me, but I was not always part of the decision-making process. It depended on the consequences of that decision (who else the decision affected).
- Tell me about the last major design you did. What was the purpose? What happened? …. Listen for the candidate's assessment of risks, who the candidate worked with, how the design worked, when the candidate found problems.
- If you had to design for our product (talk about your product here), what approach would you take? …. Listen for language choice, type of architecture choice, type of investigation, whether the candidate would prototype, if the candidate would work bottom up or top down.
Things I listen for:
- A lack of introspection. Good designers and architects spend time in their heads. They tend to be more introspective than other people. If a candidate says that he/she hasn't thought much about how they design, I wonder about their level of design and architecture expertise.
- If a designer tells me a first design is the “obvious first and only choice.” I don't buy it. We edit writing, we should edit our designs.
- A lack of multiple computer language experience. I don't want a designer who doesn't understand that the technical choices we make about the product radically influence the product architecture and the choice of lifecycle and practices. (See Language (and Language Environment) Influences Process.
Great designers are not born; they're created from experience and learning from experience. Make sure you think about what you need from an architect or designer before you even phone screen a candidate. The value of a great designer or architect is immense — much more than you pay that person.