Finding the Best Software Developers

Dr. Dobb's Journal October 2000

Employers are looking for technically savvy programmers

By John Kaplan

John is vice president of software engineering at Connexn Techologies. He can be reached at jkaplan@cnnxn.com.
Sample Technical Questions

So you want to hire the best software developers? You've got your work cut out for you. Finding good employees in any field is difficult. It is especially difficult to evaluate peoples' job skills, and if you've hired software developers, you know this difficulty firsthand. The well-publicized developer shortage turns up the pressure to settle for whomever you can find.

The good news is that you don't have to give in to this pressure. Shortage or no shortage, there are usually excellent software developers looking for good opportunities. And though evaluating developers' skills is difficult, it is not impossible. It takes plenty of hard work, but you can learn to find the best developers. Further, if you attract a few good developers, they will help you attract more, so recruiting a successful development team gets easier as you gain momentum.

There are several components to a recruiting campaign, including advertising, working with headhunters, selling the company to candidates, checking references, and making offers. But the cornerstone of a good recruiting campaign is evaluating candidates' skills. With the ability to pinpoint the skill level of each candidate, you are no longer flying blind and you have a tremendous advantage over the average software development shop.

Know Thy Organization

There are many ways to succeed (and sadly, many more ways to fail), depending on how your organization works and what it expects of its employees. The same developer can perform brilliantly in one organization, and still fail miserably in another. So the best place to start looking for clues is in your current organization. (If you are starting a new organization, look at your last one. If you've never worked in a software development organization, you shouldn't be trying to hire software developers. Software development is a field where people routinely over-represent their abilities, and experience in the trenches is the only way to develop the skills to see through this.) Take stock of the developers you work with. Who consistently gets the best results? What evidence do you rely on to make that judgment? Once you can tell who is effective and who isn't in the context of your organization, you can make guesses as to why, and use these guesses as the basis for formulating interview questions.

Preparing the Interview

Before getting into the questions themselves, here are some tips that have worked for me when putting an interview together.

Developing Questions

You should continually try out new technical questions as you develop your interview. When you first try a question, you can't be sure if it will help you differentiate developers' skills. You can get a headstart by asking developers who currently work with you, and check if their answers correspond to their skills as you know them. If a question is too easy or too difficult, almost all your candidates will give similar answers, so the question tells you nothing about them. That said, some questions that are almost too easy or too difficult -- but not quite -- can help you differentiate skill levels at the extremes of the scale, so don't give up on a question before you've had a chance to hear a variety of candidates answer.

The more new questions you can qualify, and the more variety of questions you give each candidate, the more you avoid the tester's perennial dilemma. This dilemma is that good questions are hard to find, and they are only valuable if the person taking the test has not been coached with the right answer. For example, there is a question that many Silicon Valley firms ask their candidates, which is, "Why are manhole covers round?" There is a huge problem with this question (even if you cast aside doubts about its validity as a predictor of success at programming computers). The problem is that this question and its answer have been published in numerous web sites and in books about software interviews. So if a candidate gives you the correct answer, "So the cover doesn't fall into the manhole," you can't tell if the candidate has figured this out on the spur of the moment, or has simply heard the question before.

Scaring Out Development Skills

Though successful software developers combine a large number of disparate skills, these skills can be organized into three significant categories. These are engineering skills, creative skills, and professional skills.

Engineering skills include knowledge of programming languages, operating systems, and software packages.

Creative skills include problem solving and pattern recognition and show the breadth of a developer's abilities.

Professional skills include regular work habits and getting along with coworkers.

Professional skills show how a developer can apply their other skills to help make your company successful.

Every developer has a different mix of these skills, and different strengths and weaknesses. To build a winning development team, you must evaluate each new candidate's skills in light of how they will fit in, and where you need the most expertise. To do a good evaluation, you must develop a good set of interview questions that can be used to measure these markedly different kinds of skills, and you must fine-tune your interpretations of the answers as you gain experience. Your interview questions are the filter through which you perceive your candidate's skills.

Technical Questions

The most valuable technical questions I have found are questions that have a wrinkle or a twist to them. Developers at different skill levels will handle the twist differently, and so give you a chance to discern the differences. Here's an example of a twist. Take a standard, well-known piece of code and alter it significantly or recode it in a more complex way than necessary, and ask candidates to analyze it. Can they keep the alterations straight? Can they see through the recoding and recognize the function? Ask them to suggest improvements. What kinds of improvements do they suggest?

Here is another twist. Ask candidates to code a function, but leave out part of the requirements. Do they call you out on the missing part as they try to code it? Do they plow through by making an assumption about what the requirement was? Is the assumption valid? Or do they simply get stuck and flounder, wondering what to do?

To examine engineering skills, center your questions on language and coding. There are many lists of technical interview questions on the Web that you can use to help generate your own ideas. Whenever I need fresh ideas, I pick a search engine and enter "Java interview questions" or "computer interview," and see where surfing leads me. Again, avoid directly using anything you see published on the Web or in a book (or in this article, for that matter). Here are some examples:

Creative Skills Questions

To examine creative skills, center your questions on design and concepts. Because this is a more vague set of skills to evaluate, it helps to try different kinds of questions. Be careful not to ask any question where you expect a single "right" or "best" answer. Creativity can be interesting, thought provoking, and inspiring, but it is not often right or wrong. Here are some examples:

To examine professional skills, center your questions on work situations and relationships with managers and coworkers. There are hundreds of books available with examples you can use and tips on how to interpret the answers. A meaningful discussion of these questions is beyond the scope of this article, but here are some of my favorite books to recommend.

Evaluating Answers

Though finding good technical interview questions is difficult, the most difficult skill is evaluating the answers. Unfortunately, because of the highly specialized nature of computer programming, general hiring reference books give little guidance. Here are some things that have worked for me:

Conclusion

So, there you have it. Finding the best software developers through interviewing is difficult, but it can be done. If you use any of the aforementioned techniques at all, you are already above average, and the more thought and experience you put in, the more excellent you will become. Good luck and happy hunting.

DDJ