Skip to content(if available)orjump to list(if available)

Casey Muratori: I can always tell a good programmer in an interview

sgarland

One problem with this is that it presupposes that the interviewer is skilled enough to spot problems, ask the right probing questions, etc. Casey is definitely skilled enough. I can’t say that’s universal.

Another problem, which TFA hints at, is bias. System Design interviews are often terrible for this reason. If you present me with some scenario that I know is trivial to handle with a single server, I’m going to want to discuss that, but you are probably expecting me to talk about a message queue, a caching layer, etc. Both are valid depending on the situation, but if you’ve only ever known one type, you may dismiss others out of hand.

jvanderbot

If you're presented with a system that can be handled by one server and can discuss that architecture, but think they may want to hear about an AWS word salad, just say there's two approaches, discuss strengths and weaknesses for 2 minutes, and ask what they want to talk about. That is precisely the kind of thing people want from a co-worker.

weavie

Yes, a discussion of the tradeoffs of different solutions is exactly what I want to hear in an interview.

thelittlenag

I've now done probably close to 100 system design interviews. One of the main things I've looked for in candidates is their ability to identify, communicate, and discuss trade-offs. The next thing on my checklist is their ability to move forward, pick an option, and defend that option. Really nimble candidates will pivot, recognizing when to change approaches because requirements have changed.

The goal here is to see if the candidate understands the domain (generic distributed systems) well enough on their own. For more senior roles I look to make sure they can then communicate that understanding to a team, and then drive consensus around some approach.

AnimalMuppet

In the real world, the answer almost always is "it depends".

Eridrus

Maybe I am just bad at interviewing people, but I have tried giving the experiential interviews Casey describes, but I find it quite hard to get signal out of them.

You run into questions of how well a candidate remembers a project, which may not be perfect. You may end up drilling into a project that is trivial. The candidate may simply parrot things that someone else on the team came up with. And when candidates say things, you really have no way to understand if what they're saying is true, particularly when internal systems are involved.

I have found system design interviews specifically much much better at getting signal. I have picked a real problem we had and start people with a simplified architecture diagram of our actual system and ask them how they would solve it for us. I am explicitly not looking for people to over design it. I do give people the advice at the start of every skills interview tp treat this as a real work problem at my startup not a hypothetical exercise.

I have had a lot more luck identifying the boundaries of people's knowledge/abilities in this setting than when asking people about their projects.

And while everyone interviewing hates this fact, false positives are very expensive and can be particularly painful if the gap is "this person is not a terrible programmer, just more junior than we wanted" because now you have to either fire someone who would be fine in another role if you had the headcount for it or have a misshapen team.

MomsAVoxell

>It presupposes that the interviewer is skilled enough to spot problems, ask the right probing questions, etc.

Actually, this is a case of Peters principle[1], clear as day.

Recruiters should not recruit programmers if they, the recruiters, have not worked in a programming context. The best software development recruiter is another programmer.

It also extends, of course, to technical managers and is another factor in how one should approach recruitment interviews - is this placement going to result in a high Peter principle, and if so - is the candidate going to be capable of rising above it, or dealing with it in a way that is conducive to the organizations goals?

Because Peter principle is not always a 'negative' - its more of just a condition that results from a lack of communication between parties who really should know each others jobs, better.

People who know how to understand other peoples jobs as well as their own, work great together.

[1] - not Flynn effect

kube-system

Recruiters are fine at recruiting but they shouldn't be a substitute for a technical evaluator.

jonathrg

What is Flynn factor?

gedy

> Recruiters should not recruit programmers if they, the recruiters, have not worked in a programming context.

Ran into this the other day, a company reached out, and while I wasn't job hunting, the senior role they were trying to fill was basically exactly a perfect fit for me from a skills and background on a Venn diagram.

The first two calls were young, non-technical women (they shared linkedin links), and they clearly did not understand what they were hiring for and couldn't answer questions. They insisted on their scripted questions, and didn't want to talk about the companies where I did the exact role they were hiring for.

I was not rude or arrogant about this but the next day got the "Unfortunately, we've..." email. It's actual pretty funny, I'm just glad I didn't really need the job.

Companies, stop letting HR be your first contacts and screening before technical folks. It doesn't work. No wonder your pipelines are full of the fakers and liars like many of you lament.

msluyter

A third problem is that, depending on the project, one's recollection might be pretty fuzzy. A fourth is that, while you might be a great programmer, perhaps you've never had the opportunity to do the work of the design or greenfield development, meaning, you may not have a ton of insight into the design work that went into the project. E.g., perhaps you mostly do maintenance work on a large number of projects, so your overall knowledge of each is fairly shallow.

pton_xd

Recollection of specific implementation details of an old project may be fuzzy, but I'd hazard that any competent programmer should be able to discuss the themes and challenges of the project in depth, along with approaches for different requirements.

Overall shallow knowledge is not a positive signal, in my opinion. If they really are a firefighter who constantly jumps around, the interviewer should lean in to the organizational challenges they face when identifying and fixing problems across a variety of projects and domains. There's always a way to drill down with more specific questions.

pelagicAustral

I think this model fits a lot better to mid and small size businesses. FAANG et al will always need their leetcode barrier due to the sheer amount of interviews they have to conduct. I wouldnt think you can spare an engineer that can go through this type of interview on a daily basis, at that point the person will be solely conducting interviews and not coding at all.

bluGill

FAANG et al should focus on employee retention a little more so that they don't have to interview as many. If they keep people around for years not only do they have less interviews to do, but they also have incentive to care about quality. There should be no gain to individuals moving jobs every few years. There should be gain to the company keeping experienced people around.

callamdelaney

I agree with your latter point on system design. I've had 'big data' interviews where the 'big data' fits in the memory of my desktop machine - so I'm going to give you a very different answer to your over-architected hadoop cluster running over 20 1gb containers or something.

jvanderbot

You have to make this a back and forth, not a monologue. Nobody is going to criticize you for tailoring your response to what they want to talk about. Treat it more like a coworker you respect asking you about architecture options, not like a right/wrong graded quiz from college or a chance to assert your knowledge and experience. Your knowledge and experience will show anyway.

__alexs

I agree but it is not uncommon to find interview processes where a monologue is exactly what they expect and they are unable to have an actual conversation about the topic for whatever reason.

ch4s3

I once failed an interview because they asked how I’d solve a geospatial problem in Postgres and I said I’d use PostGIS and order by ST_Distance. The guy said “what’s postgis” and I knew it was over.

WesolyKubeczek

You failed, or was it them?

ch4s3

I believe we all failed as an industry that day. A friend of mine worked at the company and tried to get me to reapply a year later and promised they had scrapped the old interview process, but I just couldn’t.

renewiltord

Wait. What’s the “right” answer? The “in Postgres” naturally directs towards PostGIS.

ch4s3

They apparently wanted me to do some geometry, and know that the naive geometry doesn't account for the curve of the earth, and that there are indexing concerns. This was for a company that makes HR software and the interviewer who devised this exercise had never heard of PostGIS and sort of implied it was a real thing that people used.

kube-system

An unskilled interviewer won't do a good job using any technique.

jawns

I can probably go into great detail if we're talking about a project I worked on in the past 3-6 months. But beyond that, the details of past work start to become fuzzier. So if I encounter an interviewer like this, I'd better hope that my most recent project fits the bill, because I'd probably stumble through it for earlier projects.

iparaskev

I agree that is hard to remember every little detail for every project you have worked on, but I can definitely recollect how I approached the biggest problems on almost every project. Usually these are the ones worth talking about.

stronglikedan

That's nice and all, but you sound young (less than middle aged) if that's the case. Get 20-30 years of projects under your belt and try that, lol. Anyway, cherish it while you can, and have some empathy for those that no longer can, please and thanks!

walkabout

I would have to think a really long time to come up with an answer to “describe a hard problem you’ve solved” at all. I might have to consult notes. After that, to make it an interview-friendly narrative, I’d have to fill in a lot of details with plausible speculation because god knows I don’t actually remember (and I don’t really trust memory very much, anyway)

The joys of age plus extremely-poor autobiographical memory.

It doesn’t help that what I think of as actually hard, day to day, is shit like documentation from FAANG companies lying to me and wasting a whole fucking day of my time, terrible error messages, mismanagement of upstream projects, bureaucracy making a two-day task take four weeks, and, in some common ecosystems, awful design of core tools and major libraries, or horribly wasteful library churn. “Hard problems” are nothing next to bullshit problems.

AnimalMuppet

In my last interview, they asked me what the worst bug I ever had was. I had no trouble remembering, even though it was a decade ago.

The ordinary stuff I worked on last month? Don't bother asking any details; they're gone.

jb1991

That’s absolutely right, but there’s another issue with the LeetCode-style interview that hasn’t been getting much attention lately, including in this article. My company is hiring right now, and we’ve shifted all of our initial interviews to Zoom, where we include a brief coding task. However, it’s becoming more and more clear that many applicants are using LLMs to produce their code. It’s reached the point where it feels almost impossible to assess whether someone can actually code on their own in these remote settings. On the other hand, it’s much harder to lean on an LLM in a more open-ended, conversational interview without it feeling unnatural. That, I think, is one of the biggest flaws in the current remote coding interview setup.

iparaskev

This is good point. I thought of including this but decided against it at the last minute. I will update the article to briefly mention this, because I also think it is becoming a problem. Thanks for the suggestion.

aDyslecticCrow

We use a coding test that is more like a trivia puzzle quiz about cursed language syntax and bare metal embedded concepts. Bit squashing puzzles, casting structs to unions with byte byte alignments quirks.

On the surface its even more contrived than leetcode. But it has a few benefits;

1. Harder to memorise and prepare for.

2. Harder to ask LLMs.

3. Checks formal schooling or detailed interest in the topic.

learning C with toy projects wont make you perform in this quiz. Spending dedicated effort reading about the inner workings of malloc, RTOS, chipset datasheets, and electronics may.

Many of the questions check understanding beyond the syntax, often one level of abstraction down. For embedded this works nicely. The higher level system design thinking is not applicable to us. We look for people with the mindset and interest to debug the most absure behavior quirks of the hardware when the code misbehave.

But for other fields in think this would falls appart. This particular works for bare metal embedded.

(... i think our interview process may be selecting for ASD as a sideffect)

null

[deleted]

sodapopcan

I like this approach. The only problem (or at least one of the problems) is that many people do not have suitable personal projects, as in they might be 10 years old. If one of the goals is to filter out people that don't work on projects in their free time, then this works, but I know many good programmers who don't, or at least they don't anymore due to having kids and other responsibilities outside of work.

As this article touches on, I'm big into pair programming interviews. I was part of the pair programming step at a past company and we'd always use StringCalc [0]. It's starts out super easy and gets gently progressively harder. The goal isn't to finish but to just to see how people think. We would do pretty legit pairing where we'd help if they got stuck on anything or thought we had a better solution. This shows so much about how someone thinks, collaborates, and responds to feedback. Often within 10 mins I could tell how it was going to go. We always had to finish, though, just in case.

Of course it depends on what type of app you have and how your company works and so on and so forth.

[0] https://github.com/MokshankSoni/StringCalc_TDD

mring33621

1) If they are competent programmers.

2) Whether they will be productive at your company/project.

this is exactly what I do

also, if an interviewee doesn't know something that I think they should, I help them learn it

enough interviewers make the process unpleasant

I try to do the opposite

ttoinou

Some engineers do not have personal projects to show. Only work projects that can’t be shown.

And junior developers who have personal or university projects it’s sometimes too shallow for this check described in this article.

chasing0entropy

Negative. It is nearly impossible to build a broad skillet and critical thinking skills working exclusively on directed projects towards niche business goals.

Any skillset requires practice. Any invested programmer will code in their free time; -the newbie modifying css scripts, -the veteran coding utilities for repetitive tasks, -the pro writing a driver back end to bypass resolution or buffer limit - the webdev's customized dashboard and scriptlets

Programmers have at least ONE hobby project, open source contribution, or tasked project that is not scoped under an NDA. If they don't they certainly will not be productive and probably not creative.

Jcowell

Or they do enough programming from 9-5 that they don’t feel like doing anymore when they get home to their family? Programmers don’t have to do anything more then their paid to do

therealdrag0

Most coding I do in my spare time, I still do in the context of my jobs’ domain, just because there’s unlimited problems there to work on and I’m already up to speed.. plus not everything for an employer is “narrow business focus”.

kube-system

That entirely depends on why their projects are under NDA. Projects under NDA range from boring CRUD apps to the most sophisticated software running on other planets.

The best of the best engineers have plenty of work to keep themselves fully occupied, especially in the prime of their career.

Hobby projects are a positive indicator for people straight out of college, though.

UK-Al05

Programmers often work long hours, and they often have families and children. Expecting this is stupid.

worble

Even if that was true, as other comments have pointed out, also consider that maybe the stuff I do in my spare time is private and just for me or a small group of friends? It's not enterprise ready, and might even contain personal details I don't want others knowing.

My work and personal life are separate, and deliberately so.

bigstrat2003

That's nonsense. A good programmer needs to have learned things on his own time, but he need not have done a side project to do so. I don't have any personal projects or open source contributions I could show to a prospective employer, but I assure you that I'm productive (and creative enough to get by).

tombert

I keep many hobby projects going most of the time, but I try not to judge people who don’t. A lot of people have kids and want to focus their non-work time on their family, and I don’t want to tell people they’re wrong for doing that. There’s nothing wrong with a job being a job and not your life.

I don’t have kids (and can’t now thanks to a snip), so it’s relatively easy for me to find time to hack on something for fun, but it’s not wrong for a parent to want to, you know, be a parent.

williamdclt

That's just bullshit. Of the top 5 engineers I've worked with (and they were really good), 3 don't code in their free time. And most of the "good enough" engineers I know don't either.

We don't expect this from any other profession, do you expect civil engineers or architects to work on personal projects in their free time? If they don't would you challenge them that they don't have the skillset or the critical thinking? That's just ridiculous.

jaccola

There are three competing factors at play: minimising false hires, minimising false no-hire, salary.

Presumably I couldn't hire Casey for a team lead position paying £120k per year. Equally, I don't want to miss out on talent by trying to catch every edge case and making an interview process 3 weeks long.

I hired a very technically strong candidate once, he loved optimising games as a hobby. Unfortunately we were a SaaS startup and he seemed to be allergic to using prebuilt components (think SQS) because "we could build them more efficiently". It's impossible to catch every foible like this in an interview scenario.

For these reasons, ultimately there will be bad hires. The biggest mistake is leaders not being willing to fire people. Sometimes this is for fear of reducing head count, because it makes them feel like an arsehole or they aren't themselves capable/invested enough to care. It's painful but I've found it always better to fire fast.

JonChesterfield

> Chooses a project the candidate has worked on.

> Asks questions with the goal of having the candidate teach him about his project.

I really like this. Asking candidates about their PhD thesis has not gone as well as I hoped, there's usually an increasing level of panic as they realise I read it before the interview. Asking about patches they've written to open source has the same effect.

Asking about something I can't verify changes the stress profile on it a lot. Going to change to this strategy. Thank you HN :)

tasty_freeze

As a 60+ year old guy who has been at the same employer for the past 20 years, I thankfully evaded all that leetcode crap. My interview style has always been of the sort described -- ask in depth questions about something they have worked on.

The telltale sign of a padded resume is when the person acts like a cork -- you try to push down deeper and they always pop back up to surface level answers. Some give up the game quickly and admit that they were on the team that did the thing in question, despite their resume saying they did the thing. Other people are very practiced and unflappable and just bob back up over and over without shame.

For new engineers with say three years of experience or less, I can forgive the overstating their experience and I'll shift to asking them to describe their part of that project. But for the people with a few years on their resume, then that behavior is definitely a deal breaker.

Another line of questioning I take for people with experience are questions like: what are the tradeoffs of directed testing vs random testing? When do you have enough confidence in your testing that you say the product is ready to ship? What are some examples of where bugs made it out the door, and what was your process after that happened? What are some reasons why every part of a design might pass their unit tests, but the total design has failures?

These should be easy to discuss for anyone with experience, but there are a surprising number of people who fall flat. Similarly, I am shocked at how often I ask someone to write some code in any language they want to, even pseudocode, for a simple problem and are unable to do it. Eg, given a stream of numbers, maintain the largest two numbers seen so far.

phkahler

When doing technical interviewing I look for 3 things:

1) Can this person do stuff.

2) Can they learn stuff.

3) Are they interested in learning and doing the things we need them to.

The authors approach of going deep in one area is good for determining #1. You weed out all the people who "were on the team that..." or similar work-adjacent activities and find those that actually did the work / wrote the code / designed the thing / did the testing. Anyone with several years should have worked on more than one thing. Variety of things they actually did indicates an ability to learn which is #2 above. Finally you'll have to gauge how well they'll take to whatever it is you need them to work on, and that's a toss-up. This is where going to a big-name school can be useful since a big part of college is pushing through shit you don't care about for courses that aren't your thing. Otherwise a real interest in your project/product should be enough to motivate the learning and doing if they're capable.

The rest of the "team fit" stuff... You can figure out what they're like on the side while doing an hour long technical interview.

And that's my take on interviewing. I find it quite effective at finding good engineers.

RajT88

> If they can answer your questions, and their answers come from solid foundations

I am currently a cloud architect, but generally speaking when I've interviewed candidates, I prefer this approach.

If you can't answer detailed questions about something you've allegedly done, you're cooked. In real life, you're not going into a situation where you can't use reference information to help you remember all the details.

dirtbag__dad

> [Linear] mentioned that this approach is working very well for them, and they have achieved, at the time of writing, 96% retention.

Is this evidence that their hiring process is sound, and is it more a consequence of Linear being a rocketship? Perhaps if their retention number includes when a bad hire is let go, this is more believable that they are meeting their standards.

I’ve only worked at small startups, but usually “retention” means that no one has left for somewhere better.

iparaskev

This is a valid point. But I think there is merit on working for a few days with a potential hire in order to see how good of a fit they are to you and you to them. You reduce the chances of having a false positive hire.