So you want to hire a developer? Or maybe you just want to know what is going through the heads of employers like myself. Either way, let’s dive right into what I think are best practices for hiring programmers. I’ve found my opinions to be quite controversial, but I do put them into practice in my own career and at boot.dev. When you inevitably disagree with some of my points, feel free to @ me.
The following process assumes essentially no HR to help (which I think is probably a good thing), and definitely no recruiters. I only have experience hiring direct to small(ish) companies.
#1 - Throw Away Resumes With >2 Pages 🔗
Like really. When I post a job I get so many candidates. I need a way to quickly filter out some bad apples. I don’t have time to read about your high-school lifeguarding job.
Ideally, all resumes would be exactly 1 page. If you have hundreds of applicants perhaps try filtering down to the single pagers.
Inb4, “but I have so much relevant experience, it doesn’t fit on one page”. Yes it does. No one gives a flying fart about the project you worked on 10 years ago and 6 companies ago. Boil it down to your MOST INTERESTING projects and MOST RELEVANT experience. It can fit on one page.
#2 - Simplify the Process 🔗
There is nothing worse as a candidate than sitting through 3 different 2 hour-long interviews only to find they didn’t get the job. Conversely, it also sucks as an employer to sit through several long interviews and have the candidate take another opportunity.
My process is fairly simple:
- Does the application look good? Great, go to step 2.
- ~20-minute zoom phone screen. This is not an interview. Just answering questions about the company and learning about the candidate’s situation. If there are no red flags, go to step 3.
- ~90-minute (preferably in-person) interview. This is it. Learn everything you need to know in less than 90 minutes. If you can’t do that, you are a bad interviewer and need more practice.
#3 - Take One of the First Good Candidates 🔗
If you are a manager like me, then you spend ~80% of your time “coding” (doing technical work) and ~20% of your time “managing” (whatever the hell that means). Algorithmically, we all know that to find the greatest number in a list we need to check all the numbers. That’s O(n).
In reality, I don’t have time to “check” (interview) all the candidates to find the best one. I usually try to at least interview 3 or 4 candidates before making an offer, and sometimes many more if I don’t find anyone quickly.
I’ve found there are diminishing returns on your time spent trying to find a candidate after the first few good interviews.
Y Axis: Probability of finding a good candidate
X Axis: Number of candidates interviewed
#4 - Whiteboarding 🔗
Somehow whiteboarding has become a naughty word when talking about interviewing. I hear dumb-ass statements like, “who cares if I can whiteboard if I know how to code?”
No one cares. White-boarding is just a convenient way to ignore dumb things that we can all google (like syntax) and focus on shit that matters (algorithms, data structures, architectural prowess, understanding of frameworks/concepts etc)
I don’t ask React developers to build binary trees. I don’t ask candidates for the data team to talk about Redux vs React Context. Keep the questions applicable, and don’t be afraid to use a goddamn whiteboard.
#5 - Homework 🔗
Fuck coding homework. It’s a waste of time for several reasons:
- Anyone can “dress up” a small project and google great solutions
- It frustrates candidates, especially the good ones
Think of coding homework as the opposite of application review. Application review weeds out bad candidates. Coding homework will often weed out the good ones.
Look at your candidate’s Github, Gitlab, whatever. Have them send links to projects they’ve worked on. Look at their commit histories. They’ve likely written thousands of lines of code you can get access to.
A Homework Caveat 🔗
Homework can make sense for candidates that have effectively no experience (very junior developers) for several reasons:
- They don’t mind doing some extra work to land a job, so you won’t weed out the good ones.
- They don’t have much open-source code to share
- Junior devs learn FAST. A project from 3 months ago likely won’t accurately reflect where they are at today.
# 6 - Compensation 🔗
If the candidate expects 80k, offer 85k. If they expect 110k, offer 120k. Why? It’s better to have the candidate on your team. If you get into hardcore negotiations then they start to see you as the enemy. Everything will go smoother and you will have a more effective relationship if you are on the same team from day 1.