Call me crazy but I always focus more on the individual and asking them personal questions more than delving into silly leetcode they learned for the sake of gaming a system and will soon forget.
My company works with a bunch of not so mainstream APIs so if I just waited for experts in everything we work on, I’d wait forever. I’d rather hire good, smart, people and then fill in the gaps in their knowledge. Smart, hardworking dedicated employees are much harder to find than leetcoders. And they learn really quickly with a lot less attitude and grandiose opinions of themselves.
Leetcode measures nothing but your most basic understanding of a languages syntax, and your ability to memorize leetcode questions and common interview algorithms.
The only people to ever write a merge sort are either in/preparing for an interview, and John von Neumann.
If someone can fizzbuzz with a for loop, recursion, and a list comprehension, they probably know enough of that language to do your junior/mid-level job. If they get a problem they don't know, throw their hands in the air, slam their desk, and start crying, you may not want to work with them.
That should be the goal of interviews. Not flexing obscure language details or academics. You need to see if you can tolerate/enjoy working with this person, and how they handle a problem they don't understand. More time on the job is spent trying to figure out why this API isn't working, and discussing solutions, than writing sorting algorithms
It measures the most important thing, which is the ability of people to actually write coherent code, a skill which is lacking among many devs. and which is the most important artifact (of many) of an Eng.
...
"Most of the time in the interview, though, should be spent letting the candidate prove that they can write code."
- Joel Spoolsky, the Guerrilla Guide to Interviewing
...
" If they get a problem they don't know, "
Well they should be leeting on something at least a tiny bit novel in the first place, not over the top algorithms, but something that requires a bit of thought. No trick questions needed, just something a bit open ended.
If Leetcode is solely measuring the lowest bar, what does that say about the people the company is looking to hire?
I guarantee an engineer sitting down with a candidate for just 15 mins will gather way more impactful, insightful, accurate hiring information than any hours-long Leetcode obstacle course ever has or ever could.
Unless that engineer gets them to write some code in that 15 minutes, you're fundamentally wrong.
An hours long leetcode assessment is not the answer, but you need the candidate to have provide proof that they can actually code, and "having a chat about it" doesn't prove it.
You need them to write some code AND have a chat about stuff.
I'm yet to meet anyone that can talk at a high technical level for 45 minutes about any subject, without actually knowing something about that subject.
I couldn't bluff my way through an interview with a senior C sharp developer, and if I'm interviewing a Go or Typescript dev I can tell within about 2 minutes if they actually know the language, and within about 10 how well they know it.
I'm not sure what else the practical code test tells me, apart from how much spare time they have.
"yet to meet anyone that can talk at a high technical level for 45 minutes about any subject, without actually knowing something about that subject."
You're not getting the point.
There are plenty of people with years of developer experience who can talk about things for 45 minutes, quite thoughtfully - and are still terrible developers.
Talking about music is not making music.
Nobody has the ability to judge the quality of a developer after only 10 minutes of talking to them about Typescript.
Knowing some arcane things about Typescript is not a measure of problem solving or coding ability.
"I'm not sure what else the practical code test tells me, "
It tells you something more important than how much they've read up about Typescript.
Typescript is simple / accessible enough, that I wouldn't even care if someone was familiar with it. I wouldn't even make it a requirement for the job even it was a TS focused job.
I would take a 'great all around dev.' any day over someone I knew to be very knowledgeable about TS but otherwise big question marks about their development ability.
Of course, the same holds true for memorizing algorithms - it's a nice signal that someone can do some fancy B-Tree stuff off the top of their head, but not really what you are looking for so interviews shouldn't be focused on that.
Typescript and most of it's best practices (most of the odd corners of TS are not important), can be taught very quickly to any decent dev.
> I would take a 'great all around dev.' any day over someone I knew to be very knowledgeable about TS
Well that's what I don't think you get much in a tech test.
Not many tech tests probe your ability to understand business requirements, nail the acceptance criteria, work with others to develop test cases, or even demonstrate ability to integrate with other services.
Those sorts of skills are what set experienced devs apart from bootcamp graduates IMO. And those sort of skills are easier to talk about than to demonstrate in a single time limited test.
What do you think of Google’s process then, where interview questions are constantly refreshed and removed if they’re found to be leaked? I think the weakest form of these style of interviews (boring CRUD companies asking how to find a loop in a linked list) are used to argue against all algorithmic interviews.
Google's interview process lends itself to finding people who really want to work at Google. Nobody would go through that process to work for a small unknown company, even for the same total compensation.
> The only people to ever write a merge sort are either in/preparing for an interview, and John von Neumann.
Do you mean "for the first time and without errors"? I assume that most people should be able to give an overview of how a merge-sort works, and a pseudocode implementation.
> Do you mean "for the first time and without errors"? I assume that most people should be able to give an overview of how a merge-sort works, and a pseudocode implementation.
That’s fine if it’s relevant to the role. But my understanding is that a lot of those interviews, especially at the higher companies require you to get it right, quickly, without issue, under interview pressure. And if you don’t you probably won’t make it past that stage. Also don’t bother trying that stuff for typical CRUD roles at corps that won’t ever require anything those sort of skills, and yes that’s likely. I’ve been in environments where even if strong CS fundamentals could improve the product they won’t let you because it’s not a priority.
I wouldn't call it "trivia" but "fundamental knowledge". If the person you're interviewing went through college it should be easy. If they didn't, they probably read about it somewhere (or should have) and can describe it to you.
It's not as much a question to me of whether they've ever seen it, wrote it, or studied it, it's whether they know off the top of their head even which one it is or what the implementation looks like.
> I wouldn't call it "trivia" but "fundamental knowledge".
Something that will never be needed in a career can hardly be called "fundamental knowledge".
I don't remember anything about how merge sort works. If someone wanted to interview me on that, they'd convince themselves I can't code, despite decades of delivering production code.
> If the person you're interviewing went through college it should be easy.
I did study CS in university. A very top CS school, even (CMU). Probably I must've studied merge sort at some point, but the last algorithms class I took at CMU was almost 30 years ago. Not once have I needed that info since then, so it's long long forgotten. Its relevance to a software engineering career is nil.
>> Leetcode measures nothing but your most basic understanding of a languages syntax, and your ability to memorize leetcode questions and common interview algorithms.
90 something percent of people on earth will never be able to do any of that.
Yeah. So 90 plus percent of people aren't going to be able to do anything like that. Hell 90% of the people who call them selves programmers can't code.
> If someone can fizzbuzz with a for loop, recursion, and a list comprehension, they probably know enough of that language to do your junior/mid-level job. If they get a problem they don't know, throw their hands in the air, slam their desk, and start crying, you may not want to work with them.
That's setting the bar pretty low.
If the candidate is from a serious institution he should be able to manipulate more complex data structures.
I want to talk about code just enough to know you can talk about it. Then, I"m trying to find out if you're curious, knowledge seeking, and refining your craft. I expect everyone I hire to get better over time and on long timespans measured in multiple years these other skills win out over point in time knowledge. Unfortunately, really identifying curiosity and growth mindsets is also hard.
We are always more interested in their problem solving skills. We give them a very basic exercise like here is a drop down. As you can see, the items in the drop down are not in alphabetical order. We want you to change this at the sql level. How would you figure out how to trace back to the sql query that drives this drop down? It’s amazing how many supposed web developers won’t open the developer tools without our prompting them. And then, when they get in there it is obvious they have little familiarity with the developer tools. How exactly do people do web development without using the developer tools? I’ve been doing this for 23+ years and I can remember what it was like in the bad old days before firebug was created. Why would anyone want to continue to work in that past? Anyway, off tangent, it is interesting how even a very simple exercise, with lots of hand holding, can show a lot about people’s abilities to think through a problem logically.
The whole leetcode thing is atrocious. People practicing months to leetcode instead of working on actual projects. People who do actual work will fail the interviews.
Yes, I am interviewing, but I'm offering a real world problem to solve for candidates, not an exercise picked from Leetcode. I actually enjoy Leetcoding type problems, so I'd love to grind those, so I as a candidate don't have problems with those - although still I'd rather be building stuff.
The real world problem most of the time resembles understanding instructions, navigating in an existing codebase, implementing some feature. This gives really good insight into how much they've built, how much they know or how much potential they have - for example if they are unfamiliar with some things, they are always allowed to Google and if they do it efficiently, that's very telling about their potential.
With Leetcode you won't know whether the person has actual skill or experience to build something or they just practiced Leetcoding for 6 months straight.
Yeah I can’t tell whether I should put my limited energy leetcoding or working on contrived side projects in tech that’s not even a good fit just so I can put it on my resume to get past the screen.
The biggest hires, like Microsoft, Amazon, etc - are fine with this. The core of the problem is companies become Uber corportizized, entirely separating employment from the work being done. Where HR are filtering resumes based on criteria they learned in university that applies to traditional jobs like accounting. Big corporate works despite inefficiency, due to economy of scale and control. Therefore they will wait and wait, and if they can't find a "senior full stack programmer 20 years in rust", then no matter - they'll just up the work on current devs and ultimately let the project fail because they can.
Good for them, but not all of us have billions and can wait for years for the perfect candidate while also constantly complaining about the lack of skilled developers. Some of us just train our own instead and get on with our lives.
Delving into the individual is complicated because it brings up enormous amounts of pop psychology. We're not as good as evaluating people as we think. It's nary impossible to tell how competent someone is in a discussion, really what we can see is their communications skills, presentation, confidence, and maybe EQ/general intelligence and hints of subject matter knowledge.
Leetcode, far from silly, is far more likely to get an idea of whether or not they can do the job ahead of them.
Joel Spoolsky speaks to this directly: get people to code.
In my younger years, I noticed that there was zero correlation between the quality of code of all of my mentors/seniors and their work ethic, composure, communication skills etc..
Great, thoughtful organized thinkers who could barely code. Great leaders with lazy schleppy code. Obnoxious weird guys obsessive over absolute perfection (to greater or lesser extent).
Leetcoding on completely irrelevant or arcane things is a waste of time, but given a very straight forward, general problem which 'homework' wouldn't have helped with - works well.
A big misunderstanding about leeting is people think that the problem being solved is 'test worthy', like an exam - and really it shouldn't at all.
The other issue relates to people's ability to slog through documentation and find solutions to tricky problems because that's what we do 1/2 the time but is harder to test.
Someone who can take basic requirements, understand them, communicate the tradeoffs, and write something approaching 'clean code' after a couple of iterations - that's worth gold. It also requires kind of a 'rounded experience' with a bunch of tech so that they have at least a bit of intuition for it.
I honestly feel the best devs are not the one's extohlling some kind of genius, or deep knowledge, but rather more of an 'extreme common sense' where they can absorb all of the fuzz of a situation and produce something simple and coherent.
I feel the 'personal' issues relevant will also come out well enough during some basic leeting, though obviously that part of the interviewing has to be done.
I absolutely disagree with this. Engineers are perfectly capable of walking through a problem with a candidate and almost immediately measuring their ability in how they approach it. In fact, I would argue that engineers are the most qualified to assess a candidates engineering ability.
If the contention is that Leetcode measures the bare minimum, the lowest bar, the 100-course material, then what does that say about the people who are being hired? An interview should be far more nuanced and compassionate than that.
Well you're disagreeing with the best practices of the industry.
Spolksy articulates it well here [1]
"Engineers are perfectly capable of walking through a problem with a candidate and almost immediately measuring their ability in how they approach it"
Software is not Engineering in the classical sense, and almost zero software is Engineering, and almost zero developers have a formal Engineering background.
The material reality of Software is understanding problems spaces and producing coherent solutions, sometimes at different scale, sometimes using different bits of tech, but a degree of coding ability is definitely a necessary aspect.
So if we adjust your statement: 'Only a developer can judge a developer' - of course - that's the point of leeting.
In what scenario would 'talking' in abstractions about something be more useful than 'actually doing it'?
Coding is a huge part of the job. Of course, it's not everything, and some devs. may have really strong skills and yet a narrow view of things, but that's actually easier to change.
Getting along is important as well, so that's why we have an interview ... but there's no avoiding leeting/close whiteboarding.
Recently changed jobs in tech, high demand skillset.
I sent out exactly one copy of my resume to a company that I thought might be interesting to work for. Otherwise I just responded to LinkedIn recruiter requests.
In the time it took that one company to get back to me at all, I had landed a job and was on week 2 of 3 weeks notice.
At my last job I applied via Work at a Startup and.... Never heard back. I went to work for another company and when I was done there the CEO posted on bookface for me. A high up employee at the startup I applied to saw the post and forwarded me to the recruiter. I got a blind call (the person doing recruiting was so out of touch with how devs like contact) and he was amazed I knew a bunch about the company. I then explained I applied a year ago!
My resume at the time wasn't as impressive but I was obviously more than qualified for the role and they were unable to fill the role for a year.
It’s all referral or brand name (Stanford, mit, FAANG). If you didn’t go to a famous school make friends with someone who works where you want to be and get a referral through them.
I, or somebody else on our team, look at every single CV/resume that comes in, regardless of whether or not the HR team have looked at them.
We also aim to respond to every single applicant (i.e., beyond the initial automated acknowledgement), even if it's a straight no thanks. Every now and again somebody will slip through the net, but that's a mistake rather than the norm.
Lots of companies don't do either of those things. In their defense they probably get a lot more applicants for their roles, which makes it harder to keep on top of. Still, with half-decent modern ATSs it's generally pretty easy to quickly review and either reject or progress applicants, so it is infuriating if you apply for a job and just hear... nothing.
Another thing we do that a lot of companies don't is give feedback for applicants we've interviewed who haven't been successful. You know, sometimes it's the case that someone was decent and there wasn't anything specifically wrong, it's just that we spoke to someone else with more experience, or more relevant experience, so they didn't get the job, but we do try to give (hopefully) helpful feedback to rejected applicants as often as we can.
Occasionally that bites us in the ass because somebody will argue with the feedback, but not often enough that I'd want to stop doing it. The point I always try to remind people of is that they're never interviewing in a vacuum: we always have a cohort of applicants to consider so, whilst you might disagree with us that X is where you fell down in the interview, we're seeing that in the context of talking to half a dozen others about X, and how they performed, as well.
Thing is many companies post job ads that aren't actually available. It's a way to promote their supposed growth to clients, wanna be buyers. Quite often it is just regulatory as promoting internally requires them to open up the role to external candidates. Correct a good portion of CVs are never looked at.
During my last job search, I applied to about 15 jobs, heard back from 5, interviewed with 3, took the job from 1.
One of the other employers who
interviewed me had not contacted me for a couple months. Then, out of the blue, they contacted me again asking if I'd like to continue the interview process.
Unsurprisingly, I turned them down. I was already a few weeks into my new job. The long delay gave me a bad impression too.
I had a lot of this last time I was looking for a new job! I applied to about 15 as well, heard back from a few quick no's but had only one interview which led to an offer.
Literally months later I then received about 6 interview requests! It blew my mind how so many companies were months behind.
Remember too that reminding companies that they’re in a competitive environment can be effective. Telling them when you’re in an offer stage with another company often makes them hit the gas.
This happens to me all the time. In addition. Interviewing for multiple roles at once. I’ll get an offer, but am also awaiting a response from another company. Maybe I’ll get it, maybe I’ll get ghosted. In theory, the internet tells me I can use it for leverage, but more often the offer responses will almost never line up and I’ll have to take what I get first, or reject the offer m, betting on something else that may be coming.
Incentives matter. Recruiters get paid when someone accepts an offer and referrals often get a bonus at the same time. Many other people in the process get paid for every hour they spend in interviews, or going through resumes, or attending job fairs..
I know this is meant to be a joke, but I actually do think that from the perspective of an 'ordinary' company it's better to have 'ordinary' developers. They might stay for 5, even 10 years. If you manage to get excellent people they'll realise their mistake and be gone within 18 months along with your onboarding investment and everything they've learned.
You don't have to intentionally search for mediocre devs. They're everywhere. Good devs will probably not even apply to your mediocre company. But if one does actually want to work for it, you damn well better let them. Better to spend your time figuring out how to make your company better than how to keep food devs from "making the mistake" of working for you.
You're right, you don't have to intentionally search for them. But you can be honest with candidates at the interview stage, rather than promising an amazing work environment, cutting edge tech and fascinating world changing projects - ensuring disappointment when first task is to migrate a CRUD app to a newer version of PHP.
Every place I have ever worked has had some developers who were not amazing. The problem is places that insist that everyone they hire is a superstar, that's usually a drink the koolaid situation.
Hopefully your interview process weeds out most of them. Beyond that, companies should be evaluating their devs in the first 3 months. After that length of time you can really know pretty well how good they are at what you want them to be doing.
I feel like there’s a lot of room for improvement in the hiring process. Does hiring people who have the luxury or lack of life to grind LeetCode problems several hours every day for weeks or months really get you the best candidates? In what other industries are the bars so high. Take a chance on folks and don’t be afraid to part ways if it doesn’t work out.
I'm clinically diagnosed with ADD/ADHD and this has stopped me cold as a developer. It's been a very tough road for me and Iv'e been searching for work for over 2 years. Although I land a countless amount of interviews and second and third rounds, I'm never able to pass the coderpad or leetcode stage. This is because for me to work, I need to be in my own head and in my own space. I produce work but the idea of someone watching me over a computer screen while I work on some problem that is frankly much simpler then the things Iv'e had to tackle to build what I build - zaps my brain. And I just can't do anything about it. I'm in a technically hot market, frontend developer with years of angular and react. I made full-scale projects over years like gif.com.ai, qKast, LiveLink and 2fb.me and I'm even working on a new secret project in Jamstack. None of my actual work and what I know really matters to ultimately land the job. Richard Branson is my inspiration. I heard he started Virgin because he basically had to and maybe I must be an entrepreneur for the same reason. Because all I have is my projects and not a job that lets me do my best work.
If you hate leetcode refuse to apply for jobs that require it. I’ve never had a leetcode session and never will, yet I switch jobs every couple of years (im more on the backend side, not sure how much that matters). There are other ways to land a job. Recommendations from past coworkers seems to be a good way for me so it’s good to be in some kind of network. Perhaps your unemployment gap is what holds you back. You should do something about that as in obfuscate it somehow to not look like a redflag when someone is glancing at your resume. Also don’t mention your ADHD regardless of how good a coder you are.
You must be rather lucky. Being in a similar position to parent, almost all companies will do leetcode or leetcode style homework now. It's too cheap and easy for them not to, when you cna literally just pay HackerRank to generate a test for you and send it to thousands of people.
> If you hate leetcode refuse to apply for jobs that require it.
The problem is outside the big companies everyone knows, it’s hard to get documentation on a companies interview process.
Glassdoor exists, but often is little help, as there’s a complete lack of information about the actual process, it seems too included only people who didn’t get an offer complaining about something that may or may not apply to you, etc.
Even the sites made specifically for aggregating those sorts of companies often fail. I’ve looked at them and seen stuff like “X company, but only very specific team” or “Y company”, but when people talk about them nowadays, they seem to have switched to utilizing leetcode or similar for screening or something. And god forbid you out any filters on.
> If you hate leetcode refuse to apply for jobs that require it.
Very much this. I've never actually done a single leetcode problem and never will. Recruiters will tell you what the interview process is like (if not, just ask). If it is based on whiteboard puzzles like this, just refuse. Be sure to tell them why you're not interested!
We can improve the maturity of hiring in this industry but only if we collectively refuse to participate in these bad practices.
there are plenty of software companies that have pretty easy interview processes. once you get that far, you basically just have to avoid talking your way out of the job. but they don't pay way above the median engineer salary either.
the big n tech companies have the same problem as harvard, more or less. way more qualified people apply than they have headcount for, so how can they pick efficiently?
I don't enjoy leetcode interviews, but for these extremely competitive positions, I can't think of a reasonable alternative I'd prefer. you know in advance what topics you'll be tested on, and the interview prep applies to several different companies you might be interested in. I'd much rather do that than prepare a bunch of "tell me about a time when..." answers for each company's supposed values.
> In what other industries are the bars so high?
pretty much anything where you can start at $200k with a bachelor's degree? honestly what other jobs like that have a lower bar?
Sometimes I wonder about the how much better leetcode interviews are at picking the best candidate than a random number generator would be (obviously after doing all the other interview stuff other than the leetcode)
This is a great question, more generally what is the expected improvement in the quality of hire conditional on some selection method.
The famous Hunter & Schmidt meta-analysis suggests that only work-sample tests and IQ tests work well enough to use, but it's an old set of studies so hard to know if it still applies.
In the updated paper, work sample tests do not come up as important as they were in the original paper:
It appears that almost all of the validity of work sample
tests is captured by GMA measures, because the incremental
validity is essentially zero.
But work sample tests are a great mechanism when GMA cannot be used for legal or other reasons. The paper concludes with:
The research evidence summarized in this article shows
that different methods and combinations of methods have
very different validities for predicting future job
performance. Some, such as person-job fit, person-
organization fit, and amount of education, have low
validity. Others, such as graphology, have essentially no
validity; they are equivalent to hiring randomly. Still
others, such as GMA tests and integrity tests, have high
validity. Of the combinations of predictors examined, two
stand out as being both practical to use for most hiring
and as having high composite validity: the combination of
a GMA test and an integrity test (composite validity of
.78); and the combination of a GMA test and a structured
interview (composite validity of .76).
Well, the problem is that you can't actually have a "realistic" work problem in the space of an interview. Given that constraint I think it's a reasonable approximation.
Sure you can. At least, if our baseline for "realism" is, "an approximation of what someone will do on the job".
I'd say asking someone to regurgitate some solution for a random leetcode problem is far worse an approximation than asking someone to write, say, a little toy API that does nothing more than retrieve a value out of a set.
See how well they're able to develop in a language of their choosing. Can they get started immediately or do they stumble putting together the first little building blocks?
Treat it like a "real-world example" and make that clear up front. Do they think about logging and metrics? (for the purposes of a toy interview problem, just writing to stdout for both would be sufficient). Do they think about dependency injection? What about unit tests?
Then follow it up by asking them to modify a bit of their logic. ("okay, we've got it returning a matching value from the set if it exists - what if we wanted to add in wildcard support at the end of the incoming string?").
Tons of very real things to consider, even in the constraints of a simple toy problem.
As someone who works in Big Tech, I would much rather have people on my team who think about maintainability, debuggability, monitoring, what can go wrong, etc. etc. (and have shown during an interview they're capable of writing some trivial business logic around that) than someone who absolutely nailed mirroring a binary tree and solving the longest common sub-sequence problem.
Have you ever actually been asked to implement a sorting algorithm or balance a tree from memory? I've done a lot of whiteboard interviews, including at some of the Big Ns, and I can't say I ever experienced this, despite those exercises being used as a kind of metonym for whiteboarding.
It was mostly a joke, I'm a DS so I get arbitrary take homes rather than leetcode.
The more general point is that the algorithmic approaches from leetcode problems have not a lot of relation to what most programmers do all day, and as such, are less useful as a work-sample test.
Doing a take-home where you fix some bugs would probably work better (i.e. more correlated with outcomes) than leetcode interviews.
Well I think this is an important point, because the tests, IME, are asking you to apply the concepts to solve a toy problem, not to actually implement stuff like sorting algorithms from memory. The latter is indeed unrealistic, but the former is something my job actually does entail.
> way more qualified people apply than they have headcount for, so how can they pick efficiently?
This holds for blind applications.
But Facebook reached out to me a few years ago which I was pretty excited about, but then I was dumped into their standard applicant pool, and I really didn't have time right then for an 8 week hiring process with 7 or so leetcode interviews.
I'd go further and say I actually do like them. It is a kind of programming where instead of the humdrum realities of your daily work you can focus on pure ideas to solve abstract problems, which is fun to me. Besides that, as a self taught developer, they've given me the chance to prove myself on a level playing field and to measure my progress over time.
It's not even a problem of a bar being too high. It's a problem of using the wrong bar. The intellectual laziness of using metrics like leetcode-like performance for hiring instead of evaluating applicable technical and soft skills blows my mind.
Hell, I’m convinced for a lot of things, they wouldn’t even need to trains decent developer.
My very first job was working with tech I was completely unfamiliar with and had really never touched as the lone developer. Yet, I managed to be productive very quickly in the short contract it was. Turns out that a lot of the programming languages and frameworks used in “real life” are pretty damn similar and it takes a little bit of reading the docs to be able to figure out.
Yet nowadays I can’t even get an interview because my resume isn’t plastered with talk of k8s and every other cloud/infra software the company used once.
Well then you get system design and that is becoming the new racket. I don't know what FANG is going to do long term because the quality of experianced enginieers with the time to play a game of "LeetCode and System design" can not be very high. At some point I would assume they need to make things simple and teach dedicated resources to interview.
>Does hiring people who have the luxury or lack of life to grind LeetCode problems several hours every day for weeks or months really get you the best candidates?
In my experience running a company, it's the lowest risk way to hire competent software developers and given just how expensive and risky it is to hire people, it's worth it. Most competent developers don't mind spending 60-90 minutes answering technical questions/leetcode questions in order to get a high paying job so there's not much pressure on me/my company to not do it.
>In what other industries are the bars so high.
Almost all professionals working in fields that pay as high as software development have higher bars, whether it's law, medicine, finance. It's a myth that only software developers have to go through a kind of technical challenge in order to get a job. If anything, spending 90 minutes to solve basic technical questions and getting a 6 figure salary as a reward is among the least demanding and most objective systems that exist among professionals.
>Take a chance on folks and don’t be afraid to part ways if it doesn’t work out.
So I should hire someone who is likely leaving an existing job to come work for me for 3 months during which time I pay them, all for the sake of what? What is the benefit of doing this other than appealing to HN/reddit's hatred of technical interviews?
When I first started my company back in 2009, I was a young, naive 24 year old entrepreneur and decided to listen to reddit about hiring and running a company. Valve was all the rage back then and they had this culture of no management, anyone could work on anything they wanted, do whatever they want etc etc... and so I decided I would run my company the same way. I had this idealism that if I hired people who seemed motivated, enthusiastic about technology, good well rounded people then nothing could go wrong and my company would be sure to succeed.
Well... boy was I wrong and it almost drove my company to failure. Running a company is absolutely damn difficult, managing people is incredibly hard and honestly frustrating and time consuming.
People are not intrinsically bad or evil, but people do respond to incentives and if you just pay people, even smart and well intentioned people without having rigorous expectations as well as solid management and structure then they converge to a point where they basically do nothing productive. My idealism that smart, hard working and good people would be able to be productive without needing to be prodded in the right direction, without the need for management and structure, without reviews, timelines, goals etc... failed quite miserably.
I thought hiring "good" well rounded people would mean they would be able to learn things on their own, find ways to advance their career through technical books, or attending conferences or other ways of self-learning but that never happened. Instead the people I hired spent an inordinate amount of time on various social media, Facebook, Youtube, playing flash games. The amount of distractions that exist all of which are competing for your attention and to pull you away from being productive are enormous. Especially if you work in a technical field where you have to solve problems and be creative, you can find yourself with the equivalent of "writer's block" and end up spending a great deal of time just procrastinating and doing nothing. That's what I ended up observing among the people I hired. They were not bad people or lazy, but they just couldn't fight off distractions.
In hindsight it should have been obvious, I mean if all it took to run a successful company was hiring "good" people then then every company would be successful because really, almost everyone is a good person and I rarely encounter bad people.
But being a good person doesn't make you competent and what a business needs first and foremost are competent people working within a system that has a proper incentive structure in place to reward their skillset.
I continue to give people technical interviews because while I might miss out on some strong candidates, even some of the strongest candidates... I am effectively guaranteed that whoever I do hire will meet the minimum standard needed to do well at my company and that risk/reward ratio makes it worth it. If only because people who are good at technical challenges are people willing to put in the time and have the kind of discipline needed to prepare for them instead of people who think they're owed a job, that kind of self dedication is genuinely hard to find.
So at this point I have "lived long enough to see myself become the enemy" to quote the Dark Knight. My company does a lot of the things that HN/reddit says are bad, like we have technical interviews, we have hard deadlines, we have management yaddi yadda... and the end result is we now have a productive and successful company that grows year over year.
There are just so many risks that one takes in running a tech company that the additional risk that comes with hiring people on anything other than their technical competency is not one worth taking.
> Almost all professionals working in fields that pay as high as software development have higher bars, whether it's law, medicine, finance. It's a myth that only software developers have to go through a kind of technical challenge in order to get a job. If anything, spending 90 minutes to solve basic technical questions and getting a 6 figure salary as a reward is among the least demanding and most objective systems that exist among professionals.
The more traditional professions do their own gatekeeping and have one, standard, set of exams to take. Once you've taken them you don't need to re-do them for every interview, although you may need to stay current.
In programming, every employer has a different, non re-usable, exam.
> The more traditional professions do their own gatekeeping and have one, standard, set of exams to take. Once you've taken them you don't need to re-do them for every interview, although you may need to stay current.
> In programming, every employer has a different, non re-usable, exam.
True for DS too. This is the real problem. Like, if I could take a bunch of re-usable take homes and then not have to worry about this for a few years, I would totally do that as it's honestly so frustrating to have to do mostly the same crap over and over again.
It's not a single 90 minute test. It's a 90 minute test for every place you interview with, every single job cycle. This most recent round I had to find time for at least seven of these tests on my own time, and several I did a ~30 minute practice test ahead of time to get familiar with whatever subpar web-based coding experience I'd have to deal with for the test (I think there was 5 different ones I dealt with).
I could have done three other tests as well, but those were >90 minutes and I just couldn't find the time or energy for it (Amazon's requires a dedicated 2.5 hours, for example).
So effectively I spent roughly 12 hours just taking exams for my last job search, and basically let the house go to shit for a solid month since I was working on them (or prepping for interviews, or doing other things asked of me) basically every night, and had zero energy on the weekends to catch up much beyond a couple load of dishes.
Compared to having to take a single bar exam, one time, that you cram for in the prime of your textbook knowledge, I'd take that any time.
> "I had this idealism that if I hired people who seemed motivated, enthusiastic about technology, good well rounded people then nothing could go wrong and my company would be sure to succeed."
I often wonder when seeing job adverts that ask for a motivated and driven self-starter who is good under pressure and organising and prioritising and willing to work overtime and on-call and has skills up and down the tech stack, etc. etc. ... why would a person like that be applying for a job as an employee, instead being a founder or consultant?
The fundamental trade of being an employee is a kind of subservience - "I give you my time and effort, you tell me what to do. If it doesn't work out then you take the hit, and if it does work out then you take the bulk of the profit". At the extreme of "I've hired you, can y'all just self-organise into a profitable company and I will still take the bulk of the returns" it all falls apart. It's trying to push leadership and management down onto employees, without any of the money or social status or potential returns or even the ability to put "manager" on their resume and leverage it for promotions in future.
Once you grind once or twice, the next times you practice it comes back quicker. The first time I interviewed it took me 3 months of daily morning prep and one weekend day of studying. This time, it took me one month of only a few days a week practicing to get back into it. Granted I’m single and young and Hopefully will never have kids.
Not only you do not have much time for yourself but it is often not really "quality" time. It rarely comes in uninterrupted blocks of say 90' or 2h. It is going to be 20 minutes there, 40 minutes there, and maybe 30 minutes over there.
I strongly agree with your point about bias. When I was not a father, I spent a lot of time studying (and passing) AWS certs and reached the point I got all of them. Now? I am happy when I read few blog posts each week and, very often, it takes several attempts to be able to fully watch a single re:Invent session.
"Yes, but you are reading and replying to comments on HN!"
The nature of the job is that there is always something new for you to keep up with. Even if you never change jobs it's hard to see how you avoid devoting any time to studying anything. Perhaps you could sneak some catch-up in, say, over lunch, or on the train, or something along those lines.
I mean, if you don’t have time to look for another job then don’t. If you need another job then you need find time to make yourself hire-able. There are plenty of jobs that don’t require leet code but if you want the cushy FAANG jobs, then you need to put in the effort. If That means spending less time with your kids and hiring a nanny, then do it.
Don’t be hyperbolic. It’s just a month of prep. No one is advocating for child neglect.
This is for a job that pays 450k+. Do you really think you’re gonna be handed it with no effort?
If you want a mediocre job, then there’s plenty of companies you can get hired at with little effort and you’re welcome to work at those companies. Just don’t be surprised if you make 1/3 to 1/4th the comp.
> This is for a job that pays 450k+. Do you really think you’re gonna be handed it with no effort?
Because it’s a job that pays that amount, I kind of expect their hiring process to select for the best. But it doesn’t. It selects for those with an abundance of time on their hands.
Yes it does get easier, I've been through this process many many times. But what if you do end up having kids or suddenly find yourself having to care for a parent? You're really screwed then.
I'm slowly coming around to the view that the widely accepted process is ageist. Whether that's deliberate or an externality I'm still undecided.
A lot of people here need a reality check. This week, I volunteered as a security guard for the US open where we were working 12-15 hour days. Other people were getting $20/hour. We got there at 9am and didn’t leave until 2am most nights. Most of these guys had families and kids who they were not seeing for the entire month this event goes on. But they had to do this because they need to provide for their family.
You’re complaining about the process being ageist, but I think you need to wake up to reality that life is not fair and sometimes you have to make sacrifices. In our case, if you sacrifice your life for 1-2 months it can set you up at a nice job for the next 2+ years. That’s so much better than what most people have it like.
I think you hit the nail on the head. Most people with responsibilities simply don't have the time to do this. And as you get more senior, you realize how little knowing algorithms has with day to day work. They are filtering for young engineers that don't know any better and have the time to leetcode. These engineers are less likely to question management and they have already shown their time is cheap.
I also dont have much time. But I have big financial buffers as I assume most 30-40 year old developers do. We can afford to not work 3-4 months while learning and looking for a new job. And if thats not possible surely we can squeeze in 20 minutes daily doing leetcode on the job? Most of us don't actually put in 9 hours of actual work. Don't get me wrong I hate this process. I am just saying it can be done when you have kids.
So, having just had a kid, perhaps I can give some insight (from my perspective, at least).
Every minute I spend on take-homes (oh dear lord the take-homes) is a minute I'm dumping the childcare responsibilities on my wife. And she heads out to work, so I do a bunch of childcare in the mornings/evenings.
Then I also have a full-time job. Like, unless I want to stop sleeping I don't have a whole lot of time to do this stuff.
I just (mostly) finished one and it was because my wife took the baby out to meet other mums.
The worst part is that I have lots and lots of work online, plenty of GH repos and a bunch of really selective companies on my CV. And yet still every time I need to prove that I can in fact call read.csv and do a bunch of data manipulation/analysis.
And I love doing this work. I can only imagine what this is like for someone for whom it's just a career (which is totally fine, tbh).
the point is you are still wasting your time and your life on stuff that has no practical value for 95% of developers. You are spending a huge chunk of time learning skills that have no use beyond the interview itself.
Yeah and then you get paid 350k at 24. I’m glad we’re in an industry where you can become incredibly well paid by spending a few months studying for a standardised, albeit unofficial, test. Much better than the CFA investment bankers, accountants, law school grads, etc.
I disagree with this - here's my experience. I started training for competitive programming in college. One semester in particular I spent 20-30 hours a week training, and some of my grades suffered as a result. But I got a lot better at algorithms. Years later, what skills do I remember from college? Very little, but I definitely remember the algorithms. Further, converting specifications to code and general problem solving became noticeably easier after this period. As a result, the jobs I've had have centered on problem-solving and interesting technical challenges. I'm always surprised when an idea from that period suddenly proves itself useful.
Also, even if training for algorithms questions was purely a matter of signaling with no positive externalities - it's actually a much faster and easier process than getting another degree, which is a common alternative.
TL;DR If you put in the time, it can absolutely change your trajectory in ways that you might like a lot. If you don't, how will you know?
I've never had any very difficult technical questions at my interviews, just basic familiarity with the domain. The hard part seems to be getting the interview at all.
Out of college I sent out to hundreds of places and got one interview offering an abysmal 30k, then at some point got contacted out of the blue by a recruiter for a big company. The email was so badly written (different font faces/colors/sizes, bad English) I thought it was possibly a scam, but then that turned out to be an easy and very well-paying job for someone starting out. Then the next place said I was the best candidate they ever interviewed because I answered some basic language questions clearly.
My conclusion has been that hiring in this field is just confusing and nonsensical, and you never know what you're gonna get, but you probably don't need to touch anything like leetcode unless you're shooting for Google.
I don't think these cheesy interview questions like writing a circular linked list or implementing Conway's Game of Life should even take any "grinding" if you have good fundamentals.
I almost feel shorted that I never got a question like how I would measure the depth of the ocean with an apple, as the article parodies it, since I find that kind of thing fun and interesting.
Recently applied for two jobs - a startup as employee #11 and a growing startup (ChainLink). The startup moved fast with an initial chat, tech test, and follow-up tech interview taking four days in total. ChainLink, who offered more money, was on interview stage 3/8 by the time I had an offer from the startup. I just didn't have time to complete three more 1-hour tech interviews, a project management interview, and then an HR interview. Ended up stopping the process even even though they said they were keen.
Yep,this is a Apex guide to get the best developers away from your company, much recommended. Don't forget to make them fill the job form again after they already provided that info on resume and shared their linked in profile.
There's nothing quite like spending days fine tuning a CV to make it as information rich and digestible to read as possible, only to then have to spend hours filling out the companies own shitty application form so they can search for useless tech buzzwords and lose all of the context that a good CV can have.
Plus, since they never tell you why you weren’t selected anyway, for all you know there are problems in their recopied version (which is probably all they read). Would you even know if they just failed to store half your work history in their database?
Yep, this really makes me mad. 10 years of job history plus 3 references and I have to go searching for addresses for all the jobs and dig through my phone for people's phone numbers. And then I never hear from them...
Looking for a job is a sales task. It is all about self-promotion. It does not come naturally for many dev./engineer types (and I'm one of them) but that's the mindset to adopt.
I was reading advice about job hunting recently, and one person said interview at large companies first, that take a while to hire and have offers that stay good for some days or weeks - then interview at smaller companies, where turnaround can be quicker. This makes sense to me.
I've also been asked by HR when interviewing where I am in terms of the process with other companies, and some mention to contact them if that process changes (e.g. if I get an offer).
And use it to ask questions about their process. It helps to know upfront if they're slow, you can use it to either try to slow down anything else you've got, or cut them loose when you need to.
Anytime a founder/startup mentions the words "family" or "loyalty", its a big red flag. Always run away from these companies that demand you be subservient just to be employed.
Yet when I was applying for my last job, I made 2 dozen applications direct. Got 3 replies, about 2-3 months late. And for all 3, got a standard rejection.
Sad but true: We need recruitment agents, as companies will never do anything until someone is breathing down their neck over the phone.
Those companies that never replied? One year later, they are still running Linkedin ads promoting open positions.
It could be the case that they 'hire' someone internally from role A to the advertised role B. But due to some legal requirements they have to run an Ad so they appear open to all candidates.
I had pretty good experience with recruiting agents. Sadly didn't get the job as I flunked the leetcoding part but I got an interview compared to rejection when I applied via forms and CV.
Or here's my favorite: let someone go through the entire interview process at subcompany (Shipt) only to have your former, embittered, manager (Fuck you, Dave) at the parent company (Target) torpedo your offer.
Don't work for Minnesota companies, kids. Optum, CHR, Target, etc, they all suck with shite culture, bad pay, and poor career prospects.
Glad you named and shamed. Should be more of that around here. Too many toxic environments fly under the radar because people aren’t willing to speak up.
Target hires the cheapest bidders for their IT work. I stopped ever doing service for them because they'd send techs on site with little to no docs, and with hours of wait time to resolve basic issues on the phone. The inefficiency of that company is baffling.
From a perspective of one once desperate for a job, the take-home test resonates the most.
Market and approach to finding a job in IT sector seems to be somewhat different in Russia compared to US, even regarding remote work for non-resident employers, so don't be surprised if something would seem atypical. I'll omit most of the stuff that's not too relevant.
I put an CV on a job site, had few calls, but they were clearly not what I did want. Over the course of about 5 months, I've applied for 3 positions that I could be applicable to - I've never had any experience with web - and that were remote.
On all three I've done take-home tests. The last one took about one week, most of that just thinking, with maybe two evenings of actual coding. They accepted me, and strangely, told me do make a web app, despite no mentions of that in the job description. Luckily, half a year later, I've been offered an non-web, "mainline" position in team.
The one before that didn't go as well. Due to misunderstanging, I've implemented a much more complex solution, and did a mistake in the implementation. Though it was indeed faster than expected solution, after fixing errors.
The first one is what burned me. There were two tests, one done in two hours, and another one was "serious". It used some clearly real data - I had to download it from some US buerau, took a month of 3-4 hours of coding everyday for POC implementation, and not much less than that for a more formalised one, where rule set for matching data entries had to be indexed by 4-D array (not sure if I'm correctly using terminology). I haven't got answer for either version, and only got one a week after an reminding email, when I've asked for some clarification. They've told me they decided to drop the vacancy and not hire someone. Still I don't know whether they just wanted someone to do a task for free, or that it had to be done in a fundamentally different way.
Given that what I'm currently doing isn't market relevant, most likely I won't be any less desperate when looking for a next job.
I'm glad there are so many posts like this these days which highlight the ridiculous de-facto process companies use to hire engineers. I've been on both sides of the interviewing process and the lesson is that startups that avoid using this process will gain an advantage on the ones that continue to.
Really quality people are HARD to find. If you send people a pop quiz about probabilities and then some random brain teaser puzzle algo to solve in 30 mins you're gonna lose eventually because your competitors will have the actual quality people.
Just recently switched jobs. Starting week two today.
I applied for only one job at the insistence of my wife because it was with a renowned company. I had to actually write out a C.V. to apply, and as of Friday, a week into my new job, seven weeks later, my application is "still under review" according to the internal recruiter/manager.
I had a lot of technical recruiters reach out to me, almost all of them failed to garner my interest based on a few simple questions I asked right up front. Before interview I prequalified all of the positions to ensure that it involved remote work and that the pay was within a range I was willing to accept. "Is this position remote? Or on-site? What is the pay range for this position?" A large proportion of the people who reached out did not respond to the questions, and of those that did, several gave responses that were immediate red flags.
I interviewed with a FANG, on the recommendation of a friend, and I ultimately turned down the offer, but had it not been for my friend's insistence who works at the FANG, to "keep going" through the interview, I would have simply stopped the interview, and in fact thought about doing so several times. Whiteboarding and take-homes for people with decades of proven and verifiable experience and a couple of master's in computer subjects is still apparently a thing.
I had an interview lined up with another FANG, which was to be a full day of "first round interviews" and then two full days with different teams to figure out where I would go. I withdrew my application once I accepted the offer for my current (new) position. It was not a company I was interestd in, but they were doing interesting things in augmented reality.
I put in my two weeks notice, and the company I was working for made a counter-offer, almost two hours after my last day on the job.
In all I had five offers on the table, at base compensation of $100K (absolutely absurd interview with a low-ball offer even after pre-qualifying), $120K (reasonable interview, low-ball offer even after pre-qualifying), $150K (45 minute interview, knew the size of the offer going in, interesting work), $230K (a quick chat, then four hours of shooting the shit, exceptionally interesting work) and $260K (two full days, whiteboarding and take home (which I refused to do), career advancement).
My current position I didn't even apply for, and I don't think anyone even looked at the C.V. I got the job because of an old colleague who said "are you looking?"
Total search time was from late June to mid-August. Maybe eight weeks total. I was being extremely picky with regard which companies I talked too.
You'll be absolutely steamed if I tell you all of the job "applications" were inbound inquiries whereby the companies approached me and I actively avoided using a single external technical recruiter. I applied for only a single position, at the insistence of my wife.
The only place that required a C.V. was someone in HR at the FANG. I used the same C.V. to send to the company my wife wanted me to apply at. I had to create a C.V. specifically to satisfy HR. I haven't used a C.V. in almost 20 years when looking for work. The last time I built a C.V. was when the company I worked for got acquihired and that was 9 years ago.
I don't think my C.V. got looked at once during the entire interview process. Nobody I spoke with even mentioned my C.V.
I'm not a particularly strong candidate, below average intelligence, so-so education.
What do I do? So far mostly just typical enterprise stuff, in legacy, but not quite dead versions of tech that has modern counterparts.
As for what I want to do, it’s a bit hard to describe. It’s much easier to describe what I don’t want to do. I don’t want a job that a year or two in I’ll dread waking up in the morning and having to work. That’s been a constant in my career so far. I’d also like to work less in the same old and would like to work where I’ll be exposed to me more and ideally working on something that interests me. Ofc the latter goes back to the “hard to describe” thing and mostly something I know when I see, but can’t put it concretely.
For the most part I just look at job listings, and have to filter through the swaths of stuff I don’t want to find the occasional job that looks good only to realize there’s no way I’d ever to get it. Sadly it seems like the best way to get where I want is to have been in the a different place with a different mindset five years ago.
What makes you dread going to work? I used to have that experience a lot, and in my last couple of jobs I finally figured out how to set expectations clearly and know my boundaries, and it’s almost completely disappeared.
What do you key off that makes you not want a job? Is it possible you’re filtering too hard up front and excluding things that could be a good social fit?
Recently applied to a DevOps Engineer position and after multiple interviews (took ages to plan them...), I finally reached the take-home challenge stage. I have been tasked to work on something absolutely not related to the job, with a framework I have never heard of, and which has never been evoked during the interviews... what a trap!
I obviously failed miserably and they did not even follow up on the challenge even if they said they will... nice!
It is not healthy to set up the candidates to fail - at especially such a late stage - because you just waste everyone's time (especially your own employees'!). I do understand that the companies are trying to protect themselves against false positives, but it sometimes reaches some ridiculous proportions!
Since then, I have something else so happy end (at least for me because they still haven't filled their position...).
The usual process to hire engineering managers is even worse. Most of the questions are of the “open” type where you can easily fail them even if you answer correctly according to your own experience. It feels so random. You never know what kind of detail is important to the hiring manager.
I'd like to add "working in antiquated/propriety languages and infrastructure" in the list.
As a new grad desperate for getting paid, I took a job working for a software built on a language no one uses outside of the company. Never got a promotion. Everyone was 10+ veteran. The processes was bureaucratic and inefficient but everyone was ok with it.
After realizing I was paid 60% of market rate, I wanted to get out but it was hard. I thought about software architecture built when I was born. I was out-of-touch about new trends. LeetCode-like questions were my saviour because it's a way to break into the job interview process. Getting a new job away from antiquated tech was one of my best day in my career!
I used to hate leetcode, and I've never done the grind, refusing to do so, so just a maybe 20-30 of them in total in my life to get an idea of it. I'm okay with not getting through hard leetcodes in competitive positions.
However, recently when I put myself on the market I found many companies are now doing take-home tests. I find I hate them even more, so I appreciate leetcode interviews now. I think take homes are too asynchronous and the last thing I want to do is waste my nights and weekends working on them. I've refused to do the last 4-5 I have been offered after agreeing to do a couple and then dropping out instead.
Ultimately I went with companies that didn't do tech screens beyond a simple code pairing session.
I like the take home tests myself. Whiteboarding and brain teasers are not outside my experience (I did mathletics stuff as a child) but doing them out loud in front of a hostile audience is not a strength of mine. The best work I have done has been largely composed of private problem solving, syncing up with peers only once I was sure I knew the topology of the problem and perhaps had run a few experiments.
It doesn't really take long to get to the point where talking about a problem with others can be helpful, less than a day most times, but starting off a new problem with verbal spitballing with peers has not been all that useful in my work. For me to really learn something I need to hold it in my hands/code editor and get to know the ins and outs, build up intuition so that I can speak about it accurately. Jumping into unknown problems in an interview by standing up at a whiteboard talking just seems like putting the cart before the horse to me. Maybe the interviewer wants to see my "thought process," whatever that means, but what does it really matter if I can get to a good solution without vocalizing every step along the way?
I often go down the wrong paths when problem solving, if only to traverse them for my own edification. If I can make 10 mistakes or false starts in a row and still arrive at a decent solution as quickly as anyone else, what does it matter in the end? I also tend to write code out of order. I might jump around between concepts and write disparate sections of a solution without linking them back right away, following my intuition without trying to enforce order on everything I do. No one has ever complained about my speed or code cleanliness/clarity, quite the opposite in fact. Yet when I am put under the microscope, these behaviors inevitably stand out to the interviewer as cause for concern.
Despite a strong track record of building numerous successful systems and apps, many solving "serious" problems that go beyond what can be assessed in an interview, on tiny teams where I shouldered large amounts responsibility, if I can't present my thoughts in a coherent, structured way, in the moment I am thinking them, I am bound to catch flak from the interviewer. So I often feel I must alter my behavior, go slower and try to only display ordered thinking, but this does not play to my strengths. Frustration and stage fright further degrade my performance. So the take home test is much appreciated for people like me. I am happy to be left to my own devices when starting a problem, and happy to talk with peers once I have gotten myself oriented, but the initial process I use does not lend itself well to interrogation.
My company works with a bunch of not so mainstream APIs so if I just waited for experts in everything we work on, I’d wait forever. I’d rather hire good, smart, people and then fill in the gaps in their knowledge. Smart, hardworking dedicated employees are much harder to find than leetcoders. And they learn really quickly with a lot less attitude and grandiose opinions of themselves.