The new employee selection and hiring process is important for any business, but it is uniquely important, and uniquely difficult, for software development organizations. Many organizations conduct a hiring process that overemphasizes the assessment of some of the candidate’s qualities, while ignoring others that may be more important. A balanced approach, and more reasonable expectations, can lead to a more efficient hiring process.
Joel Spolsky, among others, has written that we should be looking for two fundamental qualities in a software developer, one being “smart” and the other being “ability to get things done”. These are actually two categories of skills. “Smart” covers a collection of attributes that include “knowledge”, “experience”, and “problem-solving ability”.
The other category, “ability to get things done” (GTD), is more amorphous, yet is more important. A genius who does not apply his talents is less valuable than an average candidate who applies his vigorously.
There are two critically important attributes for a software developer that straddle these categories. One is the “ability to learn” and the other is “wisdom”. “Wisdom” is a form of “meta-intelligence” – it is the ability to choose when and how to apply one’s talents. Like GTD, it is a “force-multiplier”.
A candidate must possess all of the qualities listed above to some degree. However, most companies perform candidate assessments that overemphasize “knowledge” and “problem-solving ability”, while underemphasizing “experience”, “ability to learn” and GTD.
The “ability to learn” is important for any technical job, but it is even more important for software developers.
The practice of software development now requires continuous effort devoted to the search for relevant information from online sources, e.g. Stack Overflow. Software development has become a search problem. Rapid ad hoc knowledge acquisition is now an essential skill for modern developers.
If you compare job postings today with those from twenty years ago, one difference is striking -the candidate is asked to be knowledgeable in a much longer list of technologies. Most job postings feature a huge, fine grained breakdown of skills/knowledge that are deemed necessary or highly desirable. Usually that list is so long it is not realistic to test or even question a candidate on their actual working knowledge of all its items. A more realistic approach is to focus questions on two or three key technologies. Settle for an assessment of basic knowledge unless the technology is truly essential to get the job done from day one.
Usually most of the skills on the posting don’t require any real depth of knowledge and, if they are used at all, can be learned on the job. The aptitude for programming is founded on a kind of problem solving ability that is surprisingly uncommon. This ability is necessary, but far from sufficient, to succeed in a development position. Even if the position is for “software test”, the demand for automation means the candidate will need to be competent in coding and the requisite problem solving skills. Ironically, problem solving is one of the easiest abilities to assess in a review, so companies zero in on this to the exclusion of other skills.
One frequently used assessment technique is to hold an interactive session with the candidate where they are challenged to solve various exercises in front of one or more interviewers. This is typically arranged to be on a whiteboard while they are instructed to talk out loud about how they are solving the problems as they do so. This does not correspond well with the actual development process used on the job.
A more representative test would be a programming task that requires several hours, in a setting that allows the candidate to consult online resources and encourages the programmer to ask questions of the interviewer. To be representative, the problem description(s) should be incomplete and ambiguous. The questions the candidate asks the interviewer are more revealing than the candidate’s answers to questions the interviewer asks. How the candidate uses their time is telling. Watch for an approach that puts understanding the problem, and then determining an approach to solving it, ahead of coding the submission.
Pay attention to not just technological competence, but interpersonal skills, and to compatibility with your current staff. After the candidate passes a problem-solving screen, make sure they have an opportunity to interact with the members of the team they will be working with.
However, the first impressions of the team may not be a reliable indicator of compatibility. These can be colored by preconceptions and biases, and you should avoid over-reliance on subjective reactions. Direct your team to ask the candidate objective questions that are directly relevant to the team’s work. Remember that you owe the candidate an opportunity to assess the milieu they will spend their working life in. See how they take advantage of that opportunity.
Again, the questions the candidates ask are more important than the questions they are asked.
Experience matters, yet a candidate interview is not the best way to assess it. Savvy candidates will have prepared a personnel narrative that emphasizes the best aspects of their background, mirroring their carefully honed resumes. Ask if the candidate can suggest references who have worked with them on projects that seem relevant to what your business is doing. Ask about participation in open source projects – this marks the candidate as someone who is actively pursuing experience and showing initiative. Following up on the candidate’s responses can provide solid evidence of relevant experience.
Hiring managers need to accept that they cannot truly predict a candidate’s ability to develop software in their organization. Hiring needs to be treated as just one part of the staffing function. It must be complemented by proactively developing new hire skills and monitoring their professional growth through mentoring. Best practices like pair programming, in the context of an Agile team, can help you assess whether the candidate is providing the value to your organization that you need.
One way to reduce the risk, and cost, of hiring new staff directly is to use a software services company. Unlike a staffing firm, it can draw on a semi-permanent staff of already proven professionals. These individuals can start working in your organization without the overhead of the hiring process.
Be realistic. Hiring carefully can avoid some of the worst situations that a manager has to face. Hiring *too* carefully can deny your business resources critical for its success.