I’ve been interviewing and hiring web developers for many years now. Along the way, I’ve made a few bad hires, and some fantastic ones, and those experiences have helped me develop a specific approach to the technical interview.
A key technique is to ask open ended questions and let the candidate talk at length . Start each part of the discussion with a specific technical area to dig into, and then carefully evaluate their responses. Don’t be afraid of silence! If the candidate doesn’t have an immediate answer, or takes a long time to answer, let him or her sit and think until they respond. You’ll be able to see how they work through novel questions.
On technical topics, you’ll be looking for them to introduce advanced topics and nuances on their own. It’s one thing for you to ask them if they’re familiar with an advanced concept — and have them nod their head and agree — and quite another for the candidate to bring up the topic on their own.
To guide myself through each technical interview I’ve come up with a checklist of questions and topics to explore with each candidate. The areas to drill into will vary depending on your technical environment and the level of each candidate, but the following list can help guide you on creating your own structured interview process.
I’ve found that a candidates level of source control experience can be an early warning that someone might not be a good fit. If they aren’t familiar with good source control practices, I start to question a lot about their development skill in general. I want to know about what systems they’ve used, and how advanced their usage is.
- What source control systems have you used? Which is your favorite?
- Why do you think your favorite is the best?
- What do you think the best practices are for branch management in a multi-developer project?
Although I’ve come to consider CI a best practice, implementation is still unevenly distributed in the development world. It’s not a deal-killer if they haven’t worked with CI, but I want to know that they’re aware of it.
- Have you worked in a CI environment?
- If yes, what was the workflow? Positives and negatives?
- If no, what do you know about CI? How would you go about setting it up?
I love having the ability to refactor major assemblies in HiringThing, and the only reason we can do that painlessly is our great test coverage. Experience with disciplined test development is a must.
- Have you worked on projects where writing tests was as integral part of the development process?
- Describe your workflow when writing tests and features?
- What kind of test coverage did your last project have?
- What’s the most complex UI feature you’ve ever built?
- What do you think the most effective way to work with designers is?
Hiring a Rails developer, I’ve pre-validated with an initial conversation that the candidate has the required level of experience with Rails before even undertaking a technical interview. That said, I want to ensure that they’re not misrepresenting their level of experience.
- Pretend I’m another programmer who has never used Rails – explain to me how a Rails app is structured, and why it’s a good framework for web apps.
- How do you decide what logic should reside in the models vs. controllers?
- Tell me about the most complex Rails app you’ve worked on.
I tend to regularly pick an architecture design question that’s relevant to where we’re going as a company, and something with no “right” answer to help understand how the candidate thinks.
- We’re working on adding an API to our system. How would you go about designing a brand new API ?
- Discuss best practices and pros and cons of popular approaches.
- How would you go about securing an API ?
Infrastructure and Deployment
In a small team, we don’t have the kind of IT support that large companies have. Our developers need to keep deployment and hosting issues in mind as they’re developing and take responsibility for helping to maintain our stellar uptime record.
- What operating systems are you familiar developing on?
- Describe an ideal web application deployment process? What tools are used? What is the workflow?
- Do you have experience using Amazon Web Services?
As a final wrap up, I’ll describe a real world feature that is in our product roadmap, and ask the candidate to walk me through how they’d implement something like I described. How they approach the problem and then describe the implementation steps tells me much about them as developers
Although I might dig in on a few specific areas more if answers aren’t clear, at this point I’ve got a pretty good idea whether this developer could be productive in our environment. If I’m interested, I’ll wrap up by asking them to send me code samples to review, and in some cases with an interactive coding session.
Of course, now that I’ve published this on our blog, I’m going to have to come with a new list of questions next time I hire an engineer :/
HiringThing is easy to use, intuitive online recruiting software that makes it easy to post jobs online, manage applicants and hire great employees.