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

85 pointsposted 5 hours ago
by iparaskev

140 Comments

sgarland

5 hours ago

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

5 hours ago

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

5 hours ago

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

thelittlenag

5 hours ago

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.

sgarland

an hour ago

> 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.

This is why I’m stuck at Senior lol. I can craft incredibly deep technical documents on why X is the preferred path, but when inevitably someone else counters with soft points like DX, I fall down. No, I don’t care that the optimal solution requires you to read documentation and understand it, instead of using whatever you’re used to. If you wanted to use that, why did you ask me to do a deep-dive into the problem?

AnimalMuppet

5 hours ago

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

hrimfaxi

4 hours ago

This only seems to be in software engineering. When I was told me wanted to evaluate a new task queue service, I asked what our constraints were. I was told to survey all options and present a roundup and ignore constraints. Contrast with something like, I don't know, building a house. Do architects consider all possible material choices for a given location, or do they instead limit their consideration to materials that would be suitable to the given environment?

Making the dependencies of "it depends" explicit is the whole point.

bluGill

4 hours ago

Having built single family houses before I can tell you that architects consider only the choices they know. That is why were I live there are 1000 stick framed houses for every one built with something like SIP (structural insulated panels), or ICE (insulated concrete block) even though the others are similar cost to build with overall and have some useful advantages for the customer that often would make them a better deal for the homeowner long term.

This also means there are 100 builders in my area who only build stick frame houses and won't even talk to you if you want something else and only 1 or 2 who will even think about those other options. (they do compete with the other builders so costs are not unreasonable)

user

2 hours ago

[deleted]

the_af

an hour ago

This tracks with my experience with architects (for home renovations): they use what they know, sometimes stubbornly so and even when I must point out it won't work out (e.g. materials inappropriate for the climate, inappropriate due to exposure to direct sunlight or water, obsession with visuals over practicality, etc).

I've dealt with enough architects by now to know this is the rule and not the exception.

Eridrus

4 hours ago

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

5 hours ago

>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

5 hours ago

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

the_af

an hour ago

In my experience, recruiters seldom recruit programmers, they just find them and do a screening, but there's a technical interview done by technical people.

Are there companies that skip the tech interview step?

xboxnolifes

21 minutes ago

The screening is part of the recruiting.

gedy

5 hours ago

> 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

5 hours ago

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

5 hours ago

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

5 hours ago

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

5 hours ago

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

5 hours ago

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

5 hours ago

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

5 hours ago

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.

jvanderbot

5 hours ago

Then it would especially behoove you to spend 2 minutes to figure out which monologue they want.

ch4s3

4 hours ago

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

4 hours ago

You failed, or was it them?

ch4s3

4 hours ago

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

2 hours ago

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

ch4s3

2 hours ago

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.

renewiltord

an hour ago

Why on earth say the Postgres part then? Bullet dodged.

Everyone in GIS knows all the geometry stuff, but also if you say "in Postgres" you're strongly implying PostGIS.

kube-system

4 hours ago

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

alyxya

5 hours ago

IMO the biggest limitation is that there's a lack of feedback in being a good interviewer. It's hard to get better at something you can't measure how well you did in any meaningful way.

Eridrus

4 hours ago

At my company, we do interviews remotely and record them and then sometimes review them and give feedback.

user

5 hours ago

[deleted]

dangus

5 hours ago

Maybe this is a dumb disqualifying example, but if you’re hiring someone who has worked for the government for the last 20 years on classified projects, this whole method has to be thrown out the window.

CoastalCoder

5 hours ago

I think it depends. A careful reading of the classification guides might let a candidate discuss a lot of technical details.

OTOH, I'd hate to be in a position where I had to think carefully about every aspect of that stuff during an interview. Even if nobody noticed an inadvertent classified spill, it could still suck.

SamInTheShell

3 hours ago

No. You may not even talk around the topics. This explicitly comes with the training. Anyone asks me about my last job, I don’t really state much more than what the job title was and what the job postings said for the role I applied to.

CoastalCoder

3 hours ago

I suspect your training went beyond what the law requires, but perhaps I'm mistaken.

bluGill

4 hours ago

I work with people who have worked on various classified projects in years past. Once in a while someone will mention something about the project they read in a newspaper and they have to say "It is obviously unclassified now but because I wasn't explicitly told that is was no longer classified I am not allowed to talk about it" - then they change the subject.

kridsdale3

5 hours ago

This applies equally to every employee at Apple.

ModernMech

3 hours ago

Yeah, I was once at an Apple interview and they couldn't tell me what I'd be working on if they hired me (I assume it was a mobile robot, as my background is in robotics motion planning). I politely left the interview after the third one tried to keep me in the dark and insist whatever it was it was world changing and bigger than iPhone. To me, job interviews are a two-way street, but they wanted to assess me while not allowing me to assess them, so I felt like they had wasted my time.

rvz

5 hours ago

> 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.

That is the entire point of the technical interview.

Someone who is already experienced in a particular subject is also at least qualified to ask the right questions to the candidate related to the subject.

epolanski

4 hours ago

The another problem is the same #1 problem.

faangguyindia

5 hours ago

why even interviews are necessary?

It all can be solved by a system where 1 company hires programmers then other companies can rent specific programer by hour and leave reviews.

This way a programmer doesn't need to interview, he's always employed and getting paid.

If they find no company to bid on your time, they can fire you after sometime.

nwalters512

4 hours ago

A lot of (most?) useful work requires the kind of domain-specific knowledge that can only be built up over a lot of time spent working on a given team/product/codebase. "Renting" programmers here and there on an hourly basis might work fine for basic tasks, but would probably end in frustration for both the employer, who has to deal with a constant stream of random new people, and programmers, who are constantly bouncing from project to project.

bluGill

4 hours ago

That depends. There are a lot of things a "by the hour" programmer can do when guided by domain experts. However a domain expert can only guide a couple such people and you lose their ability to get anything else done.

IAmBroom

38 minutes ago

We have that already. It's called "temp hires". Mostly it just screws the employees, while the middle man gets richer.

I can't think of a reason why a highly skilled individual would sign up for that.

walkabout

4 hours ago

The largest tech companies could also implement a shared cert program via some kind of industry group, with periodic re-certification requirements. This’d surely be far cheaper than all of them running multi-stage leetcode and system design interviews, and they already basically publish study guides so this isn’t even that different, just cheaper for both the businesses and candidates.

It’d also make job hopping far less painful (see above: cheaper for the candidates) which is why they don’t.

So we may conclude: the point of leetcode interviews is wage suppression.

ModernMech

3 hours ago

Never gonna happen, as they outsource this certification to universities already. They're not going to stand up their own cert programs to streamline the process; the muli-stage leetcode interviews are about hazing culture and making sure employees are servile, not merit culture and making sure employees are competent and qualified.

Like you said, tech companies need candidates to feel like they barely passed a grueling interview because it makes them wary to jump ship and have to go through that again, not that they are well qualified industry professionals who have the credentials to move between jobs and work anywhere they are certified.

kube-system

5 hours ago

You have reinvented software consulting. There are many criticism to that model as well.

creer

2 hours ago

Either somebody somewhere screens for competence, education, skill, talent, even bare willingness to do the work - or the project will suffer. Adding a level of indirection doesn't wolve that.

ttoinou

5 hours ago

   If they find no company to bid on your time, they can fire you after sometime.

In most of the world you can’t fire people like that

hansvm

4 hours ago

> rent programmers by the hour

That's much less efficient for big software projects. The knowledge built up over time is one of the core things making you effective, so you have a big productivity loss if you don't retain the same people for a long time. With a continual middleman, the overhead from that "hiring" process is usually proportional to work done, so after a period of time it will have been more efficient for the employer to hire directly (even at a cost of tens of thousands of dollars) rather than to go through the middleman.

> leaves reviews

We've seen how well that works in every other part of the market.... Interviews are necessary because of a lack of trust. In your system, every party has an incentive to lie, and the incentives are strong enough that it's worth paying people to facilitate your lies. You see that with various contractors all the time, having somebody with good reviews take the contract and somebody with fewer skills actually do the work, the employer understating the work to be done, etc. Good people exist, but they're hard to find in a low-trust environment.

> always employed and getting paid

Interestingly, that usually benefits everyone except the programmer. As a rule of thumb, the person taking risks will have higher returns, so if you can afford those risks you should choose to take them yourself. Examples include various forms of device "warranties" (if you're paying, it's insurance, not a warranty, and I can afford the financial hit when a thumb drive fails, so I'm not going to pay a premium to insure against that possibility), some forms of actual insurance (full coverage on used cars is an example -- if my car is ever totaled I'll just buy another -- I have liability insurance out the wazoo, but full coverage isn't worth it), etc. Programmers often make gobs of money, so except for potentially the very beginning of your career you should be able to easily weather a few years without work. The exact contract details vary, but that would suggest then that programmers are better off on average cutting out the middleman providing those risk guarantees (and they're not really guarantees in the first place, right? people are currently without jobs because there are fewer programming jobs than there used to be, and no middleman scheme is going to fix that; you have to wait for this economic blip to blow over).

I could go on. Contracting is fine, but it's not a replacement for all salaried work.

jawns

5 hours ago

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

5 hours ago

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

4 hours ago

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!

iparaskev

38 minutes ago

Yes you are certainly right that it will be much harder the more years of experience you have.

That said, I think that someone could remember a few things for past projects when preparing for an interview. Of course doing that on the spot might be very hard.

walkabout

4 hours ago

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.

anal_reactor

4 hours ago

My career isn't long, about five years, but so far I haven't encountered a technical problem that wouldn't be trivial. Like, "just follow whatever ChatGPT says" trivial. The real challenge are people problems - corporate work teaches you that the real tough shit is surviving being surrounded by idiots.

walkabout

3 hours ago

Not a lot comes to mind that really falls between “basically trivial” and “you’re gonna need to hire a team of PhDs” or “you have accidentally asked me to write a custom distributed file system, and you probably don’t want to pay for that”

Which is to say that usually the hard stuff is an accidental request that nobody actually wants to pay for, so the only thing “hard” about it is recognizing that the client/stakeholder has wandered into territory they really ought not.

AnimalMuppet

5 hours ago

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

5 hours ago

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

5 hours ago

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

4 hours ago

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)

user

4 hours ago

[deleted]

sodapopcan

5 hours ago

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

ttoinou

5 hours ago

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

5 hours ago

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

5 hours ago

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

UK-Al05

5 hours ago

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

therealdrag0

3 hours ago

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

4 hours ago

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.

tombert

4 hours ago

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.

worble

4 hours ago

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

5 hours ago

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).

williamdclt

5 hours ago

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.

devmor

4 hours ago

Perhaps at the age of 23, this would be broadly true. As the age range broadens, many more of us have families as well as other hobbies.

jaccola

5 hours ago

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.

mring33621

2 hours ago

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

JonChesterfield

5 hours ago

> 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

4 hours ago

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

5 hours ago

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

5 hours ago

> 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

5 hours ago

> [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

5 hours ago

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.

dirtbag__dad

6 minutes ago

Intuitively I agree with this too. I would love to see results from other companies as evidence it’s correct, is all

muzani

4 hours ago

It's hard to give people a copy of your code and see if they can navigate it. I find a reasonable middle ground is to create a template of the hardest bits of code. Get them to build something with it, hack it, and so on. See where they ask questions.

An algorithm takes hours to pick up. A language may take weeks. A paradigm takes months. If you use, say, functional programming everywhere, you should probably check that the applicant knows how to write functional. It's not about map(), it's about whether you code with globals and side effects. If it's reactive programming, does it properly observe and collect? If you're doing declarative UI, how do you abstract the pieces, where is the button click handled?

Some things are learnable, but this is where you see people get defensive. If you're moving in from a similar paradigm but different language, you'll find a way and you'll even contribute your own insights. I think people tend to butt heads here and it's a good headbutting simulator if you do some live coding with the team you're working with.

bluGill

5 hours ago

Most people should not be hired if he gets the needed detail. Most people don't have significant open source experience. That means for most people the projects are things they can talk about at a high level, but this interview is digging into things that any court would consider trade secrets. Even if you don't have a NDA, you still have a moral, ethical (and likely legal but check your local laws) obligation to not discuss the details of someone else's code in that level.

runjake

5 hours ago

For others who don’t know who Casey Muratori is:

https://caseymuratori.com/about

https://en.wikipedia.org/wiki/Casey_Muratori

He's also that guy in many of ThePrimeagen's YouTube videos.

And wow, that was a great rabbit hole to go down. Interesting guy.

xpe

4 hours ago

Embarrassingly, it took me a minute to realize Muratori is not Haruki Murakami, the Japanese novelist ("What I Talk About When I Talk About Running").

iSnow

5 hours ago

What about NDA's? I couldn't in good conscience drill down with someone from some other company into the projects I am currently working on.

epolanski

4 hours ago

Make it generic about acme corp without going into product/business details and don't reveal stuff that is sensitive to the business.

karmakaze

4 hours ago

This is exactly how I interview, and it is the most effective way I know to separate the best from the rest. To pass it the candidate must be able to recall in great detail a past project's problem, investigation, and solution. That's hard to fake from memory if you don't have direct involvement and understanding.

I'll also bounce around and go into depth on particular technologies or protocols, etc which may be relevant as well as other projects' problems and solutions. I also sprinkle in my current interests whatever they may be and have them make assessments, not to see if they agree but to see how they go about analyzing and weighing different factors.

Cthulhu_

5 hours ago

Leetcode tests programming; interviewing about previous projects tests software engineering, or at the very least the person's understanding of it.

My problem with that is that when I get interviewed about a project, I will talk about the whole project, not just my personal contributions to it which I believe is the primary purpose of a job interview. Of course, knowing about the whole of the project is important too, but if I just have an overview and little to no contributions, I wouldn't be a valuable asset to the company I'm interviewing at.

(Not to dismiss my own contributions of course, I'm a competent engineer and can do anything - it's more a matter of what I'm enthusiastic and energised about. I wouldn't be energised by clicking around in the AWS console, but I know of it, for example).

padjo

5 hours ago

I dunno who Casey Muratori is but I’ve followed the same principle for years! It’s a much better experience for the candidate and gives better signal provided the questioner can actually conduct a good interview and ask probing questions.

protonbob

5 hours ago

> Try to get as narrow as possible, even to implementation details.

I think this is a great way to tell if someone knows their craft but it could also select for people with 1) really good memory 2) really good bs. I have made lots of technical decisions that I stand by but I have a hard time remembering what I made for breakfast. I kind of have to have the code in front of me to remember those kinds of details.

epolanski

4 hours ago

If you've made technical decisions that carry some decision making that isn't obvious by reading the code for a small amount of time, that deserved a comment probably.

IshKebab

5 hours ago

Yeah definitely. I have terrible memory and would probably do badly at this even though I'm a very competent programmer (and modest!). And similarly I have interviewed some people who could talk the talk but literally couldn't write a for loop.

I think we also need to shift our vocabulary around "leetcode interviews" because there are two very different things that that word is used for, and I think one is fine and the other is not, but because we use the same word for both people end up talking past each other. Basically there is:

1. Fizzbuzz-level (and a little bit higher) programming problems where there's no real puzzle solving, it's just checking that you can literally code at all.

2. Hard puzzle-style algorithmic leetcode questions. The stuff on leetcode.com. For some reason like 80% of this is dynamic programming questions.

I think fizzbuzz level questions are fine and necessary (yeah I wouldn't have believed it either but there's no way I'm hiring someone who can't write a simple for loop).

At the other end hard leetcode questions are not very good - they are often so hard (in an interview context) that they just select for people who have seen them before (e.g. if you grind the top 100 leetcode.com questions), or have had a lot of recent practice (especially of dynamic programming, which is crazy because I've never used dynamic programming once in my life despite doing a very algorithm-heavy job for a few years).

Even worse they often are selected because the interviewer read the solution, thought "ah yes that solution looks easy" and then it makes them feel good about knowing the solution - they don't even realise how hard it actually is.

So, hard leet-code questions should be avoided, but that doesn't mean you should have no whiteboard coding questions.

tombert

5 hours ago

This is part of the reason that I try and keep at least one personal project going at all times. I want to be able to competently speak about something technical that I am working on so so that when an interviewer asks about it I have it fresh in my mind the “gotchas” that came up when working on it.

alganet

27 minutes ago

> Whether they will be productive at your company/project.

That got a highlight in the article, but not a lot of text to explain it.

> they have to fix a bug in an unknown codebase

Creating those scenarios costs a lot of time and resources.

---

I think the LeetCode stuff is just fine. There are some issues with it:

- People can cheat by being LeetCoders that specialize on solving LeetCode, not being actual day-to-day programmers. - You might end up with a monoculture team.

Overall, though, it seems to be the safest approach.

stronglikedan

4 hours ago

> To play devil's advocate: difficult coding questions are a way to minimize false positives

Apparently, Fizz-Buzz is still a "difficult" coding question, considering the number of candidates that still squirm at the prospect of answering it.

bluGill

3 hours ago

Fizz-buzz is a difficult problem. There are a few different ways to solve the problem and every single one has some uglyness about it that should make a qualified programmer squirm and hate their answer. It is simple enough that any qualified programmer can discover one of the possible solutions on their own and get it working in less than an hour, but then they will likely go back and research because it seems like there should be a better solution (there isn't, there are different ones with different pros and cons)

doix

3 hours ago

> Fizz-buzz is a difficult problem. There are a few different ways to solve the problem and every single one has some uglyness about it that should make a qualified programmer squirm and hate their answer

What are you talking about? The question is basically just a gotcha to catch out folks that don't know about the modulo operator. Or is this satire and I completely missed the joke?

bluGill

3 hours ago

Implementations details of fizzbuzz are ugly. There are a couple different ways to implement it (not all use the modulo operator!), but not matter how you implement it there is a special case that doesn't elegantly fit your algorithm and in turn your code is ugly in ways it seems like a better design could fix.

That you cannot find a an elegant solution to what seems like it should have one is what makes it difficult. A good sign of a good programmer is then you ask them about their code after it works they will say they don't like this solution and would like to spend time making it cleaner. If you know there isn't an elegant solution of course you won't bother spending that time, but if you don't know that if seems like there should be a better answer if you can just restructure the code a little.

user

an hour ago

[deleted]

wood_spirit

4 hours ago

Yeah it’s just to filter out those who are hopeless, which is far too many.

sd9

5 hours ago

I wish the HN title was "How to effectively conduct programming interviews", like it is in the article.

I find Casey Muratori completely insufferable and this title riled me up, but the content is actually pretty good. My perception of him is that he is a good engineer, but generally overconfident and unwilling to approach other peoples' viewpoints with an open mind. The current title played right into my biases.

(At the time of writing, the HN title is "Casey Muratori: I can always tell a good programmer in an interview")

xpe

5 hours ago

Any sensible person should probably be riled up -- or at least dissatified -- when an article contains this:

> With this approach, he claims he can always understand if someone is a competent programmer, and he has never seen it fail.

In this kind of situation, never seeing something fail is not a good sign. Evaluation metrics are noisy. One has to accept reality: no process is perfect. Better to admit it and actively seek out failures.

Statistical evaluations matter. Getting some objective distance matters.

> The first principle is that you must not fool yourself and you are the easiest person to fool. - Richard Feynman

https://www.brainyquote.com/quotes/richard_p_feynman_137642

eska

5 hours ago

When he introduces himself to a new audience on podcasts his standard intro is that he is not a performance guy, and he refers to his past colleagues who he learned a lot from as being on a higher tier than him.

He preaches reasonable performance instead of completely shitting the bed or optimization to the maximum (although he also teaches that).

Look at the JetBeans Java challenge on YouTube where he coaches a (imo below average) programmer. He is very kind. So your assessment just seems unfair to me.

sd9

5 hours ago

Yeah, maybe I’m wrong. I don’t know him and I’ve never interacted with him personally. That’s just the vibe that I’ve got after seeing various pieces of his stuff over the years. Just trying to describe how the title made me feel personally.

lawn

5 hours ago

> With this approach, he claims he can always understand if someone is a competent programmer, and he has never seen it fail.

I'm curious, how can he be so sure? How does he know that he has never failed a competent programmer or that he has never passed a poor programmer?

Just because he hasn't seen it fail, it doesn't mean his process hasn't failed.

plasticchris

5 hours ago

I’ve seen it fail, having tried it for a few years. There’s a type that passes this no problem but isn’t productive.

I switched to a battery of knowledge questions centered on the type of programmer I was looking for, it works much better and is even predictive of coding ability as it helps you learn this stuff.

epolanski

4 hours ago

There's not much ways you can spot a skilled but unproductive BSer from interviews.

indy

5 hours ago

False positives are easy to spot if you have to work with them.

False negatives are harder, but in small, close knit industries you sometimes hear of a person you rejected doing well

mattbettinson

5 hours ago

I feel like I am bad at these kinds of interviews. Maybe I just haven’t built big enough systems yet (fairly new to the senior role)

epolanski

4 hours ago

I have spoken with candidates about their small IDE extensions and it can get incredibly deep.

You don't need a large amount of code, when you're crossing the few hundres/thousands then you're already in the territory where the software developer has trade offs to make.

betimsl

5 hours ago

More important that if it is a good programmer or not, is to be able to spot if the guy can get the job DONE.

9rx

4 hours ago

For better or worse, in the business world (where you'd be conducting interviews), software is only done when you run out of money. A developer getting the job done may not be the most attractive quality.

epolanski

4 hours ago

I don't see any way to do so.

A skilled BSer can do well in interviews and survive for years.

whobre

5 hours ago

That was not the title of the article

bluGill

5 hours ago

Interviews have been research extensively. Yet every article I've seen gives me the strong impression that nobody is even aware it exists, much less has tried to look for it (or even better yet found it!). Everyone is "this is what I think works", but nobody gives me any reason to think their system works - they haven't verified it in anyway and so it might just be luck that they have hired good people.

Most people are reasonably good, so luck doesn't seem that unlikely - someone should draw resumes at random from their pile and make an offer to whoever wins - I'm curious how selecting for people who are lucky (or who God approves of if you want to go there) compares to your process. If you cannot show me data on why your process is better than that (or something else) I have to assume you don't really know.

PLEASE, when someone talks about how to interview can they at least put forth the effort to cite real research. If you cite someone else you can tell me you think it is invalid for whatever reason, but at least show me you care enough to read it before you tell me what I should do.

Personally I don't think this topic exciting enough to dig into (scientific papers tend to be hard to read, I want "an executive summary"). But when I interview someone I limit myself to the questions my HR department tells me to ask because they are scientifically validated to be useful.

matteotom

5 hours ago

I ask this out of genuine curiosity and not to try to start an argument: could you help point us towards this research? This point frequently comes up when discussing interviews, but I've never seen references to specific research and I don't know where to even start looking.

bluGill

4 hours ago

I don't know - my HR department tells me our process is research backed, but not how to verify their claim. I doubt they are lying. However I honestly don't know how to search academic literature to find it. I suppose I should ask HR someday, or you could ask your HR rep.

matteotom

4 hours ago

My previous employer was about 1k engineers and elements of the interview process were research-backed, but it was mostly procedural (order of rounds, length of interviews, etc) and based on internal data. But I now work at a startup where we make a best effort based on everyone's previous experiences.

harshaw

5 hours ago

i'll bite. Please give me an example of questions that are scientifically validated.

bluGill

4 hours ago

"Tell me about a time when you had to work with a difficult team member"

Note that the above is the type of question my HR department tells me is scientifically validated. I have not read the research myself, nor do I know how to find it. As such if someone responds "that isn't" they might be right, you will have to judge their expertise themselves: I'm not qualified to know if they are right.

thelittlenag

5 hours ago

I've really liked interviews where I either present a personal project I've worked on, or get to interview someone about their own personal projects. It's just more fun.

Their major complaint of the project approach is not getting signal on adaptability to new codebases. That has never been a first concern at any company I've worked at, and frankly if engineers are touching a new codebase every month then I'm getting a bit worried.

gwbas1c

5 hours ago

> 1. If they are competent programmers. 2. Whether they will be productive at your company/project.

> His opinion is that the second question is much harder to answer, and he doesn't know how to reliably do it, and whether there is a way to answer it.

In my experience, I look for signs that someone is a child trapped in an adult's body. (With a lot of leeway for younger candidates.)

IE, what I'm looking for is someone who isn't going to pick silly arguments, get into pissing matches in code reviews, or argue with facts of the requirements.

---

Years ago I used to use an interview question based around the differences of XML libraries built into .Net. The point was for the candidate to demonstrate that they understood tradeoffs; but one candidate suddenly took the tone of a teenager and yelled, "I don't want to work with XML, I want to work with JSON."

They clearly failed #2. It wasn't because they didn't like XML, it was because they rejected the point of the question.

Bengalilol

5 hours ago

> "Another benefit of LeetCode style interviews is that they are somehow standardized. Standardized processes help large organizations stay consistent."

I may be overlooking some really important concepts here, but there I bug. It looks like the need is not for a "good programmer" (the article should define what is a good programmer btw) but for a programmer who applies to the standards for whatever it means. It is a bit chilling. And afaik those leetcode interviews tend to fade away.

> "How they navigate unknown codebases." That point seems very short-term sighted. For how long a codebase is considered as being "unknown" ?

Globally, "good" is not defined and the "scope" of the programmer's job isn't even touched, which I think changes the way you hire someone.

Anways, it was a nice read although I don't really know what to conclude. The pair programming concept is, for sure, the best I would like to experience in an interview.

kasey_junk

4 hours ago

If you ever spend much time trying to _build_ a competent hiring pipeline (and every dev should it’s an eye opening experience) you come to realize that it’s very hard to evaluate the process itself.

For instance I found, the same questions, from a script, asked by different evaluators would regularly perform differently. But getting statistical relevance is hard!

So that’s the allure of leetcode. You can get a large population with standardization, relatively cheaply. That it’s actually a bad eval method gets lost in the wash which is unfortunate but I certainly understand it.

Conversely, “talk about your project” was a completely useless eval when I tried to use it. Good candidates failed, bad candidates passed, evaluators had all manner of biases to the point I started being suspicious that _time of day_ mattered more than the answer.

I’d 100% buy that an individual can accurately judge candidates with this approach, but I’d want heavy evidence if you claimed you could scale it.

specialist

2 hours ago

The OC and the submission's title both bury the lede:

Some company named Linear conducts paid work trials with candidates.

https://linear.app/now/why-and-how-we-do-work-trials-at-line...

--

FWIW, I've always done as Muratori advises.

But I accept any kind of prior writing, in lieu of code. (I've interviewed for DBA, QA/Test, tech writing, etc. I believe, but cannot prove, that anyone who can write an essay can also code.)

Also, when possible, I let teams choose their own members, from the qualified candidates in the funnel. Per advice of Luke Hohmann and others. IIRC Facebook does this too.

But The Correct Answer™ is some kind of (paid) probationary period, with no fault divorce. Long enough to validate skills, get past the "honeymoon" period, and verify team fit.

Alas, that requires change in labor laws, universal health care, (very) cheap day care, and other misc reasonable social safety net infra.

josefritzishere

5 hours ago

Getting overconfident as an interviewer is exactly how you get conned. Everyone makes bad hires sometimes. No process is fool-proof, only fool-resistant.

herpdyderp

5 hours ago

Honestly I don't really care about a candidate's previous projects. It's fun to talk about if we have the time for sure, especially if it's immediately relevant to the role.

I want to get a glimpse into how the candidate is going to handle our tech stack, our code base, not one of their old code bases.

I still think this is very possible to learn without LeetCode (which I also disdain and never use).

the_af

5 hours ago

They claim a way to interview is pair programming to solve a bug in a codebase unknown to the interviewee. They also claim to allow AI.

I get what they are aiming for, but I foresee trouble:

For one, this kind of interview is way harder to set up than simply asking the candidate to solve an algorithmic question (which is flawed but way simpler).

Also, it can be hard to fine tune so that it's not unfair to the candidate. Some bugs can only be solved after days of looking at the problem, so you have to iterate over this interview setup to find the right difficulty, unfairly ditching candidates in the process. And it becomes "a project"; a lot of companies cannot afford to spend much time on this.

Finally, if you're pairing how do you refrain from helping too much? You're not the one being interviewed, the candidate is! If you allow AI, how do you tweak the problem so that it's both self-contained and reasonably easy, while keeping it impervious to being one-shot by AI?

Of course, traditional interview techniques share some of these problems, but they are way easier to set up. That's what missing here, there's a cost/benefit analysis for interviewers too.

rvz

5 hours ago

>...instead, he follows a drill-down approach where he chooses a project the candidate has worked on, asks questions with the goal of having the candidate teach him about his project.

This approach is similar to what I have always said with open source contributions to credible projects since these days, Leetcode puzzles can be solved with AI tools.

[0] https://news.ycombinator.com/item?id=45530672