Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

By standardizing the hiring process aren’t you then just optimizing for a very specific perception and/or perceptional ability? Isn’t that at the core of principles relating to diversity in the first place?

I personally find some of the current (if I can call them) standards of tech hiring to be very narrow in which skills and capabilities they test. It presumes a lot—particularly that one has time and resources to commit to spending time studying enough of the spectrum of CS subjects in order to pass a given question from the rather large field. (By this I’m referring to the classic “white board a <somekindof>sort algorithm purely from memory” process that has become the de-facto standard)



> I personally find some of the current (if I can call them) standards of tech hiring to be very narrow in which skills and capabilities they test.

What would you propose as an alternative?

I’ve been involved in training new engineering managers how to hire and interview. Everyone starts with the best intentions, but reality quickly forces some compromises.

The bottom line is that you only have a number of hours in which to evaluate the candidate. The longer and more comprehensive you make your interview processes, the stronger signal you get. However, the longer your interview process, the more you’ll find people dropping out of the hiring pipeline due to lack of time or willingness.

I’ve worked with companies that tried to implement week-long paid interviews where candidates pair with employees to solve real problems. It’s great! But only when it works for the candidate. You can’t realistically expect busy professionals to take an entire week off of their current job to spend time with a company that may or may not hire them. Monetary compensation only goes so far when you’re forcing someone to choose between spending a week of their vacation interviewing with your company or spending a week taking their family on vacation.


> What would you propose as an alternative?

Easy. Just talk to people as would-be peers. They want to find a role they can succeed in. You want to find someone who can succeed in the role.

I interview by just talking about their past projects (based on resume). You can't fake your way through a friendly technical dialogue if you haven't done it. (Pre-requisite: the interviewer must be technically competent. This is where many companies miss. Algorithm puzzles won't make up for it.)

Also it is important to describe the role and expectations in detail. Nobody (really: nobody) wants to get hired in a role just to be let go in six months. There is no need for elaborate whiteboard algorithm dances which discriminate against everyone who doesn't have the time to memorize every possible question. Just be up front about the requirements and let the candidate decide if it's a match. They know themselves better than you ever will.


This would be my way of interviewing, at least for anyone who's not a junior.

What troubles me is that people will say this allows all your biases to run wild, but my feeling most of the time is that these biases will find a way to express themselves unless you remove humans from the hiring process entirely.


Especially when the company says they aren't necessarily looking for the most bit perfect compilable code or even that you output the optimal algo on first try. Rather they want to see how you think through problems. Well now you're back at a subjective assessment again which inherently can have hidden biases.


After failing several of these "let's see how you think" technical interviews, I've come to the conclusion that the way I think is deeply and fundamentally flawed.


> I interview by just talking about their past projects (based on resume). You can't fake your way through a friendly technical dialogue if you haven't done it. (Pre-requisite: the interviewer must be technically competent. This is where many companies miss. Algorithm puzzles won't make up for it.)

I absolutely disagree with this.

I've interviewed people who seemed incredibly impressive, both in terms of showing me actual past projects, and in their explanations of them. I've then gone on to give them simple programming exercies, the kind that people with far less experience take, and they've gotten nowhere on them.

I'm talking a two hour, "here's a computer, here's internet access, here's a setup environment, code this simple thing, which you could probably copy-paste from Stack Overflow / documentation". And they couldn't do it.

And what's worse - I'm pretty sure I could fake my way through most technical dialogues. I mean, not literally everything, but I could probably fake my way through interviews about most technical topics, and given a bit of preparation time, fake my way through most things. I mean, I could probably get caught out if someone was seriously trying to do it - but to the depth that most interviewers get, I can pass as experienced on most things.


This is what we do where I am now and it’s worked well.

You can’t pre-correct for some things, but you can for others.

Having someone speak in detail about their experience isn’t easily faked.

Having someone speak about their experience in brief and then giving them a “skill-testing question” as if they won the lottery can be gamed.


Honestly, the "coding" is rarely the issue. For most software engineering roles you generally want someone who can: understand problems, figure out possible solutions, decide on which is best, communicate why it is best and (importantly) be flexible when the company wants you to do some other solution. Meet all those requirements and you are a useful member at most companies.

I think a general chat about a broad problem and the interviewee's thought process of how they would approach it can tell you much more than whiteboarding some memorized algorithm.


Reading code is the biggest problem.

Good tests, I find, are to give them a simple piece of code with minimal comments. For example, some non-standard special purpose container implementation. Then ask them to explain what the purpose of the code could be as simply and short as possible.

Either - They'll start literally explaining each line of code without understanding the whole. - They completely miss the point. - They at least figure out it's a container of some sorts. - They'll explain technically what it literally does. - They'll give you the academic term for the concept it implements. - They'll actually explain the purpose briefly in simple words.

Those last three are good, in different ways. The better ones will also spot the bugs or performance issues in the code.


I completely agree. We had this exact discussion at work the other day.

I mentioned to a colleague that what I value most is someone who is creative. There are many candidates out there who know all the buzzwords or can discuss features of a programming language purely from memory, etc.

This can make for some impressive interviewing, but it tells nothing of their ability to use that knowledge to solve real problems, or their creativity in how they use their skill and expertise when faced with new dilemmas.

Sure, you could contest that the creative side isn’t necessary for certain levels of engineering, or that only tech leads require this as a mandatory trait, but I would argue that it is far more important than what most interviews test - rote memorization.


I'm right there with you. I am always looking for people who attack problems with new perspectives and, most importantly, can describe to me coherently their thought process and pros/cons of their approach.


"can describe ... pros/cons of their approach"

I've always tried to do that... until recently.

With a new recruit, this is the fastest way to nightmare discussions. He always emphasizes the cons of my proposals, and never admit that his proposals also have cons. To be honest, I really think he believes what he says, he seems to not see ahead of time where the blocking points will be.

I am now forced to only submit the pros, and prepare an argument for the cons, which is rarely needed. This is not a way to have good technical decisions.


> than whiteboarding some memorized algorithm.

This is not how it works! There are over 1000 problems on leetcode. Sure, many of them are solved using the same techniques but there is usually a twist and you often need to combine multiple approaches or come up with something new (to you). And then there is usually a very problem-specific way in which the problem can be solved 10 or 50 times faster. Often these insights are very difficult to come up with. The people who created these questions are actually very smart and excepting some of the questions at the easiest level it's usually a far cry from simply implementing Dijkstra from memory!


I don't intend to say that leetcode/competitive programming is easy, far from it. It is too focused on coding vs. the broader skillset that successful web devs have: working in teams, business objectives, scaling issues, etc. I think even the baseline expectations (lets say remembering how to implement a specific type of sort) are often at odds with how anyone does things in the real world - a few devs are implementing these things by hand for certain reasons but not MOST devs, not even at most FAANG jobs. So why is everyone using that knowledge as a filter?

The problem with leetcoding in interviews is that it is easily measurable but not an important metric. Focusing on someone's aptitude at skills they never use at their job means good developers get tossed aside or are forced to waste energy jumping through hoops needlessly.


True but the whiteboard algorithm problem is supposed to be the proxy for that. then maybe a systems question. I don’t do well at them. I agree that requirements are underrated.


> What would you propose as an alternative?

In my company (totally remote) we decided to automate hiring (also remote) as most as possible and we are happy with the results. We also value the candidate's time very much so we made the hiring process very straightforward. It works like this:

- First the candidates must do some online tests, which are mostly multiple choice questions. The subjects are logic, english and a specific test for the coding language. All of these tests were hand made to us and customized to our needs. The candidates spend about 2 hours in total doing theses tests, and they know immediately their score in the parts of the tests that can be accessed automatically (which are the most part)

- The candidates approved in the theoretical tests - about 10% of the candidates that applied for the job - do a practical coding challenge that was also made from scratch by us. We have looked at the available solutions in the market and thought they are too focused on textbook algorithms that are rarely used in the job market. So we made our own tests that contemplate practical problems a programmer has to solve daily in our company. The questions are NOT too complex. The objective of this step is to weed out the candidates that can't code in the language, not to get the best. We design this challenge to take about 2 hours. The implementation was a lot of fun: we use the Docker API to run the candidate's code against the automated tests we made and the score is calculated as the number of tests that passed. Using Docker means we can work with any language that runs on Linux. So far we have made tests in Javascript, Typescript, Ruby, Postgres and Elm.

- The candidates that are approved in the previous step - about 2-4% of the candidates that applied for the job - are called for an interview. Now is the time when we take a look at the candidate's resume and look at the human side of things. Given that we have very few candidates to look at and we know they all meet some minimum skills we are very confident when conducting the interviews. By now we usually have a very clear signal to tell who the best candidate is even before we conduct the interviews. So in practice the interviews are NOT used to select the best candidate. They are there just to see if a red flag doesn't show up.

We are very proud of our coding challenges app. If someone wants to collaborate on it just drop me a message. It's a Rails app on GitHub, but it probably not good enough for an open source project yet - one needs to know a lot about Docker and Rails to make it work.


Sorry, but what you've outlined above doesn't show that you value the candidates' time. You require two rounds of technical interviews before any human contact. It's asymmetrical. By automating the first two steps, you've made it so that you can waste as much of the applicants' time as you want without expending any further time or resources on your part.

Also, from experience, I've never come across a two hour takehome that actually takes two hours. Everyone always says not to spend more than two hours on it, but I can't exactly turn in an incomplete assignment.

I'm glad it is working for you, but it's not something to be proud of. Essentially what you've done is replace the standard 30 minute intro phone interview with a 2 hour SAT.


This is unfair. A typical, half-competent candidate in tech sends much fewer applications before they find a job than a typical company has to process in the same time span. So there's indeed an asymmetry here, but in the other direction - few companies could even afford to fully process every single application that comes in (not even counting the human toil on the interviewers from dealing with spam).

4 hours over two steps to get to the human part? I wouldn't mind it. Last company I successfully interviewed, I spent about 2 hours on the phone with different people + a lot of e-mail exchange, before I got to 4 hours long on-site.


It doesn't have to be equivalent, but it can't be entirely one-sided either. Two technicals are a major commitment. Even if we assume the nominal 4 hours, there's still lots of preparation that goes into taking those tests. And that's 4+ hours to get to speak to a human being assuming you pass. Otherwise, it's the "We appreciate your time," autoreply.

That's asking for too much upfront before the candidate can even decide if the job is a good fit. Job descriptions alone don't tell you much. That's where the phone interview comes in. It's a two-way street.


And, if all companies adopt this technique, that's 4+ hours per company. If a reasonably-competent person applies for, say 100 companies and expects a 10% callback rate[^], then they're dedicating 40+ hours just to do tests and "challenges" before even talking to a person. That's a lot of time to blow for a mere chance of talking to a person. I mean, I guess I'd do it--especially if I was desperate for a job, but if I was still employed I'd think twice and maybe find a way to grin and bear my current employer a little longer...

I think when your company comes up with a hiring scheme, they need to analyze it, understand and be cool with the kinds of applicants their system is screening out. In my view, most SV tech companies' practices tend to screen out the "skilled professional who's currently semi-comfortable at her existing job" and filters in the "desperately needs a job and will jump through hoops and put up with whiteboard hazing to get one." Which class of applicant does your company want to court?

[^]: I consider myself "reasonably-competent" and the 100:10 ratio was about what my last job search was like a few years ago.


If a candidate is preparing for an interview, they will not perform well at work for no test replicates actual work unless the test can recognize the general skills that a person would rely on day to day basis


> Sorry, but what you've outlined above doesn't show that you value the candidates' time. You require two rounds of technical interviews before any human contact. It's asymmetrical. By automating the first two steps, you've made it so that you can waste as much of the applicants' time as you want without expending any further time or resources on your part.

I understand this was the goal. You can either waste your company's time or the candidates' time. I don't think there's a way to preserve both. Given that your goal is helping your employer, this seems like the sensible thing to do.


That's playing the short game.

If as mentioned previously wasting candidates' time filters out the most competent people, then you're not helping your employer.

Also, I object to thinking that someone's time needs to be "wasted".


Good points, agreed.


Usually I like to take things in a practical way, if you are happy with the people you're hiring, than it's fine, and there is not much point thinking about "what if these are not the best possible people we could hire?", you just never know.

But probably a lot of people that don't make it into your company just can't be bothered to do 2 sets of technical tests with zero human contact. I can tell you that my most "successful" interview processes (there is, the ones with offers/acceptances or just the ones I can even remember the name of the company) were the ones that focus on me as a human and as a professional, the ones that looked less automated and that seemed to have taken more time trying to know ME rather than just my skills.

Not that there was no tests, there were and some went kind of overboard with the complexity, but in the end what I remmember about these companies was the conversations we had and how they were interested and knowing me.

So, like I said, if it's working for you than great, but I probably would forget your test in my inbox to be honest.


I can't lie to you, I wouldn't go through that process. Or, if I did, you'd be at the bottom of the stack for me.

Half the interview process is about selling the company to the candidate. How can I know if I want to put up with your bullshit tests if I don't know whether I'm going to enjoy working with you?

The message you're sending with more automation is simple: you will be a cog in a machine here. We're not interested in what you have to say, we're only interested in whether you're smarter than the average bear.


The effort is very considerate in terms of legality that you are not favoring anyone.

Programming or the fancy name of Software Development has sort of become the new blue collar job.


If you’re so confident about your challenge app why do you first make everyone do a 2hr online test?

How many hours do you spend assessing each candidate and how does that compare to how many hours you make them spend jumping through your hoops?




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: