Startup Interviewing is Fucked
zachholman.com
zachholman.com
I do think that Gayle Laakman McDowell (who wrote "Cracking the Coding Interview") has written a couple of good posts on this topic.
http://www.gayle.com/blog/2015/6/10/developer-interviews-are...
It's a pretty good roundup of the various interviewing approaches, and the problems with each. I have some differences of opinion, but I agree with the overall point, which is that there really isn't a great way to do this. The in-person coding exam (I don't like to call it an "interview" because I really do think it is more reasonable to call it an exam) at the whiteboard may not be the worst of a bunch of bad choices.
Here's my main problem with all of this - it is extremely unpleasant, developers clearly don't like it, employers acknowledge that it has a very high false negative rate… yet seem to see no connection between this and their own constant complaints about a "shortage" of software developers.
I do see my friends in other industries interview, and they don't go through anything like this. Lawyers, doctors, nurses, and actuaries (among others) certain do take exams, but they take those exams under much more controlled circumstances, where well understood degree programs and study paths prepare you for the exams you will be taking (even so, many people describe these exams as the most stressful academic experiences they've gone through).
All in all, I do think that this practice deters people from becoming software developers, staying in the field, or changing jobs. It's one of those things that makes individual sense for a single employer, but in aggregate takes a heavy toll on the field.
I do think some kind of highly respected professional accreditation could solve this problem (actuaries, for instance, must pass a rigorous exam on vector calculus, linear algebra, differential equations, and so forth), but I'm guessing that senior actuaries don't have to do a tricky integration by parts during an interview. Devs most definitely do. Then again, I fully recognize that "professionalization" does come with serious risks (with a few edge case exceptions, anyone who wants to become a lawyer has to go through three years of law school at $100,000+ cost, and many many people feel this is excessive and is really there for regulatory capture/cartel building).
Again, there's no perfect answer. My only thing I can say with real conviction is that companies that engage in this kind of interview exam, accepting that it is stressful and produces a high false negative rate, really need to stop scratching their heads about the "shortage" of good candidates. I find that a little hard to take. I accept that there are good reasons to do these exams, but you must understand the role you have played in your own shortage when, by your own admission, your process weeds out lots of good candidates.
And one other thing - whatever the process, employers should not look for ways to push the inefficiencies of the interview process out onto the candidate. Although I just didn't study enough for my google interview exam (and who knows, I may not pass even if I took 6 months to study), Google clearly spent the valuable time of its own engineers to interview me. I've done a take-home exam where I spent 8+ hours, and honestly, I received so little feedback I have no idea if they even read it, it was a one-line brush off a full month later ("we've decided not to proceed with your application at this time.").
Another good post from Gayle McDowell on this one:
http://www.gayle.com/blog/2013/09/18/companies-who-give-cand...
That I won't do anymore. It has cost me some opportunities, but I do sort of feel we need to make some kind of stand as a "profession" (it is very difficult to make this stand as a scattered collection of individuals, which is why I put "profession" in quotes).
Our process here is:
1. Non-tech phone screen 2. Tech phone screen 3. Homework 4. Onsite
The onsite is, to many candidates, surprisingly light. This is because the homework makes up most of how we're evaluating your tech skills. The onsite is just to make sure that you wrote the code you submitted, and then to test your non-coding skills (architecture, communication, working with non-engineers, etc).
But we do lose some number of candidates who just don't get around to doing the homework (or possibly, as you do, refuse to do it). This worries me, since I suspect the people least willing to do homework will be the most senior and/or those with the most competing offers.
We've recently started experimenting with allowing candidates to chose between homework and a code sample. The idea is that a sufficiently complex and interesting coding sample should tell us about as much as coding homework. It involves more time on our part to evaluate it, but less for the candidate to prepare it. The early results have been mixed (a lot of unsuitable coding samples), but we're iterating on how we ask for coding samples to try to get better quality ones.
Some were larger than others, some were very simple and straightforward while others were more amorphous.
I would also chime in to agree with @trek. I've followed the careers of people my teams have passed on, and they're almost all wildly successful. I've been happy with 75% of my hires. I obviously haven't figured it all out, and my teams have definitely let some good ones slip through.
Surely we can do better.
It reminds me of an observation I read the other day. Paraphrasing: "When I am an applicant, I think I'm being interviewed by geniuses. When I'm the interviewer, I'm ecstatic if they can write 10 lines of code."
Ain't that the truth.
His idea of pair programming as interview is actually pretty good. However I would stress that there is no such thing as bad interviews, just bad interviewers. I've seen cases of "one secret right answer", "question with hidden land mines" and "irrelevant puzzles that you would never need to solve on actual job". My favorite strategy is to think of some problem I solved myself as part of the job, abstract it out a bit and see how candidate would go at it. This makes things very relevant, allows me to compare candidate's thinking and performance with my own and avoids asking popular chewed up practice puzzles. The problem is that this puts a burden on interviewer to first think of great problem they had solved and then nicely make it simple, interesting and friendly question. This is much harder than looking up one of the irrelevant popular puzzles asking one of them.
What about the rest of us, who don't have "star-power" or anywhere near the kind of platform that Zach has? If you're just Joe (or Jane)-average programmer, yes, startup interviewing is fucked. Doubly so if you don't live in SF or SV.
From my time at /r/cscareerquestions, LeetCode is the "hardest" and thus the best for top companies. HackerRank is good but every challenge requires parsing STDIN instead of just giving arguments to a function the user writes. It's very annoying to me and a deal breaker, especially with certain languages.
A lot of these interview questions are 'crap' but designed to be solvable in 20-30 minutes and not require hours of domain specific knowledge. In other words, it's something _anyone_ with _any_ degree of problem solving skills should be able to solve.
Onsite interviews should consist of working with another engineer to look at a real problem the company is dealing with (or was dealing with in the past) to see how the interviewee approaches the problem and tries to solve it. It's not about reaching a solution per se, but rather how well the candidate works with the team and if her approach is the correct one.
Eh, he built that platform. Not sure I would call it luck or privilege.
This is apparently a pretty common question. I've always wondered where it would apply in the real world in my field, maybe someone can help.
It's more of an ego/race/etc issue with some. I've had instances where luckily I read, typed & memorized the interview algorithm the night before, which I regurgitated on the white board. Only to to be "pfffft that will never work" by the interviewer.
It's probably a common question because it's a common CompSci homework problem.
I care way more about personality than technical skill. Technical chops need to be adequate for sure, but anything above that is just a bonus. If you hire the right personality, adequate tech chops is just a temporary problem.
How the Other Half Works: an Adventure in the Low Status of Software Engineers https://web.archive.org/web/20150919055214/https://michaeloc...
Zach Holman would be particularly interested in that article since it was written by someone who promotes the idea of Open Allocation (i.e. companies without managers)—which is how GitHub used to work when Holman was there.
It's only when you see the bullshit side of managerial status that it becomes apparent why Engineering interviewing is fucked.
As Zach mentioned, quite a few interviewers like to use recursion-based puzzlers, and I actually enjoyed those - I seem to have one of those brains which is wired up for understanding recursion. On the other hand, I'm actually more drawn towards the product/UI side of things than the hardcore algorithmic tech innovation. These days I rely much more on discipline than on natural talent.
Mostly though, startups have made it a really amazing experience. They have made a real effort to fit the misfits and I owe my career to them.
And it's probably someone not too dissimilar from myself. What a coincidence!
From 10,000 ft we probably hire like the McDonalds down the street. Or that law firm downtown.