Between bad interviews I've been in or read about and spending the past 6+ months working on our hiring process I've become very opinionated about hiring.
The process Amazon and many other tech companies use is fucking terrible. Algorithm tests and surprise CS 101 questions do not identify good employees. They're biased towards recent grads, do not address most real world situations, can be gamed through studying, and do not identify people who can actually think. You should not be testing for people who interview well, you should be testing for people who will make good employees.
You need to test real world scenarios. If they're going to be re-implementing bubble sort and doing binary math then fine, use HackerRank. Otherwise you need to have candidates work on a project based on what they'll actually be doing. Will they be working on APIs? Have them build or integrate with an API. Mapping in an iOS app? Have them do that.
Do not drop big surprises on candidates. Respect them and they will respect you. Tell them what to expect up front. The first email we send includes an outline of our entire hiring process with a list of each step. I've lost track of how many people have thanked me for this. Going through an interview blind is extremely stressful and increases the likelihood of losing good candidates.
My goal is to set people up for success. If their skills match what we're looking for I want them to succeed. I don't want them to fail because they are bad negotiators, didn't have time to study CS questions, or don't fit the typical stereotypes of a programmer.
I've been in the industry a while and if a company/recruiter uses tools like HackerRank for recruitment, I simply ignore them and decide not to move forward. I think we as a software industry have been following a bad hiring practice. If you can't tell your fellow colleague is smart enough by having a tech-talk or giving something that's not a test-format, there is something wrong with the process or people doing the hiring. Also, it is hilarious how many times an engineer has to prove himself/herself, and after being hired at these places I've also seen that the people who do the hiring are not that good/competent themselves, although this may vary in some other place.
I think it's a holdover from hiring more junior candidates: after a few years interviewing and sitting on HCs at Google, I hired for a tiny startup that had tons of trouble sourcing candidates. My interviews at the latter place eventually devolved into basic IQ tests. Simple coding problems are pretty ideal for this, since they also lightly test necessary domain skills.
The problem is that this doesn't scale with talent and/or experience: I certainly wouldn't be better at coding interviews than I was out of college. People who aren't great at hiring take an approach that's valid at the low level and extrapolate it well beyond the bounds where it makes sense.
On the other hand, this only works if the pedigree is recognizable and reliable. I can be pretty confident that I don't need to test basic coding literacy of someone who was an engineer at Google for four years, but I've interviewed people with ten years experience and great references who were clearly dumb as a brick during the interview. In one case, we hired the guy over my objection and spent the next year fighting the fires he'd set whenever he touched anything (the founder eventually found some relatively unimportant, isolated niche for him to keep busy in).
It's a really hard problem, and most complaints I've come across are generalizing from their skewed view of what the candidate pool is like (usually assuming that most candidates are roughly as talented as they are, when the reality is that many candidate pools consist of some of the dumbest people you're likely to ever encounter)
Exactly this. The hiring process cuts both ways. Unless you're desperate, you should also be evaluating your employer and the quickest way for me to walk away is to filter candidates through something like hackerrank rather then something much more applicable to what I'd actually be doing as a programmer at the company. It shows me a big disconnect between hiring and the day to day and gives me no indication on the skill level of the team I'll be working with.
Equally to blame is the industry hiring process. ACM HackerRank and Codility challenges are often the first stage before you're put through a whiteboard. As a result, a competent programmer has no incentive to actually continue training in best practice, rather optimise for the interview process. I flat out refuse to do any interviews with this silly competitive programming hoop jumping. As a manager, what is your hiring process?
Tbh the way that hiring is done in tech is just lazy and reeks of mediocrity. Memorizing 'take home' assignments, banks of algorithms, pair coding, white board interviews, what a joke. Companies want to place all the burden on candidates and spend as little money as possible. It doesn't matter if they waste people's time.
Whatever happened to getting to know a candidates work? How about look into the work that a person has done and take the time to understand where a person's skills are. The problem with tech hiring is we have people trying to cut corners. So-called 'non-technical' recruiters doing interviews with a checklist, companies that treat people like hoop-jumping monkeys, and generally f*king idiots that won't do their job (they get paid for it, why again? They're not actually doing their job.)
Hiring is not a complex problem. The problem is literally incompetent people doing hiring.
The point is that the hiring process -- especially in programming -- isn't some golden, concise, dependable standard. It's quite messy, chaotic, and practically completely worthless.
The best you can do is sort out the people you absolutely cannot use or don't want. The rest? The one's that you reject because of not matching some part of the interview process but largely are a good fit? They're probably fine, they're probably better than you think they are. In fact, statistically speaking it's probably better to have gambled on these people than the people you've hired and then had to fire.
We don't have the industry standards, the experience, the data, or the worker pool to fuss around with these ridiculous interview processes some companies employ. In fact these interview processes actively filter for people who are only willing to go through with the process, not necessarily the best talent.
All I see when I look at job postings is tech stack. I am not interested in tech stacks or tools, and especially turned off by frameworks. As a senior engineer with over 15 years I provide solutions to business problems in a given platform. A software platform can generally be described in a single word: Java, Web, Rust, AWS, and so forth.
Because of that I no longer bother looking at Who Is Hiring or Work At A Startup.
From the perspective of more junior developers this must look like a game with checkboxes and scorecards. That’s exactly how third party recruiters view it. So, I completely understand use of AI boilerplate. Recruiters are the only way most of us are getting past resume submission now and they will game the hell out of your resume to get their commission.
Look, hiring is broken. It’s not clear what most employers are actually looking for if it’s not addressed in the job title. I just won employment with this big rocket company and it comes down to Java, test automation, cucumber. The interview was 30 minutes and I was selected because of my experience knowing I have never written Java. A tech stack never came up, but the requirements and expectations are clear on all sides.
In order to fix hiring employers must be willing to hire competent people to solve problems, not replaceable cogs to fill a seat. Most developers cannot communicate in writing, so make that part of a job filter that a candidate must write some essay in real time and must demonstrate some super trivial code solution (not leet code nonsense) in real time. Require they have code online somewhere if they pass all the filters. Garbage in, garbage out.
I also suggest reading about shovel vs spoon. The requirements for hiring in software are so failingly low that it resembles job placement. If you want candidates to take this seriously then don’t cast a wide net.
Please don't take this the wrong way, because I think a lot of very smart people disagree with my take on this, but: I hate pretty much every part of your hiring process, and could as a result use it as a springboard to talk about how we're trying to design ours.††
My problems:
1. Makes demands of the candidate before selling the role (in fact, explicitly!)
I recommend you don't do this. Instead, make a point of going out of your way to sell your company and your role to your candidates before you do anything to screen them.
This serves three purposes: (1) sure, it makes it marginally more likely that you'll keep high-value candidates engaged who'd otherwise fall out of your pipeline at/after "stage 1"; (2) more importantly, it helps disarm the interview process, both by establishing that you, the employer are going to put the effort and initiative into keeping the process running and establishing that tone for the whole process, and, even more importantly, by making the candidate actually want the job so they'll perform better during the process; and, (3) it's both the right thing to do and a noticeable difference from most firms' terrible hiring processes, which is good for marketing.
2. Is extremely subjective
Right out of the gate you're asking the candidate questions you can't possibly be benchmarking. "Code you're proud of"? What if the code the candidate is most proud of is something simple that been super useful on lots of projects? What if the candidate cherry-picked it from their code to demonstrate the most complicated stuff they've worked with? How will you compare it to every other code sample you get across the lifetime of your company? You're doing that, right? Keeping track of how well your hiring process predicts performance?
2a. Culture fit
Beware culture fit questions. You state it outright later in your process when you say (paraphrased) "you can train technology but personality mismatches are impossible". That's a recipe for hiring the same 10 dudes who like roughly the same X360 games. I know that sounds hyperbolic, but look around you at other companies and tell me that isn't a real concern.
Two other problems with culture fit questions: (a) they mask irrational responses from interviewers, which happen all the time. Some of your best performers do badly on interviews, because they just don't interview well. Some of those people (ironically, it seems to be those people in particular) will be hard on candidates who have the same problem. Why are you setting the expectation with your team that they should ding candidates for intangible, irrational, or subjective concerns?
In neither (2) or (2a) am I arguing that you should only be hiring based on measured defect density or ability to correctly estimate how much time feature X would take† or typing speed. If there are specific personality traits you need to select for, that's fine: just select for them deliberately, and train your team how to select for them, and track how you're doing.
3. The tryout project
This is going to make me sound like a jerk for at least 2 reasons I can immediately think of, but, to sacrifice (a lot of) tact for (a little) clarity:
I think less of teams that propose short contracting projects to candidates to try them out, because I would never agree to interview on those terms.
Here are the problems I have with this approach: (a) it invites/provokes an argument during your hiring process about what a good daily rate is, (b) it asks the candidate to negotiate an hourly rate in a situation where their leverage is egregiously compromised, which is unethical, (c) job searches are full-time jobs by themselves, and your best candidates are almost invariably already employed, so how could it be reasonable to demand they take a temp job with you as part of that search, (d) it requires you to demand the candidate produce billable work and assign the resulting IP before the candidate is sure they're going to accept the offer they might get from you, (e) the tryout project is deceptively low-information.
On that last point: I guess I've hired a person or two in my career that ended up not working out almost immediately. But usually, the dealbreaker problems I've had with coworkers or employees took months to surface. Lots of people can be productive for a short, high-stakes sprint. But virtually no dev team is hiring for that; they're hiring for the ability to be reliably productive, to exercise good judgement in design and estimation, and be compatible with the decision making process the team uses.
Yes, the tryout project proves the candidate can produce code you might deploy on your website. I hope I'm not the first to tell you that that is a very low bar; lots of high school students can do the same.
Please please please take this comment in the spirit I intended it. I expect lots of smart people will disagree with some or all of it, and would be happy to learn from them. I'm pretty convinced though that the conventional interview system that some of the smartest teams use is fatally flawed in a bunch of ways, and this hiring process is an opportunity for me to start talking about why.
%. One last point because I am on a tear about this lately
I would like to start establishing a meme: Job Interviews Are Hostile For Candidates.
Normal people don't enjoy interviewing for jobs. Normal people find the experience off-putting. They're nervous. They're dealing with a procession of people each of whose stated position is to judge them. Normal people don't like being judged by strangers. They sit there and read tea leaves from behavioral cues about whether they're coming across well. In my experience, this happens even in phone interviews, which (can we also establish this meme?) are the worst.
I am not saying don't interview people. I'm just saying when you do it, assume all the signals and readings you're getting from your candidate are janky as hell, because they are. Lots of strong performers can't do their best thinking and judging when they're conflicted and anxious. Compensate.
Whoah, long comment.
† BTW: my favorite dev interview question
†† There is a better way to write this paragraph but I'm pretty depleted right now so please excuse the clunky, combatitive tone.
I know how frustrating it is for candidates but having been on both sides of this, I sympathise with tech leaders at startups who are on the hiring side too.
We used to send out open-ended programming assessments as part of our hiring process. It's really hard to keep track of everything without an ATS and good internal processes and even with those it's hard to predict how many candidates will drop out at this stage so there's a strong incentive to invite too many and risk getting swamped than vice versa.
Not proud of it but I've definitely kept candidates waiting for several weeks due to being unable to keep up with the rate of submissions.
I think there's a non zero chance this guy is assuming too much malicious intent and could get a positive response still
This doesn't seem like a very good way to hire a developer to me. Why not actually ask them direct questions to find out if they can code? Why not look at and talk through some code they have written, or even ask them to write some code there and then discuss it?
Why go through all the levels of indirection of a LinkedIn search and then sift through hearsay? Why assume that the one or two people you talk to actually know what they're talking about? You haven't even vetted the candidate, so you're going to put blind faith in the two strangers you find via LinkedIn? What if they are not very good, or have poor judgement, or what if they hate your candidate because he was really good and they weren't (or for any other irrational reason)?
I'm not trying to be rude, and maybe I'm missing something brilliant here ... but I just don't see any "secret sauce" here.
I honestly think a lot of hiring managers don’t know what is the best way to hire. So many things in life are based on copycat culture (every NBA team shoots 3s now like the Warriors all of a sudden for example), and every software company now needs to make sure all their candidates know how to write optimal algorithms like Facebook/google candidates. But a lot of these companies are not google or Facebook or amazon, so they rely on stuff like Codality to essentially copy the hiring process of a top company when they really don’t even solve the kinds of problems google engineers deal with.
Basically need a Codality for normal companies with reasonable mixture of real world practical problems, and reasonable algorithm questions. Then hopefully the copy cat culture can pick up on that and we’ll have an organic fix to the shitty programming interview puzzle garbage filtering out decent developers who are just fine for most companies.
Does anyone else find it out that the people (recruiters) in charge of finding good tech talent often have no experience in programming themselves? So, my question is how do they know if someone is a good programmer?
If all they do is read the resume, then we know, based on other people's comments here, that it's clearly not good enough of a method to find the best talent. So, if this is the case, why do we keep relying on recruiters to find us talent?
I take a completely different approach to hiring, and I've gotten fantastic results.
Instead of throwing tricky algorithm questions at a candidates, I scour their detailed employment records for the most relevant experience for the first project. In other words, I'm looking for relevant experience rather than top-of-the-head algorithmic brilliance. In the interview, I pose our project problem, and the candidate who gives me the most impressive proposal to get that done gets a chance to solve it.
I hire from an international pool, often on Upwork, so I can start developers on a project basis.
If the developer does a great job, we hire him/her for another project, and so on. At some point, this becomes a full-time relationship, with stock options and other perks.
Using this approach, we value experience over "raw intelligence," per se, and we end up with a team of self-directed developers who are fabulous at delivering great finished products.
It's amazing how well this has worked out for us. I think there's an arbitrage opportunity to avoid coding tests and hire on this basis.
You do not know how many good candidates are filtered out because you have bad hiring practices.
I was tricked into a code golf challenge which was a hiring test. The result was good I was surprised that slacking off could get me a nice discussion, and the company got to pitch their positions. I've never done a hacker rank thingy for hiring and probably never will, I loathed them in school. They do not tickle my mind nor can I scratch my itches with them.
I know this sentiment is shared by many high value employers I've had the pleasure to work with.
Despite how hard you try, you can't get this 100% right. This is how I approached hiring:
1. Weed out the truly incompetent. A very simple programming exercise is sufficient. Keep in mind that the goal of the exercise is not to identify a great programmer, but rather to identify those who can't program at all.
2. Set expectations. During the interviewing process, try your best to work out what you would expect from the individual if hired. Would you expect them to churn out a ton of quality code? Do you expect them to be great at determining business needs and writing less code, but code with a high impact? Is this going to be your go to guy for technology X? Do you expect your junior person to learn Y and Z so they can start contributing after N months?
3. Communicate your expectations clearly. Make sure the candidate knows what's expected of him or her. Towards the end of the interview discuss how they feel about those expectations. Ask how they plan on going about meeting them.
4. After hiring: If you get it right great, if not, let the person go sooner than later. You do yourself and the individual a great disservice if you try to turn them into something they are not. Don't try to turn a lump of coal into a diamond. It's a trap. It doesn't work. They will be unhappy and resentful if you try. Nobody likes to be fired (or do the firing) but you have to tell yourself it's best that they get back out there and find the job that they can be happy and successful at.
All this discussion is spot on. The problem is all these startups now think they are FAANG companies also. You're not Google dude and you're probabaly passing on great hires and making the hiring process harder on everyone.
We recently did a bunch of hiring. Our coding excersize was practical and involved working through some existing code that had a bug and extending it. They had to be able to state the problem back to us clearly. It was take home solutions submitted to git. It was simple to weed through candidates looking at the code for 30 secs. We looked for things like clean code and well thought out solutions. We didn't do the silly BigO optimization stuff that every company is obsessed with. We've been very happy with our hires.
The portfolio does not allow you to compare one candidate against another and the same guy I had to fire also had a great portfolio, probably like yours and was a good fit on paper. It doesn't tell you how well the person works nor how quickly the person is able to deliver. And quite frankly, no one has time to read through all your code either. And even if they did, how does reading your code help me compare you against another candidate with a completely different set of credentials in an objective way? Without understanding the context under which the code is written, it's useless - I don't know what problems it solves, if it solves any problems anyone actually had, what constraints you were operating under and what challenges you faced and how you were able to handle them. Say, if I were to give you a thousand github profiles, do you think you can realistically rank them in order of how good the owners are?
As I said, this is just not how things are done at modern tech companies and there are good reasons - hiring managers generally don't have the authority to arbitrarily bypass standard processes because hiring managers are inherently biased towards hiring someone good enough for the time being, even if it lowers the bar. So the goal isn't to hire somebody that the hiring manager feels is good enough, but to objectively compare thousands of candidates against one another in a systematic way that keeps the bar sufficiently high enough. You should understand at least what the problem is before you can criticize the solution.
Also, generally speaking, if you pay attention to research into hiring, the two things that really stand out are that 1) general abilities are more important than specific skills and 2) standardized processes outperform ad hoc evaluation. If you're asking to be evaluated on ad hoc credentials that cannot be objectively compared to others (most people's best work cannot be shared) - you're asking people to forego processes. And that is simply not known to work very well, mainly because it's not evidence-based. Your unique set of accomplishments that cannot be compared is not known to correlate with any measure of performance because there's no way to say, people who tend to have accomplishments like yours tend to perform at a certain level.
I also don't know what you mean by "top-shelf" corporation but I'm not aware of any top software company that doesn't basically do this - your claim to have been a hiring manager at a top-shelf corporation isn't consistent with your lack of understanding of the realities faced by top-shelf corporations where there are far more candidates than qualified due to paying well above market and the need to ensure that the bar is kept consistently high, regardless of the motivations and qualities of individual hiring managers and interviewers (unless your top-shelf company isn't actually a software company, in which case it's likely not top-shelf at software).
The real truth is: hiring is a crapshoot. For any position and any field. Software engineering is no different.
There is no meaningful data that any hiring process--good or bad--improves the outcome of a hire. If there were, everyone would be using it.
Instead, third-party HR monoliths have moved in and snatched up (and more or less created) the 'market' for screening and filtering applicants. Larger companies sigh, throw up their hands, and say 'well how else can we deal with hundreds of applicants?'.
As if that 'funnel' of applicants contains what you think you want. As if it's just an exercise in reductionism, each applicant a data point to evaluate.
Given this, why not hire lightly and fire lightly?
I agree. We tried using TripleByte for hiring but what they screen for and what matters are entirely different. A founder we knew got an angry missive from one of the TripleByte founders because they’d rejected candidates during a final culture screen. Apparently the only qualification should be whether the candidate can do contrived coding tests and programming jeopardy, but whether you actually want to work with them is beside the point!
The process Amazon and many other tech companies use is fucking terrible. Algorithm tests and surprise CS 101 questions do not identify good employees. They're biased towards recent grads, do not address most real world situations, can be gamed through studying, and do not identify people who can actually think. You should not be testing for people who interview well, you should be testing for people who will make good employees.
You need to test real world scenarios. If they're going to be re-implementing bubble sort and doing binary math then fine, use HackerRank. Otherwise you need to have candidates work on a project based on what they'll actually be doing. Will they be working on APIs? Have them build or integrate with an API. Mapping in an iOS app? Have them do that.
Do not drop big surprises on candidates. Respect them and they will respect you. Tell them what to expect up front. The first email we send includes an outline of our entire hiring process with a list of each step. I've lost track of how many people have thanked me for this. Going through an interview blind is extremely stressful and increases the likelihood of losing good candidates.
My goal is to set people up for success. If their skills match what we're looking for I want them to succeed. I don't want them to fail because they are bad negotiators, didn't have time to study CS questions, or don't fit the typical stereotypes of a programmer.
reply