Redesigning the Technical Hiring Process
jeanhsu.com
jeanhsu.com
They hired the candidate as contractor on a one-week term. He paired with the senior members of the team and worked on the code base from day one. He started as a full-time employee two weeks later.
Another thing is that companies like Google or Facebook can't seem to afford this, they prefer false negatives, bad for them.
The fact that Google produces "pretty decent" products doesn't actually tell us whether their famously stringent comp sci trivia quiz system produces any better results than, say, throwing a packet of resumes down the stairs and hiring the ones that land face up.
You suspect that one could get the same results by throwing resumes down the stairs and hiring all the ones that land face up. That is a testable hypothesis. I recommend you test it and post back here with your results. I look forward to reading your report.
I work with a bunch of people that wouldn't know a tree if it fell on them, and it's amazingly painful. They write amazingly slow-running code simply because they don't even know that there's a such thing as an O(n^2) algorithm.
I've interviewed at Google and the problems they ask are great. They don't care about trivial minutia like what programming languages you know. They care that you can approach a hard problem, apply your knowledge of computer science, and generate a solution that's simple and efficient. That's the kind of codebase I want to work on, so that's the kind of interview questions I would want to ask.
That's what is refreshing about Pulse's process: you actually work on something and present it to them. This is very practical approach, and requires the use of the candidate's facilities which include, but are by no means limited to, computer-science understanding.
As an aside, I've also worked with people who have good technical skills but had serious attitude problems. Those people tend to have a very negative effect on company culture.
The Google approach is like unit testing only one specific feature of a candidate. Pulse's approach is more like an integration test.
Granted some people are still working on embedded systems and low level networking code etc, but that's hardly the default.
PS: Today I needed to break out a decompiler because a client lost the source code on a small website. When exactly does that show up in an interview?
No doubt there's plenty of money to be made in putting building blocks together and knowing how to play with some tools, but that's not the kind of employee that Google, etc., are looking for. It's assumed that if you know A* and compilers, you can also download tools from the internet, run them, and see if they solved your problem.
Now days 99+% of all developers incorporate some API as a core part of their software. Take the game industry the number of people writing direct X is tiny compared to those who use it. John D Carmack (http://en.wikipedia.org/wiki/John_D._Carmack) is clearly a "software engineer" yet he spends most of his time working on top of DirectX or some other API. Yet, when you dig into Direct X it's built on yet more API's and at the same time anything written on Direct X has a tun of boilerplate code you need to get right or it fails badly.
PS: Ruby on Rails is a perfect example of what I am talking about. By your definition anyone using it is "support" or a "code monkey" even if they start from scratch and build a billion dollar company simply because they spend more time thinking about the API than pointers.
Also, Carmack is famous for the algorithms he's designed, not for using DirectX.
But I'm a little skeptical about the statement, "And this is so much more scalable..."
Now you have the overhead of possibly paying each person for some work, the paperwork that goes along with it, the management aspect of it if it goes wrong (and it will go wrong, the fact that it didn't in 8 interviews is just the reality of a small data set), not to mention the review time for the team on each project.
I don't doubt that you get better hires out of this process, but calling it scalable is a stretch on reality for companies greater than 20.
The best interview I ever had was a project-based interview with a YC company. We spent 9 hours implementing production code using a language (python) and framework (django) I'd never worked with before. Fortunately, python is close enough to ruby that we were able to successfully complete the project.
The position was a first-hire engineering lead so the length of the interview made sense. Obviously, this isn't reasonable for a normal position, but a scaled down version is a good approach. I would have loved to accept the offer and work with them but had to go with another company in the end. I was moving to SF with my family and needed a higher salary versus mid-salary + equity.
Now you have the overhead of possibly paying each person for some work, the paperwork that goes along with it...
I wasn't paid for this work and wouldn't expect to pay a dev for a 2 or 3 hour interview, which is what I would expect for a normal position.
Now you're excluding all candidates who aren't willing to spend some time (a week?) working for what might be free. And some of these candidates will be the highly-skilled programmers you'd love to have, but who won't be willing to jump through hoops when they can easily get a job elsewhere with fewer hoops.
Comp sci "puzzles" are a microcosm of the types of mental processes needed in day-to-day development. Having the developer code on the whiteboard tests communication skills, ability to analyze and handle critiques, etc in one shot, while also testing the most critical skill that can't be learned or enforced later on.
All these "hacking interview" ideas are missing the problem. For top companies, the only problem with the interview process are finding enough good people and the potential false negatives. The process described here just turns the problem of false negatives into the problem of false positives for these companies. This really is no solution.
We need to realize that the 20-year old process designed by MSFT of hiring has been gamed and is no longer useful. Interviewing these days in the Valley seems more like a cat-and-mouse game where interviewees memorize answers to as many algo questions as they can, and interviewers try to one-up candidates by asking them increasingly harder and more ridiculous questions.
Interviewers claim that they care more about how a candidate thinks through a problem, but I know this is bs, since I've talked to people in my company who have interviewed. If they ask a question, and the person doesn't know the answer right away but 80% of the others do, the person already looks deficient in their eyes.
The process that the article talks about is probably the best way to identify good candidates, at least until this is gamed. Hopefully if designed properly though, it will be much harder to game, since you can always change the nature of the project.
This seems like a net win. Interviewees and interviewers in a positive feedback loop of knowledge. Even in a worst case where people are memorizing answers to brain teasers, at least they have to think about it and therefore they will gain some level of understanding that they wouldn't have otherwise.
To be fair, if you can game it, the interviewer's doing it wrong. The idea is to ask a question that the interviewee can complete and then work together with them for ideas on other ways of implementing it, trade-offs, demonstrating that they understand the memory and execution model of the machine, talking about how to measure performance issues or representation choices, etc. You're trying to discover by working with them on a problem in the small how they will react when faced with similar problem on a problem in the large. And while I don't claim that A -> B, I do claim not A -> not B. If they can't even talk about the memory touched during binary search, good luck putting them on partitioning an algorithm to run across multiple processors.
If you're just giving an algorithms quiz, you'd be better off just outbidding IBM on their "we will hire everyone from the top 25 ICPC teams" strategy.
A popular question to ask as a stumper is "Given a tree, how do you determine if it is a binary search tree". Either that or "convert a sorted integer array into a BST".
another way i use the interviews is to learn more from the candidates about things i supposedly know less than they do. Usually it would be a very specific details of some technology/products they supposedly have worked a lot on or with, and that i'd have less detailed knowledge about (along the lines for example - how it works, externally and internally, why would this way have been chosen/implemented , what were the alternatives back then and are now, etc...)
I was personally happy to spend my time doing it, because it was a direct reflection my abilities, and I controlled the result.
I also recently spent a short 2-day stint working with another startup team that was also very instructive. There's no substitute for seeing a team in action, how they approach decisions, collaborate, etc.
I contrast this with the full-day onsite interview I did at one of the old guard dotcoms, which was disorganized, confused, and muddled -- basically, a huge waste of everyone's time. And to cap it off, after I'd had numerous phone calls, in-person meetings, the onsite interview, and bought an SVP lunch (forgot his new bankcard PIN), I got a quick impersonal phone call from HR saying they weren't going to move forward. Needless to say, I agreed.
Redesigning the tech hiring process starts with discovery. You can't keep posting your hiring needs on HN, Github and Stackoverflow and just expect a great person to find you, read more about you, and pull a resume together for you to make your life easier. We expect you to make our life easier because we know we can work just about anywhere.
As I guess pg might say "Go to your users!" to founders looking for help making a decision, you need to go to us if you want to grow your team! We're real freaking people who hate creating a BS piece of paper for you that means absolutely nothing. Find us in person and spend time with us so we can skip this resume crap and focus on actually building things that we both actually enjoy.
Speaking for myself interviews are always much easier when you already have a job and always more difficult when you really want to work where you're interviewing - just an aspect of self-inflicted pressure.
The particular way they're doing it is also a legal nightmare. If they use an applicants work there's a good chance that applicant current employer might have a claim over that code. Even if they don't use the work, but later build something similar themselves what's stopping the applicant suing them over it ? - it's not going to happen today, but if your startup is successful one-day you can bet you'll face lawsuits. Essentially you should avoid having the candidates work on something directly related to your product.
Also if you're going to take this approach it's a good idea to have a standardized project that every applicant does, both because it ensures fairness when you're comparing candidates and because it's much easier to defend if you face a discrimination lawsuit.
The thing I really don't want to experience, ever again, is to be dropped into a horrendous project that nobody else wants to deal with, usually with an assignment along the lines of "nobody ever wrote tests for this - writing tests is a great way to learn a code base, so write some unit tests for this monstrosity", usually followed by a chirpy "Ping me on IM if you get stuck!"
If I were able to contribute meaningfully to a code base during my interview, that would give me a lot of confidence that I'd be able to succeed on the job and enjoy my work day.
The downside to this is that even very a very well organized code base often runs into a glitch that takes a couple hours to debug, and if this happens, you have a new candidate sitting next to a programmer muttering to himself as he messes around with config files trying to figure out out why the paths are all broken.
But often the work I'd be doing has very little to do with the preparation I did for the interview. For this type of work I've found that a programing project is a much more honest assessment of my skills. And this is good for both the employer and I.
1. Hire remotely in any country and region of the world 2. Don't even look at the resume 3. Give the candidates a short but difficult unpaid development test 4. Everyone who passes this initial test gets a job to work on a real project 5. Everyone we like from the work on the project continues further to work part or full time.
The most important way to evaluate programmers is through getting to see them programming something.
> 3. Give the candidates a short but difficult unpaid development test
> 4. Everyone who passes this initial test gets a job to work on a real project
What happens when only the desperate bother with your difficult, unpaid dev test and none of them pass?One way this would work in large companies is if they give the hiring power to individual teams/groups, and then those teams can conduct interviews like this on need to hire basis. But this would require a major shift in how hiring is done in large companies these days.
1) Phone screen (1 hr) 2) Give them a project to work on over a weekend(0 hrs) 3) Have someone go through the code (1 hr) 4) Bring them in for lunch, and then a demo session with Q&A (1 hr for lunch and 1 hr for Demo/Q&A x 2 engineers)
This seems like it would scale much better. The person who reads the code can say yay or nay to the demo session, and then whoever is involved in the demo session (probably 2 engineers) can ask questions throughout the demo. Total time would be 5 hrs and I think you would get a much better feel for the candidate afterwards.
Yes, if you are small startup, it is possible. But imagine companies like Google, Microsoft, Facebook, Adobe, Cisco etc with over 1,000 positions per month. Add cost overrun. Add team members taking time out of their regular work to manage the temporary projects. And plus, this model will not work if the candidate is currently working elsewhere.
Great concept but not practical if you are large company.
I've been working on a side project for a few months now and it got me thinking about how I'd like to hire programmers if the need ever arises and I had sketched out something (in my head) that was eerily similar ...
I think this is the way things should be done, I want to see how the potential hire actually does the job, integrates with the team and deals with other things like version control, getting setup with a database type they may not be familiar with.
It surprises me when companies hire devs (and pay them lots of money) without ever seeing them code.
My favorite is that, "I would probably Google it," usually means instant disqualification when discussing any problem solving. This, of course, is ridiculous, since the very first thing I'll do is heavily research a subject before implementing it. I want to stand on the shoulders of giants, not sit around building sand castles.
[1] At least to the extent that the public is concerned. It is possible that some skunkworks operation has solved it in secrecy.
Alternative: it's a completely contrived problem. Interviewers really don't like it when you point that out, though. :-)