With the Holiday Dead Zone coming to an end and the global economy picking up, I’d like to talk a little about interviewing software developers since hiring season is now upon us. Ever been to an interview where they ask some whopper like this?
“Can you ever write code in C++ where you say “delete this;“?”**
Or maybe one of these doozies from “Google’s Interview Questions to Make You Feel Stupid” (which, BTW, aren’t all from Google…but from Microsoft as well)
- How many piano tuners are there in the world?
- How many golf balls can fit in a school bus?
- Why are manhole covers round?
- How much should you charge to wash all the windows in Seattle?
I’ll be the first to admit that I went straight for this Stump-the-Chump mentality. Along with the goofy questions above, developer interview articles abound with the kind of information you can ask about language trivia even the very authors of the language would probably be hard pressed to recall under pressure.
If you’ve never been subjected to such a grueling event, I commend you. You must know some really awesome people to get past those kind of interviews. But most developers know what I mean. The kind of interview where someone just throws out obscure or impossible questions one at a time until the candidate softly whimpers for mercy, turns into a puddle of tears, and runs screaming out of the door. Preferably with brown stains in their pants.
I started out as that kind of manager and interviewer. My favorite question was the Microsoft classic of the Four People, a flashlight and a Bridge question, except I used a variant where the four Beatles were stuck at Red Rocks Amphitheater here in Colorado. Inevitably, I asked that question to everyone I interviewed…project managers, developers, QA–I may have even tossed it out to a marketing guy once. My reputation at that company was “bastard interviewer” (a direct quote from my friends, and not altogether undeserved). Anyone who survived the ordeal always had a great collective story with a lot of the other employees to share at happy hour. My interview tactics actually influenced other managers at the company to ask easier questions because they felt sorry for the candidates having been through “my interview”.
Years later, I realize not only how mean that was, it was also useless. Of the mix of people I interviewed back then, we hired great developers, mediocre developers and a couple bad apples. These questions are supposed to be some sort of impeccable bozo filter–yet they all passed it. Our team was not filled with little Bill Gateses and Linus Torvaldses. While we were productive, we also didn’t launch our product either, so what went wrong?
When you attack someone’s encyclopedia of knowledge, these kind of questions barely touch on the darkest corners of experience if you’re lucky. It’s somewhat like the SAT admission test here in the US for college admission. But like the SAT fails to capture real knowledge and performance potential at a university level, the interview questions we use today are equally inept.
What you really want to know apriori is how this person will work on your team–do they share credit, steal it, or hide until the project ends? You’d like to know what kind of code they write–is it atrocious, beautiful, disorganized, or anal-retentive? You’d like to know how the interact with people–are they sociopaths, leeches, primadonnas or Mother Teresa? You want to know if they’re Smart and Get Things Done, to quote Joel Spolsky. Checking whether they know esoterica about C++ isn’t helpful when they’ll spend 90% of their time on Java. Or hammering someone about parameters and exceptions to methods for a particular framework (Seriously, I saw this on several blogs asking people detailed questions about methods in Spring or Hibernate) when the answer is one Google search away. All of this kind of interviewing is useless.
Now that we’re at the end of the first decade of the 21st century, I’d like to boldly propose that we do away with Stump-the-Chump interviewing. Instead, why don’t we try this, adapted from this post about entrepreneurs where a VC has specific criteria for successful entrepreneurs:
- Tenacity: Is this the kind of developer who has really been through the ringer of a hard problem and crawled out of the sewer pipe with the answer raised in his or her hand, triumphant? Or do they sit back and wait for others to answer questions for them?
- Street Smarts: No, I don’t mean do they know how to make a shiv out of the plastic pepper shaker in the break rooms. I mean, do they know the rules and when to break them? Are they creative in their solutions, or more conventional and straight forward?
- Ability to Pivot: Is this person going to whine or moan when the project suddenly needs to change direction and rewrite in Ruby? Or do they take things in stride, take your instructions and start grabbing links for the entire team to bone up on the finer points of Rails, Grails and JRuby too?
- Resiliency: When the project reaches a point of just grinding out some mindless junk, are they the kind that complains about it or someone that finds ways to get past that with scripts they share or tricks from another job? If things head south on the design meeting, do they bash the marketing team for the changes, or just take a deep breath and sink their teeth into getting past this setback?
- Inspiration: Does this developer constantly strive for new information? Do they like to share blogs or resources that get them excited about their job? Are they the kind of person who finds a new way to write a framework and creates a proof of concept just to show how interesting it might be for the next revision?
I’m not going to tell you which questions to ask, because really, that’s no different than another stump-the-chump session using my blog as the source. Use their resume, ask leading, open-ended questions that get the person to tell you about their previous projects. Listen to what they have to say, probe deeper into it, get a feeling for their experience. Get past the bullshit, because we all know there’s a whole lot of training that we go through to “pass the interview”. Call their references and get references from their references, because those people will actually give you honest answers about this person. Find someone you know that worked with them. Ask them if they’d work on the same team with them again. Really, that’s the one question you need to ask.
And those are the kind of answers we’re looking for anyhow.
* UPDATE: A great site popped up that allows you to perform remote coding interviews to help weed out the wheat from the chaff: Try See[Mike]Code. They write, you watch. Live. Get some feedback before you even start the interviewing process.
* UPDATE (part 2): An article from Monster.com about Google’s ineffective hiring practices.
**Incidentally, for those uninterested or unwilling to look it up, the answer is yes, you can. And there are some valid reasons to do so, but the question definitely shows just how much or how little you understand the underlying memory model and code execution of C++. But I still think it sucks as an interview question for C++ developers.
*** Nothing new under the sun: If you liked this post, try this gem from 2007 that mentions many of the same points but in a different way. I found it AFTER I wrote this. 🙂