In the past 12 months I've gotten hundreds of applications for various software development positions and have interviewed probably around 50 people (at one point we were interviewing nearly a person a day, and in a couple months we'll probably be doing that again). When I first started out I had some hires who worked out really well and some who weren't a great fit. But throughout the whole process I've really honed in on an approach that has done a really good job at eliminating anyone who is not a really great coder, and every single person we've hired this year has proven to be just as smart as they seemed throughout the whole interview process. As a result I thought I'd share exactly what we do, so that others can skip the trial and error of hiring someone who is woefully unqualified due to a bad interview process. For full time hires we have 3-4 very comprehensive rounds of hiring. The first one involves looking at code they have already written, the second one involves them doing an online code interview (InterviewZen is what we use right now), then we do a Skype interview where we give them a fairly challenging algorithms problem (usually 1-2 hours) then we finally have an interview at our office that involves another challenging problem, usually in the artificial intelligence realm, and usually something that the applicant is very unfamiliar with. In the end we might end up spending 7+ hours on a single candidate, which can get very overwhelming (we've interviewed ~35 candidates so far this year) but for a full time job position like this it is crucial for us to find the right person - the difference between an average person and an exceptional person can be hard to tell during an interview but will be huge once they are hired. For instance a bad hire can easily cost $100k+ both because of lost salary and because bad hires can often be a net negative as they use bad practices, accrue technical debt, and require other people to stop what they are doing to clean up their mess. For instance if a programmer is hired at $70k/yr, stays for only three months before we realize it isn't working, but also requires someone else to spend two months refactoring and rewriting all of their code which pushes the launch of a product back by 2 months that would cost the following: -$21k (3 months of salary/benefits/office space/etc. for the bad employee) -$5k (Severance package to make sure everyone leaves happy and reduce legal liability) -$14k (2 months of another developer fixing the mess first developer created) -$60k (The product was going to make $30k/mo and it got delayed by 2 months) -$100k total in lost revenue just by making one bad hiring decision Even if it is only $10k in lost revenue or something like that it is a $30-50k loss by hiring the wrong person. You are losing out on revenue because the product was delayed, you lost the revenue that you spent hiring this person to do a sub par job, and you are losing the revenue you have to pay for someone to go in and clean everything up. In order to lessen the ridiculous amount of time it would take to fully vet everyone we start with things that can quickly filter people out. For instance looking at existing code or watching them do a first interview question will often times let us know whether this person "gets it" or not and takes maybe 5-10 minutes of effort on our part. The goal at the end of this process is: Do they know how to write basic code? For the Skype interview, here are a couple of lists of programming questions. We don't use any questions from this list, although what we do ask are of similar complexity to the harder questions on both. The goal at the end of this process is: Do they understand algorithms and data structures very well and can they write their own code which does something fairly challenging? Also what is their workflow when working through a hard problem? For instance we notice some people speed through writing things, get stuck, and then start flailing, while others might work very slowly and methodically always in complete control of what they are writing. One of the better candidates we interviewed a couple weeks ago practically never even hit the backspace button because he didn't write out a single line until he had mathematically figured it all out in his head. The final part of our hiring process is very important to make sure they have a fundamental understanding of computer science (and they can work through a very tough problem) and the last interview set we do at our office is important because it helps determine the applicants slope (aka how well they do handling completely new ideas). We want people who can tackle the unknown so this problem will present them with concepts that they have probably never seen before. We then sit down help walk them through it, answer their questions, and see how they do. We also talk to them get a feel for who they are, how well they communicate ideas, if they ask questions when they don't understand something, if they listen when you talk, etc. The goal at the end of this process is: How do they handle unfamiliar environments and is this the type of person I'd like to work with?