Interviewing Programmers

February 20, 2020

I believe large tech companies, and via association their employees, are some of the worst people to ask for hiring advice. These companies and individuals operate within a reality propped up by glorification, leading to a volume of applicants which drowns out poor hiring pipeline choices and procedural mistakes. This is prompted by a post I happened to read this morning about take-home assignments as part of the interview process; while I believe that post is mostly straw-man arguments, I’m not here to attack that it. What I would like to do is offer a reasoned counter-position to what most tech giants believe is an effective method of interviewing.

Respect

I want to be clear, I do not think tech giants respect interview candidates at all; they seem fine with the status quo of glorification leading to vast quantities of new graduates applying for what they consider to be a prestigious job. Most large tech businesses follow an easy-to-guess script when it comes to interviews; if I wanted to interview at any of them right now I could pick a set of these statements and be nearly correct.

Most of these are disrespectful toward candidates to a degree that would put smaller companies out of business for lack of accepted offers! When I poll friends with careers unrelated to the technology sector about interviews I am consistently met with surprise after describing the gauntlets companies utilize; I believe this anecdote is common — interviewing in other fields is much better — and stems from how insular the tech community is. These types of motivational-gulag interview pipelines are often cited as necessary to vet candidates because it’s “easy” to forge employment history or experience, yet we also ignore the vast number of equally challenging non-technology careers where interviews are respectful toward candidates.

Take-Home Assignments

Part of respecting candidates is being truthful about your interview pipeline; if you’re up-front about it a candidate can choose to decline. Many tech companies are opaque about actual steps in the pipeline and inject additional interviews, screening calls, and other miscellaneous hoops to jump through. It’s not always purposefully done as a bait-and-switch tactic, but it’s a morale-killer and large tech companies don’t notice the problem due to their applicant volumes. I’ve come to prefer small, take-home assignments done at the candidates leisure within a given relaxed time-frame as a solution to replacing white-boarding and pairing-on-a-bug style interviews. White-boarding is a major stress factor for people and can’t be easily duplicated across candidates since they will ask different questions and receive differing amounts of help. I would never expect a candidate to participate in pairing-on-a-bug style interviews — how insulting, asking a candidate to do some work for your company for free! Take-home assignments with lenient due dates strike a wonderful middle-ground, favouring neither active nor passive job-seekers and eliminate much of the stress of white-boarding.

Leniency within reason and ensuring the take-home assignment is short are critical because there are many people who have families or personal obligations — a 3 hour take-home assignment is not acceptable, the assignment should take no more time than a 30–60 minute recruiter call. Keeping the assignment short makes it easier for the candidate to schedule it into their lives; any candidate that doesn’t have 30–60 minutes for a short assignment certainly won’t have time for multiple interviews and recruiter calls. The goal of a take-home assignment is twofold: to quickly approximate programming abilities and to replace recruiter screening, timed screening questions, and collaborative word processor interviews. I think this is a giant leap forward in respecting candidates' time.

Cheating on take-home assignments is another problem that gets brought up over and over again, but I don’t think this is the mountainous problem people make of it. If you’re basing a take-home assignment on a random question an employee found on the Internet your interview process is garbage; that question won’t be related to your company at all. Take an hour or two, put together a short, simple question that covers the kinds of technical knowledge you want a candidate to have, and retire it after that round of hiring is done. Candidates can’t cheat on a home-grown question, plagiarism will stand out, and you get valuable data on candidate knowledge that directly relates to your company. Commenting and grading these simple assignments doesn’t take much employee time, it certainly takes less time than the full-day interviews a lot of companies run. You should always consider condensing these comments into feedback for the applicant — they put time in to submit the assignment and should get some kind of response. Being respectful doesn’t necessitate the candidate and company spending time on the interview concurrently, but it does require feedback.

Interview Information

A major benefit of the short, take-home assignment is the freedom to focus the hour-long on-site interview on something other than on-the-spot problem solving. You can use the time to discuss the candidate’s solution, chat about career goals or enthusiasm about particular technologies — you can actually spend time checking “soft skills”. These skills are far more valuable than the attention currently given to them, more valuable than if a candidate has memorized some data structure or algorithm. You can’t look up communication ability or desire to learn like you can look up an algorithm. Communication and learning are what set your best people apart; I believe that your best people will always be grown in-house because you can’t hire for your internal, tribal knowledge. You want to hire people who can become those experts at your company’s existing systems.

A small, take-home assignment can help you hire people who have the potential to grow into those critical experts. These assignments contain a wealth of information about candidates to use in your hiring process. How the candidate organizes their solution provides insight into the types of systems they’ve worked on and demonstrates how they think about order. Supplied tests illuminates how they have reasoned about their operating constraints and can highlight the testing methodologies familiar to them. Code quality can show you their discipline around naming schemes, clarity, and other metrics like mutations or thread-safety. You will see where candidates improve their solutions through good use of a data structure or algorithm — something as simple as sorting a list can be a differentiator. Since every candidate is receiving the same question senior programmers should be creating better, cohesive solutions than their junior counterparts and grading can be consistent. You do not need large, enterprise-style assignments to show skills and quality — thoughtfulness in the solution displays both.

Improve Your Process

Small, take-home assignments of 30–60 minute duration, with a lenient due date reduce candidate stress, take less of the candidate’s time, and make the hiring pipeline faster. Do the opposite of large tech companies because they operate inside a cult-of-personality without worry of mistakes. Respect your potential employees and make your interview process better, so that even rejected candidates go away feeling like their time wasn’t wasted with feedback. Use small, take-home assignments for interviewing programmers.