The Codist - Programmerthink

Interview Technique: A Topdown Approach

Posted: 09/24/2007, Perm Link Readers: 2364


Having spent too much of life on both ends of interviewing people (mostly as the interviewee lately) I've seen and experienced a world of different styles. The intent of a first interview is usually to separate the ditch-digger from the real coder.

Most of the interview techniques suck.

Interviewers often begin with asking the interviewee about programming basics, to describe object-oriented programming concepts, to describe simple language constructs, or the like. The assumption is that the ditch digger doesn't know anything like that. Of course, an experienced programmer might be good at coding but not be able to answer theoretical questions, or be good at complex concepts but spend little time with language or framework features that the IDE takes care of. Basic knowledge is also no guarantee they know how to use it. I once new a guy who aced a Java Certification test but was utterly incapable of writing even the simplest actual program.

So, OK, you say, it's just a phone screen. Now we will make them take tests, talk with some managers, perhaps solve some Pirate Puzzles or even survive a battery of intense interviews from bored (and sometimes cruel) developers. Then we will sort out the tired, the poor and the huddled masses, oh wait, wrong concept. We will then hire the brightest, smartest person in the world!

Yet after all this massive effort on the part of many people in the organization, you still wind up with programmers who are average or worse in delivering real applications.

Clearly finding the right people is more of a crapshoot than most companies would admit to. The one thing you really want to know is "will the candidate be able to write functional code, deliver it in a reasonable time, with good quality and maintainability". Sadly that's the hardest thing to figure out without actually hiring them and seeing how well they do. I do see more people these days doing contract-to-hire.

In my experience on the hiring side, the quickest type of screen to see how well they might function in real development is to pick a random entry in their resume that appeared to be significant, and ask them to describe the requirements, the technologies, the choices, the history and what their precise role was. The assumption is that someone who actually did a real project could describe it in great detail. For me, I can still remember all the details of virtually everything on my resume, since most of them took months (or in couple cases years) out of my life. It's is very hard to riff some random details and fool a competent engineer or even manager. I want to know how intimate do you know something you say you did for a fairly long period of time, even if it's a few years in the past. You may forget the syntax or some method calls, but not something that you spent months doing.

The process of programming is a lot of little details, many of which have to be mastered and reused in most projects, even as the technologies and environment changes. Dealing with managers, requirements, plans, code management systems, testing, QA, debugging, making choices in tools or frameworks all are things you do in most projects but the details change. I want to know how the candidate thinks about the work of programming, and how they have done more so than some intimate details about a language or tool or API. These things change from time to time, the ability to actually deliver does not.

I think very little of the bottom-up approach that many companies take. They focus on weeding out the ditch-diggers and then hope some deliverers survive. I would rather find the deliverers and let the others weed themselves out.

Of course this isn't a perfect solution either, nothing is short of having people work for you for a few months and see if they can deliver. I would rather know that a person can articulate what they have done on projects and understand the process of delivery (which of course means designing, coding, testing, debugging and understanding what to do) and work the interview from that perspective.

After all, no one ever asks a ditch digger to define dirt, they want to know if they can dig it.

Tags: programmer, jobs
Stephen 10/08/2007 17:27

I agree.

The interview process is something like the Touring Test. If you want to know if someone on the other end of the teletypewriter is sentient, you have a conversation. To make this work, you must be sentient. That means that head hunters who don't know programming can't hope to be any good at screening. But it also means that if you want to hire someone who is good at something that you aren't, you are at a disadvantage. My fall back position in these cases is to be lucky. It works for me.

The other tack is, What is your favorite interview question?

Mine is this:

What are your favorite tools?

I wish i'd made it up.

My favorite tactic. My head hunter reformats my CV (resume) and generally botches the spellings of numerous references. I gave it to them electronically, so it must be deliberate. Whoever is interviewing me then asks me about them. I often half to take a look, as it is so broken i don't even know what section it's from. But then i can explain what it was, and what context it was in. Often, it was from one of my more interesting jobs. This gets me hired, or at least an offer. I like this tactic because i personally do nothing to make it happen. And, during the interview, i just act naturally. And, it saves me from the interview where the interviewer has no favorite question. As i have no sales skills (or rather, i have negative sales skills) i take any help i can get.

I'm also of the opinion that one takes a 50 point IQ hit by being in an interview. That might be for both sides, i'm not sure.

Phil 12/20/2007 03:49

Stephen said...

" I often half to take a look"

me thinks you complain to much !