Hacker News new | ask | show | jobs
by bcantrill 4311 days ago
I think a more apt title is "technical interviews suck", and speaking personally, I have entirely given up on them. (I would say that I gave up on them after two decades, but the truth is that I gave up on them a decade ago -- and I really tried hard in that first decade to develop the perfect technical interview.)

My belief has become that the only way to hire the traits that I'm looking for (high technical ability, sufficient education, predisposition to rigor, and -- most importantly -- indefatigable persistence) is by judging a candidate on their work, not their performance in an interview. (After all, software engineering isn't done via pop quiz -- and it's not even a timed test.)

The problem then becomes: how do you judge the works of someone you've never worked with before? Three ways that have worked for me:

(1) Rolodex. This is an easy way to hire reliably: someone on the team has worked with the person in the past, and vouches for them as one of the tribe. Assuming that you trust the person vouching for them, the interview consists of you selling them, not them selling you. This method has high fidelity (though is still fallible), but also suffers from obvious limitations in terms of scale and breadth.

(2) Known curricula. There are some schools where I know (or someone on the team knows) the computer science curriculum very well, and can assess a student simply by the courses that they have taken (or, better, TA'd), the labs they have worked in, or the professors that they have worked for. The fidelity of this method will depend on the school, how well one knows the curriculum, etc. -- and it has all of the strengths and weaknesses of hiring university grads. (It also suffers from serious scale problems and runs the risk of creating monoculture.)

(3) Open source. If you lead open source projects that attract community contributors, you may find it surprisingly easy to coax the best of those contributors into working for you full-time. While I know that this isn't a fit for every company, it has become my preferred way to hire: you are hiring someone who can obviously do the work (because, um, they're already doing it) and who has demonstrated interested in the problem space (especially if their contributions have come during their free time). Importantly, you are also not limiting yourself to a particular geographic area or school or company history or whatever; the people I have hired via open source are people I never would have found otherwise. And, it must be said, they have proven (without exception, actually) to be great hires. There are obvious problems with this as well in terms of scale and (especially) predictability, but I view open source as the farm system for software engineering: it's a way to find and develop talent at lowest opportunity cost.

Edit: I forgot a fourth method that has actually worked for me.

(4) Homework. When interviewing someone who I don't know and who is otherwise a stranger, I will ask them some exceedingly basic questions to assess technical viability, and then proceed to discuss the problems that we're solving and why I personally find them exciting. If they are sufficiently interested at the end of this conversation (which is really more me selling them than them selling me), I will assign homework -- which is generally to take some fixed amount of time (I have usually said no more than eight total hours) to build something fun in one of the technologies that we have built or otherwise use. (When node.js was new, this was to build something in node.js -- but more recently, it's been to build something fun with Manta.[1]) If a candidate comes back with completed homework, you each know something about the other: they were sufficiently interested in you to actually play around (and they like playing around to begin with -- which is essential for us) and you now have some works by which to judge them.

[1] http://www.joyent.com/blog/introducing-kartlytics-mario-kart...

1 comments

Homework is great, but only if a job offer is guaranteed if submitting a sufficient project. It is hubris to think someone will care enough about your company to spend 8 hours of their time for the small chance to be hired. Presumably you are giving the same assignment to a handful of other candidates. You are simply outsourcing much of the investment of hiring to the candidates. This is simply unethical (one of many tests for ethics is "if everyone did X, would the scenario be tenable"--in this case the answer is obviously no).
It's not a small chance at all -- and it only comes after a conversation where I have done basic vetting and where I have explained why the problems that we're solving are exciting to me. (That is, if you're not ginned up to do the homework, I haven't done my job -- or it's not a fit.)

And as an aside, your test for ethics is entirely asinine, as it renders anything of sub-infinite scale unethical. (Among its more obvious failings, anyone who chooses not to have children is behaving unethically -- as is anyone who has children, for that matter.)

> And as an aside, your test for ethics is entirely asinine, as it renders anything of sub-infinite scale unethical.

That's not his test, that's Kant's Categorical Imperative :)

Homework is going to put a bunch of candidates off unless its a short amount of time (~5 hrs) and as an alternative to taking time off of work to go do an in person interview.

I know one guy who did 30 hours total of interview investment, where a bunch of it was homework and was eventually not hired because he wasn't 'passionate' enough about payroll software! You don't want to waste your time doing such shit so you quickly start refusing long homework projects. Your in demand and you have better things to do with your time.

  And as an aside, your test for ethics is entirely asinine
To me, "if everyone did X, would the scenario be tenable" sounds like a less fancy way of saying "Act only according to that maxim whereby you can, at the same time, will that it should become a universal law."

That is to say, Kant's Categorical Imperative [1].

If you consider it asinine, I could introduce you to a lot of intelligent people you would think were asinine.

[1] https://en.wikipedia.org/wiki/Categorical_imperative

Of course small is subjective, but I would consider, say, a 1 in 3 chance to be small in this case.

>test for ethics is entirely asinine, as it renders anything of sub-infinite scale unethical

I don't see how this is so. Explain?

>anyone who chooses not to have children is behaving unethically -- as is anyone who has children, for that matter

This is also not obvious. Of course tenable is poorly defined, but there is nothing contradictory/chaotic/unsustainable about everyone stopping having kids. Furthermore, it is not obvious to me that the statement "it is unethical to not have kids (if you're able)" is necessarily absurd.