Tom DeMarco once posed the question, "Would you hire a juggler without asking him to juggle for you?" It's important not to make that kind of mistake when hiring programmers for an agile team! Much of the success of a development project depends on the quality of the individuals on the team and how well they interact.
In this segment, Jeff Nielsen discusses how to conduct an "audition interview" — a technique for rapidly evaluating a candidate's programming ability in a near-real-life situation.
Why is it important to hire well?
So, the agile value of focusing on people and iterations over processes and tools requires that we find the right developers, analysts, testers, mangers for our teams. It is essential to find the right people for a successful software project.
What is the hiring process like now?
I am reminded of a little segment from Tom DeMarco’s book, Peopleware, where he talks about this fictional story of trying to hire a juggler to work for your company. This juggler comes in and they ask him about is background, and his references, and what is his theory of juggling, but they never actually asked to guy to juggle. Well, we do the same thing when hiring programmers. There are lots and lots of programmers that get hired without ever having to show how well they program. There are various ways to do that: you can ask programmers to send in a code sample, or better yet, send them a sample problem and ask them to send in a program that solves that problem. My favorite way to evaluate programmers is what I call the, “audition interview,” where during the interview itself you’re actually asking them to write code in a near-real-life situation, that is what I call the, “audition interview.”
How do I conduct an “audition interview?”
Number one, sit the programmer down at a computer with an integrated development environment running, somewhere they can actually write code in a real-life situation.
Number two, find a pairing partner for this person, and ideally multiple pair programming partners for the candidate. This is a great way for the whole existing team to evaluate the candidates programming ability. So, twenty minutes per person, you can get four or five people through in 80-90 minutes.
Third is to come up with the right programming problem to solve. You’re probably not going to get away with working on the actual live system that your team is supporting so you need some sort of programming problem. Games are a great source of ideas for programming problems. I used to have candidates program the logic behind a hangman game or plotting points in a two-dimensional coordinate system. That’s good it involves some math and thinking in offsets and if you scale then you have to do division, and mods, and all that, so that’s another good program.
Step four is have the candidate identify something that they can code up in the time allotted, whether thirty minutes, whether that’s two hours whatever they think they can reasonably accomplish in that time and then have at it. I like to encourage them to work in a test-driven development style. If they don’t know TDD then that’s a perfect chance for the pairing partner to teach TDD. You can engage in ping-pong pairing, where the existing team member will write the test and then ask the candidate to write code to implement that test.
And then step number six is watch. Be very observant as your candidate is programming. Is he facile with the keyboard? Is he good at cutting and pasting? Can she navigate the IDE? Does she know some keyboard shortcuts? All sorts of things you can pick up just by watching someone try to write code.
Joel Spolsky has writing a book about how to hire a good developer and the title of his book is Smart and Gets Things Done. That is the meme he uses throughout for the two basic criteria for hiring a programmer. Are they smart, and do they get things done? You can find out both of those things in this, “audition-style interview.”
Use this space to describe a pain point you'd like us to address in an upcoming issue of Insight Newsletter and be entered to win a $50 Visa gift card. Winner is announced in the following month's newsletter. Thank you for your participation!