← Back to Posts

A Year of LeetCode for a Job You Will Never Use It In

Updated:

Update, October 2026: It happened. An engineer at Anthropic removed the coding interview from their team’s loops because it “no longer provides signal”. I wrote about it in The Coding Interview Is Dead, and a Model Killed It.

The ritual

Somebody with eight years of experience, a production system serving real traffic, and a CV full of things that shipped, is sitting at their kitchen table at 11pm inverting a binary tree for the fortieth time this month. They will never invert a binary tree at work. They know this. The interviewer knows this. The interviewer inverted a binary tree eighteen months ago to get the job where they now ask other people to invert binary trees. Everybody knows.

We do it anyway, because the alternative isn’t getting hired.

The going rate to be competitive for a senior role at a company that pays well is somewhere between three months and a year of daily practice. Not learning. Practice. There’s a canonical list, the Blind 75, which grew into NeetCode 150, which grew into NeetCode 250, because 75 stopped being enough to clear the bar. There’s a book, Cracking the Coding Interview, that has sold enough copies to be a genuine publishing success. There are paid platforms, subscription tiers, Discord study groups, and a small industry of people who coach interviewing as a distinct skill from engineering. Because it’s a distinct skill from engineering. That’s the problem, and we keep walking past it.

Where this came from, briefly

It’s worth remembering that the format wasn’t designed. It accreted.

In 2007 Jeff Atwood wrote “Why Can’t Programmers.. Program?” and popularised FizzBuzz. The point was modest and correct: a shocking number of applicants couldn’t write a loop, so use a trivial screen to catch that. Joel Spolsky’s Guerrilla Guide to Interviewing was in the same spirit. Small filters for a real problem.

Google then industrialised the whiteboard, brainteasers and all, and everybody copied Google, because copying Google feels like a plan. Then in 2013 Laszlo Bock, who ran People Operations there, told the New York Times that brainteasers are “a complete waste of time” and that Google’s own data showed they predicted nothing. He said it out loud, on the record, at the company that invented the practice.

That was thirteen years ago. The practice is bigger now than it was then.

The 2015 moment everyone still quotes is Max Howell, who wrote Homebrew, which is on basically every Mac used for development on the planet, being rejected by Google:

“Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so f*** off.”

The standard reply is that one anecdote proves nothing, and fine, one anecdote proves nothing. But it stuck for eleven years because it names the shape of the failure exactly: the process discarded demonstrated, verifiable, load-bearing output in favour of a party trick.

What the research actually says

This is the part that annoys me most, because we aren’t short of evidence. We just ignore it.

The clearest study is Mahnaz Behroozi and colleagues, “Does Stress Impact Technical Interview Performance?”, published at ESEC/FSE 2020. They ran a controlled experiment: same problems, same candidates pool, but one group solved them on a whiteboard with an interviewer watching and narrating expectations, the other solved them privately on a whiteboard with no observer.

The private group performed roughly twice as well. Same people, same problems. The only variable was being watched.

The authors’ conclusion is worth reading slowly: the technical interview as commonly practised “may be filtering out qualified candidates by inducing stress” and functions closer to a test of performance under observation than a test of ability to program. They also found the effect wasn’t evenly distributed, which should worry anybody who signs a diversity statement and then runs a whiteboard loop.

The same group’s earlier work, “Hiring is Broken: What Do Developers Say About Technical Interviews?” (VL/HCC 2019), went through thousands of developer comments and found the recurring complaints were not “this is hard” but “this is irrelevant”, “this is disrespectful of my time”, and “this correlates with recent memorisation, not competence”.

And then there’s the boring, decades-old industrial psychology answer that our field acts like it has never heard of. Schmidt and Hunter’s 1998 meta-analysis in Psychological Bulletin, covering 85 years of selection research, found that the highest-validity single predictors of job performance are general mental ability tests and work sample tests, which means having somebody do a small version of the actual job. Not puzzles. Not trivia. The job.

We have known the answer since before most of us were writing code. We chose the puzzles because the puzzles scale, are easy to grade, and let the interviewer feel clever.

The skill mismatch, stated plainly

So what does a senior engineer actually do all day? The interview seems to have forgotten.

Reading code somebody else wrote, under deadline, with no author available. Working out why a thing that worked on Friday doesn’t work on Monday. Deciding which of four ugly options is the least ugly given a deadline nobody consulted you about. Saying no to a feature. Saying yes to a feature and then scoping it down until it fits. Reviewing a pull request without being a jerk about it. Writing the migration that moves 40 million rows without taking the site down. Explaining to a product manager why the estimate tripled. Naming things.

Now, the interview. Given an array of integers, return the indices of two numbers that add to a target, in optimal time, on a shared editor, in 25 minutes, while explaining your thought process out loud, with a stranger watching, in your second language, on a Thursday.

The overlap between those two lists is roughly: you type. That’s the overlap.

I’m not arguing that algorithms are useless. Knowing that a nested loop over a big list is going to hurt, knowing what a hash map costs, knowing when sorting first makes everything easier. That stuff pays for itself every week. But you can establish that in ten minutes of conversation about a system somebody actually built. You don’t need someone to have memorised the trick to the Trapping Rain Water problem. There’s a trick. There’s always a trick. And a candidate either has seen the trick before, in which case you have measured their study schedule, or has not, in which case you have measured how they behave while being watched failing. Those are the only two outcomes. Neither is the thing you claimed to be testing.

And now the good part: the machines are better at it

In 2026, this gets funny.

The single class of programming problem that current frontier models solve most reliably is the competitive-programming problem. It’s the perfect target: self-contained, unambiguously specified, deterministically checkable, and with tens of thousands of worked solutions in the training data. OpenAI reported o3 hitting a Codeforces rating around 2700, which is grandmaster territory and beyond nearly every human engineer alive. DeepMind’s AlphaCode work landed in the same neighbourhood years earlier.

So the industry has arrived at this position:

  • The hiring filter is a category of problem that a model solves instantly and perfectly.
  • The actual job is full of problems models are mediocre at: ambiguous requirements, undocumented legacy behaviour, tradeoffs with no correct answer, organisational context.
  • We’re filtering on the first category to hire people for the second.

The response to this hasn’t been “maybe rethink the filter”. The response has been an arms race in proctoring. Companies are pulling candidates back onsite specifically so they can’t use AI. Cisco and others said so publicly in 2025 and the trend has only accelerated. There’s now a genre of startup selling interview surveillance: eye tracking, second-camera-on-your-desk, keystroke analysis, “focus loss” detection. There’s a competing genre selling undetectable AI assistance during interviews. A Columbia student got famous in 2025 building exactly that and turned it into a funded company.

We’ve built an industry that sells cheating tools, an industry that sells cheating detection, and a hiring process whose only remaining function is to be the battleground between them. Nobody in that loop is producing software.

The obvious move is to stop testing the thing the machine does perfectly and start testing the thing it does not: judgement. Give me a real pull request from your codebase with two subtle problems in it and let me review it, AI open, I don’t care. Watching how somebody uses the tools they will actually have is more informative than pretending the tools don’t exist. But that requires interviewers to prepare materials and exercise judgement rather than grade against a rubric, and that’s expensive, so here we’re buying eye-tracking software instead.

The costs nobody puts on the balance sheet

It is a tax on time you do not have. Six months of evening practice is free if you are 23 with no dependants. It’s close to impossible if you have kids, a carer role, a chronic illness, or a job that already eats eleven hours a day. We built a filter that systematically favours people with the most spare time, then hold meetings about why our teams look homogeneous.

It expires. This is the detail that gives the game away. Grind for six months, get hired, work for two years, and you are back to square one, because none of it was retained, because none of it was used. A skill that evaporates the moment you stop drilling it was never a proxy for competence. It was a proxy for drilling recently.

It punishes the wrong people. The engineer who has spent four years going deep on one hairy production system is worse at LeetCode than the new grad who did it last term. On any measure that matters they’re the better hire.

It is enormously expensive. Five interviewers, five hours, plus scheduling, plus review. Call it a full engineer-week per candidate per loop at a mid-size company. Multiplied by candidates, multiplied by roles. All spent measuring a signal the field’s own research says is dominated by stress response.

And it makes people hate us. Not the rejection, people can handle rejection. The insult is the asymmetry: months of unpaid preparation on the candidate’s side, a lightly prepared interviewer who picked a problem off a shared doc ten minutes before the call, and a two-line rejection email six days later. The message received is that your time is worth nothing and mine is precious. People remember that. Some of them are the people you’ll want to hire in three years.

What the alternatives look like

I’m aware that “the interview is broken” is a cheap thing to say and that hiring is really hard. So here’s what works. All of it is in use somewhere today:

Paid short work sample. Four hours, paid at a fair rate, on a problem shaped like your actual product. Highest-validity option in the research, and paying for it fixes the asymmetry. The usual objection is candidate time, and it’s a fair one. That’s why it should replace the five-round loop, not sit on top of it.

Read code instead of writing it. Hand over a real PR with real problems in it. Reviewing is most of the job and almost nobody tests for it. It’s also very hard to fake, and very hard for a model to do well without the context only your team has.

Go deep on something they built. Forty-five minutes on a system the candidate actually shipped, pushed until you hit the edge of what they know. You find the boundary of real understanding fast, and it’s nearly impossible to bluff because you can always ask “why not the other way?” one more time.

Pair on a real bug. Your repo, a real failing test, two hours, you sit alongside rather than opposite. You get to see what working with them is like, which is the actual question.

Structured, consistent, boring. Same questions, same rubric, same order, scored independently before discussion. Google’s own re:Work material has said this for a decade. Structured interviews beat unstructured ones on validity by a wide margin, and unstructured “vibes” hiring is how bias walks in wearing a lanyard.

And if you really need algorithmic depth, because you’re writing a database engine or a compiler (sometimes the answer is yes), then test it, but test it honestly. Say so in the job description, tell candidates exactly what to expect, give them the problem space in advance, and let it be one round rather than four.

The list of companies that hire without whiteboard puzzles is public: poteto/hiring-without-whiteboards has thousands of entries and has been maintained for years. These companies exist, they ship software, they aren’t obviously worse at it. The claim that the LeetCode loop is load-bearing isn’t supported by the existence of everyone doing fine without it.

Why it survives anyway

If it doesn’t work, and we have known it doesn’t work since 2013, why is it still here?

Because it’s cheap to administer and feels objective. A rubric produces a number, a number produces a defensible decision, and a defensible decision protects the person who made it. Nobody gets blamed for rejecting a strong candidate. Everybody gets blamed for a bad hire. The whole system is optimised against false positives at absurd cost in false negatives, and the false negatives never show up in anybody’s metrics because they went and worked somewhere else.

Because of sunk cost, too. When you spent eight months grinding to get in, “this filter is meaningless” is an unpleasant thing to believe. The hazing logic is real and it’s human: the people who paid the entry fee tend to defend the toll booth.

And because when labour supply is loose, a process that’s bad at identifying talent but great at reducing volume looks like it’s working. It isn’t selecting. It’s rationing. Those look identical from the inside if you never measure who you rejected.

What I actually think

I don’t think algorithms are worthless, I don’t think interviews should be a chat about vibes, and I don’t think every candidate is secretly brilliant and misunderstood.

What I think is that we have a process whose difficulty is entirely uncorrelated with the difficulty of the job, that costs candidates months of unpaid labour, that the field’s own published research says is heavily confounded by stress, that the company that invented it disowned thirteen years ago, and that in 2026 filters precisely on the one skill that has been fully commoditised by a text box.

And we’re responding to that last part by buying eye-tracking software.

If you run hiring, you can change this by yourself, this quarter, without a mandate. Drop a round. Pay for the work sample. Replace one algorithm round with a code review of a real PR. Tell candidates exactly what is coming. Send the rejection in two days, not two weeks, with one real sentence in it.

If you’re on the candidate side of it: grind the problems, because the world is as it’s and rent is due. But don’t let anyone convince you it’s making you a better engineer. It’s a toll. Pay it, get through the gate, and then push, from the inside, to make the gate smaller for whoever comes next.

The good news is the whole thing is one meeting away from changing at any given company. Somebody just has to say out loud that the emperor has been on the whiteboard this entire time.


References

Research

The industry saying it out loud

The grind, documented

Alternatives

Made with ❤️ from Spain.