One of the most important things you ever do is to interview people for a job on your team, and it’s hard to do it right – people don’t come neatly labeled. But somehow, you need to figure out if this person is that great ingredient you can mix into the stew of your team and make it better. I’m going to spend the next three posts on interviewing, and we’ll start with getting ready.
What Kind of Prince Do We Need?
We work at FriskyCo, a small technology startup, and we need to hire a great database engineer to design, build, and run our back end storage systems. Let’s start out by making a very short list of hard requirements. And really, these supposedly “hard” requirements are just “highly desirable” – somebody who has some other amazing strength might be a good bet even if they look very different from the person we thought we were looking for.
We’ll start with skills they need to have. Ideally, our new hire would already be an expert in building, using, and maintaining highly scalable storage engines. In fact, they’d have already done the job, with the same technology we want to use, for some other company. Unfortunately, if we insist on that, there are a tiny number of people in the world who would qualify (the so-called “albino unicorn”). We can hold out for that miracle, or we can accept more ramp and risk to get a broader candidate pool.
On the flip side, setting up a system like this is not for amateurs, so we aren’t willing to hire just any competent developer. After a bunch of debate, we’ve decided we should look for these “hard” requirements:
- Has built and deployed some kind of highly scalable system.
- Is an expert at some industrial strength database system.
- Is a skilled systems programmer.
But skills are not enough; it’s vitally important to assess team fit – whether the candidate will flourish in our team’s culture. FriskyCo is a startup, which means we move fast and change our minds as we evolve the product. They have to be able to handle uncertainty and not freeze or freak out. They have to be inspired and passionate about the mission we’ve undertaken – we’re too small to have people who aren’t bought into the adventure. We have a standard set of things we always look for as well around their nature – they are smart, not too arrogant, can handle pushback, and are driven to get things done.
Now we have a bottom line on what we need in a candidate (or at least what we think we need). Note that we don’t have any requirements around education or “years of experience” – those can be useful indicators that somebody has what you actually need, but I think it’s a big mistake to focus on them rather than on your true requirements.
Architecting the Interviews
This is a crucial hire for us and we’re going to have a set of people talk to the candidate. We’ve done a number of interviews together, so I have a pretty good sense of what each person does well.
- John, the head of engineering, is a good all-around interviewer and does a great system design assessment.
- Mary, the front end dev, has a good set of questions around designing a well factored database schema and a solid API.
- Rajiv is good at straight coding questions.
- I’ll test to see if they can handle our environment, if they have passion for the product, and if they have design insight.
By thinking about what each person should focus on, we are much more likely to get decent coverage. Otherwise, everybody may ask coding questions and we won’t know if we have a good fit for the team. Or, even worse, most people spend their time on team questions, and we don’t know if the candidate can actually build anything. Also, the team is crazy busy, so giving each interviewer a concrete set of things to probe is much appreciated. It isn’t a straight-jacket – if an interesting digression comes up during the discussion, everyone knows they can and should pursue it. But each interviewer should really try to nail those one or two things that we’re counting on them to test, and have a firm opinion at the end as to whether the person is a hire from that perspective.
One tricky situation is that you are hiring for a skill that the team doesn’t have yet. Suppose in our FriskyCo example, we don’t have anyone who knows databases well. What to do? Sometimes you can wriggle around this (maybe one of the folks can assess a schema, even if nobody knows how to design one). But that’s pretty risky – it’s often possible for a glib person with weak knowledge to snow somebody who has even less. So I always try to draft somebody from outside the team to participate in the interviews. Maybe somebody from elsewhere in the company, if you are part of a larger organization. A contractor you’ve worked with. A friend who will pitch in as a favor. There just isn’t any true substitute for somebody who is an expert at the thing you need to evaluate.
Interview Etiquette
Every candidate is interviewing us as much as we are interviewing them. How they are treated will strongly affect whether they accept an offer, if we extend one. So:
- Don’t be clueless. It’s really irritating when the interviewer isn’t sure what position you are interviewing for. They haven’t looked at your resume. They putz around, trying to figure out what to talk about.
- Don’t be a jerk. Enough said.
- Don’t dither. One of the most annoying things you can do is not to make a decision. Interviewing at some places is like dropping a rock into a bottomless pit .. you wait, and you wait, and nothing seems to happen. Get all the information you are going to get, and then make the damn decision.
Next, we’ll look at what to actually do during the interview.
Photo credit: Nickodemo