Sunday, July 15, 2012

A necessary condition for hiring a new developper

Software developers often take part in the recruiting process. Determine whether a candidate is suitable for our team/company is a challenge to say the least. This is especially correct for us - software developers with no HR training and in most cases used to take decisions based on well constructed set of rules. However, this is not the case we face in the recruiting process. This process requires us to use general guidelines, our experience and intuition.

At our company the recruiting process begins with a professional interview where the candidate is asked to code something, design something and show understanding regarding the running environment. 

Who passes the professional interview stage? 
We do not have golden rules. After each interview we conduct a short meeting to decide whether the candidate is suitable or not. We use similar questions throughout all of our interviews which enable us to better compare candidates. We interview in pairs and each interviewer can veto. We believe our general impression has the most weight on our decision.

How hard it is to make a decision?
Well as Joel Spolsky once wrote, there are three kind of candidates. The ones that you easily know you want, the ones you easily know you don't want and the maybes. Most of the effort is invested in the latter. 

Lately we started noticing that the ones we eventually hire from the maybes group have a certain characteristic. It is the ability of the candidate to evaluate his own answers. When asked a question, he knows which information is missing in order to answer it well. He will then state what he knows and what is missing. If he has been asked to solve a problem he will be able to state which aspects of the problem his solution works for, and ask for more info in order to provide a complete solution.

A candidate which does not have said characteristic behaves differently. They write code that doesn't work and algorithms that does not do as expected. The problem with this kind of candidates is that we had to tell them that there solution does not work. They supply shallow, inaccurate, missing  answers while they believe they answered the question fully.

This ability of the candidate to evaluate his own answers is extremely important for software developers. As developers, almost every task requires evaluating which information is missing in order to complete the task successfully. Developers that do not have the ability to evaluate missing information will start coding too early and write bad code.

Following this characteristic, we thought we might test this directly in the interview:
  • Ask the candidate directly what information he is missing to answer the question? This is good for knowledge questions. 
  • Ask a very hard question. The candidate does not have a chance of answering. What we are really looking for if to see if he realizes that instead of providing false answers, he can show us his way of thinking.
  • Guesstimate questions. 
  • Ask to design something with little information and hope he will ask you for what he is missing.

That's it. We hope it will help you add another aspect for your interviews.