Friday, December 17, 2010

Interviewing Tips for a Senior Software Developer Role

Finding the right person for a software development role can be hard. Here are some questions that I ask during a face to face interview that I've found will quickly sort out the skilled and passionate from those who are not. Some are fairly specific to .NET, but others are useful for a role with any technology
  • Ask the candidate to describe the architecture of their last project, the technologies, how they interacted, the layers and tiers of the system. It's important that candidates demonstrate they understand the interactions between components of a system and can communicate their ideas about them.
  • Ask the candidate to tell you about the language features that were introduced in each version of the .NET platform, starting with 2.0. A good knowledge of this demonstrates that the candidate has good experience with .NET and have shown a commitment to learning. I usually only focus on a few major features such as generics and the features that facilitate LINQ, but candidates should be able to at least mention several from each version. Language features are a developer's bread and butter and poor knowledge here usually precedes a short interview!
  • Focus on data access layers for a short time, the pros and cons of approaches they have used in the past. It is a valuable skill to be able to identify inefficiencies in frameworks and designs and can find ways to improve them. Knowledge of ORMs is a bonus.
  • Ask the candidate to define design patterns and discuss one or two they mention. I usually cover software design patterns such as the gang of four patterns as well as architectural patterns such as MVC, MVVM etc.
  • Discuss the candidates experience with unit testing, the tools they have used, how it was valuable and how it could have been improved. Ask about aspects of software design that facilitate unit testing and how unit testing itself can have a positive impact on an application's design through test driven design.
  • Ask about the candidate's experience with the technologies and patterns specific to your project. Experience with these is clearly beneficial but not critical. I've hired some people with little knowledge of specific technologies who have been excellent developers and an asset to the team.
  • I highly regard knowledge and experience of object oriented design principles such as the SOLID principles, DRY etc. Only one candidate I have ever interviewed has shown any reasonably knowledge of SOLID! They aren't the only important principles, of course.
  • Ask the candidate if they regularly read any development blogs and what the last technical book was that they read. People who are passionate about IT and want to continually improve their skills read.
  • I've been thinking about testing the candidate's ability refactor code by preparing a class that has issues such as duplication, poor naming, long methods or poor command query separation and asking them to refactor the class. Discussing how it could be improved by adding dependency inversion could be valuable.
If candidates can demonstrate knowledge and experience with a significant proportion of the above topics, I will usually hire them, depending on urgency and the current market. I'm sure this could be improved and I'd love to hear your thoughts.

Labels: ,