Unless you are the top company in your bracket, your completion rate will also not be so great for a take-home (people have limited time: they'll sort by how good your company is). Sure they'll do Google's take-home but local business that does local comp/prevailing wages? It's at the bottom of the pile. By the time they get to it, the best candidates will already have an offer from a better company.
That's why I prefer to bring people on-site as soon as possible, and do a little whiteboard (the point being that the candidate must... know how to code!). It's an artificial challenge that's really a pretext to have a technical discussion.
Only time I advise to use take-homes is when you are dealing with a massive number of applicants from institutions that have a poor signal to noise ratio. Bootcamps come to mind. But then you end up with candidates that have the homework done by someone else and it ends up not being a good filter either.
Apparently we should just review github OSS contributions and how many unit tests they write.
Sketch out rough program structure or system design or whatever
Vs
Write valid Python to solve some leetcode question
No, but speaking from experience - also don't reach out to senior, employed devs for a role, then waste their time with whiteboard leetcode quizzes to "make sure they aren't fakers or coasting, we have sooo many applicants".
In those cases, a conversation is really more valuable, we aren't interns.
The "context" (hints) they give different candidates can vary massively, perhaps by the end you've realised that your question is ambiguous, or you like the personality of this other candidate.
I've worked with folks who will definitely give attractive women more guidance throughout so they arrive at the "correct" solution and not see what they are doing.
I'm not sure. Ability to remain calm and code when shit's on fire can be fairly useful skill at some places (the smaller the company, the more valuable it can be). I've did that, coding emergency patches - e.g. to cache some hot paths when we've got unusual traffic that revealed bottlenecks that we've never hit (and noticed) before. Though I'd say it's a fairly different mental experience than coding at an interview.
Also, actually writing code on a whiteboard is a weird skill outside of academic roles. But most places I've seen asked to sketch some crude pseudocode or - better - draw wavy lines and boxes that represent processes and entities, then talk about it (and I think this is fine, whiteboard here is just a convenient tool).
And, of course, requiring to remember some algorithms from memory is a rarely useful skill. I've coded even in quite spartan conditions (right in a server room, with an ancient CRT monitor and keyboard, plain vim running on a 80x25 text console) but even then I had one or two Internet-connected devices that I could've used to look things up. If a candidate is allowed (or, better, even encouraged) to search for anything they want - it's all good, of course.
Outside of education, no one bothers to remember actual algorithms unless they've used them recently - everyone remembers names and key properties, and optionally remember some core principles (and then either just use them because they're already in a library or popular package, or go look for the implementation details).
This is the key. Not all pressure is the same.
Shit on fire at work is not actually personal pressure, it's pressure on the company. And to be clear, shit on fire at work tends to be a metaphorical exaggeration, where an emergency code patch isn't going to save the company from imminent bankruptcy. You're still going to have a job the next day, still going to have a roof over your head and food on the table. And your coworkers already know you and respect your work (if you're competent).
This is vastly different from being unemployed, suffering from profound financial worries about your future, and having complete strangers looking over your shoulder, prematurely judging you in the span of a few minutes, where these few minutes can determine your personal fate.
I've done quite a few emergency fixes over my career, but exactly zero of them were lose-the-job emergencies. Whereas every job interview is a lose-the-job emergency.
I keep myself in the interviewing loop at my company because I actually enjoyed the process when I joined. It was conversations over “executable” solutions. Now, we kick out so many candidates that can’t get a coded, running solution in the 45 minute slot.
I have tried so many times to explain the WILD asymmetry going on. That for us, we just have to interview the next candidate. To them, they have the enormous pressure of “if I can’t do this exercise then I have no income, no health insurance, no security.”
That’s unfair.
You certainly don't need rote for that, the algorithm is trivial for anyone who did well in their introduction to programming class.
Either the candidate "gets it" in about 10-15 minutes, or struggles for 60 minutes.
The pressure of whiteboard interviews (mostly negative; of the form "yeah this problem is basically trivial, but I'm not used to coding while talking to a stranger, plus the time requirements just don't smell right and certainly do not reflect real work conditions") are so infinitely removed from ...
The pressure at real jobs (mostly positive: "the problem is somewhat non-trivial, and I know time is kind of tight; but I'm in the flow and in my preferred environment; and at least I know the requirements are legit; so can I triage some good result out of this before the end of the day?").
At least for any job one would want to have.
If this distinction is not intuitively obvious to you - or are quick to characterize any negative reaction to your interview as a matter of the candidate being basically a total limp-wrist at your craft, ready to "implode" at the slightest difficulty -- then really, you have no business constructing interview challenges for people. Not challenges with any kind of a time limit, anyway (these being generally unnecessary, when we think about it).
Are the best developer candidates looking for on-site roles? I don’t know any that prefer an office setting.
2. Whiteboards
Yet another way to test developers on stuff that is unrelated to the work. I don’t even like writing with my hands all that much because I’m on a keyboard all day.
I get into a whiteboard and I am being tested on writing skills, how visual my thought process is, how my handwriting is, how comfortable I am in a public speaking position…all great qualities, but all entirely unrelated to programming in a team.
Is whiteboarding even a realistic exercise in typical multi-office or remote companies? If I’m presenting to coworkers I’m probably on zoom in my development tools right? That’s not a whiteboard.
all of these are _highly_ relevant to programming in a team beyond the senior level
so, people want to hire me when they meet me in person, and I can give more inputs of rapport. data point of 1.
I don't know, perhaps it's because I've progressed every interview I've had the opportunity to do a take-home on (and I struggle with most leet-code style whiteboarding interviews) but I've always seen take-homes as an audition for your software development style -- what you deliver in a take-home assessment is what they will use to judge how you'll deliver on the job, plain and simple.
I've only done take homes for companies that I've already passed initial interviews for and generally like the people I've talked to and have favorable impressions of the culture/workplace thus far. I wouldn't do a take-home before that, but I'd do a take-home any day before a leet code grinding thing.
So your experience has been quite specific. A lot of companies think that it's fine to send you a take-home assignment as the first step. Some more do it after just a 10 minute phone call.
I'm not saying you're wrong, just that your amazement can easily be explained by the fact that you've done it in particular circumstances which is probably not the experience of most people.
Do you also expect a Med graduate to see some patients in the hospital for free before giving them a job?
I've seen individuals that can't speak English, can't spell, use punctuation and write a coherent sentence given a degree. I don't want to bring race into this, but it's very much an important issue here in South African universities: there is a huge shortage of black developers. So universities have immense pressure to rubber-stamp pass the black individuals lest they be seen as the "problem" or "racist".
If you spend enough time hiring you learn that a 4 year degree is a very poor signal for "can be a productive engineer". Communication, raw coding, and soft skills aside I'm still regularly shocked by how weak the CS skills of many fresh grads are, it seems a double digit percentage never really learn big O well enough to use it day to day. When you're paying big salaries you can't afford not to verify this stuff.
> Do you also expect a Med graduate to see some patients in the hospital for free before giving them a job?
I mean, this is literally a requirement for graduating most pre-med programs.
Getting more at your point - in many skilled white collar professions you need to take regular tests to maintain "certification". The bodies that issue these certifications are trusted enough to maintain standards that it's possible to get hired by maintaining the certification. SWEs have no similar institution, and given how fast the field moves it's not clear we're ready to establish one.
If the computer science industry was more well regulated along the lines of traditional engineering by requiring a PE exam, then we'd have to do less upfront whiteboarding and leetcode interviewing to verify that an applicants abilities actually reflect their academic credentials.
Few months later I got a call asking to interview again as they realized their standards were too high. Not a chance.
They could simply be wrong. I've seen people demand the wrong solution. I've seen tests with bad instructions.
Most people are not good at producing test