I’ve always found that, when interviewing someone for a technical position, the round of time talking about actual technical knowledge is the one taking the smallest fragment of the conversation. And this is because all technology can be learnt with proper attitude and effort, but you don’t exercise and study to get the proper behavior.
This does not mean that the skill screening is not necessary. If the position requires a degree of expertise with a very specific tool, chances are that you do not want to invest a long learning curve for your new recruit. If the project is already underway, or on maintenance life cycle, perhaps a candidate with profound knowledge of the core framework is a better pick than a junior with rudimentary experience with the programming language.
That said, a thief knows a thief: you need a developer to recruit a developer. Or at least someone who had the experience in the past. Because that’s how you will quickly distinguish the candidate from the expert, and you can jump towards more interesting topics.
So, back to the original question. What does make a certain developer a good one? I’m going to present a few ideas that I believe are the backbone of an efficient programmer and an outstanding worker. They are all important, and perhaps not all of them are present in a certain applicant, but find some of these, and you’ll have good markers for appropriate business fit.
Foremost, the ingenuity. Not knowing how to do something is not the same than not being able to do it. It may look conflicting on a first glance, but that it’s just because what we are looking for: a developer’s job is to create software that performs specific needs, and this means that there are endless ways to do those actions . Do not ask on an interview for boring solutions to textbook questions, but present a real problem instead. Give all the information you can on the problem, and listen to the questions that the interviewed formulates. Encourage him/her to talk aloud, to explain their train of thought: being able to follow a pattern of deductions and present a solution shows creativity. This resolution might not be robust, or the best approach, but what you are putting their lateral thinking skills to the test, not their ability to present a solution under the effects of pressure and stress.
With the previous inquire you also probe another critical attribute: the “need to solve”. I’ve noticed that a good developer is somewhat of a tinkerer: they are driven to pull things apart, and then putting them together again. They thrive with the need to know. You can notice if the candidate holds this mindset just by answering their questions. Make sure to withdraw information from them in the problem previously presented, and see if their curiosity appears. Keep in mind that looking for specific questions is not the objective of this exercise. Do not expect a certain number of queries, nor “quality questions” to accept or reject a candidate. This is not a binary problem, and you shouldn’t address it as such.
Next, look for passion. This can manifest in the form of a technology-related hobby, or perhaps they have a blog related to their trade. Try to get a hold for their motivation. The best developers are challenge-driven, willing to learn, and willing to offer advice.
Ingenuity, urge to solve, and passion. These three attributes make any aspirant into a workforce by itself. Technologies, languages and tools come second, because they can be taught. Attitude is what you should be looking for.