The primary issue with the current technical interview style is this: No one likes working on a problem with someone watching them constantly.
Most companies are underestimating the power of social presence. Just knowing that someone is watching you makes a huge difference. Imagine there are two people taking a high pressure test like the SAT. In one version, it's the normal setup, a room with a desk and silence. In another, there is someone constantly watching your paper and everything you do. Put yourself in that position and it's obvious that the second situation is much more stressful.The effect is not limited to physical presence, it can also happen over a phone interview with screensharing. Consider all these thoughts that a candidate is probably thinking while trying to solve the problem: What's this person thinking? Am I working too slowly? Should I type code faster?
Is this solution what he/she is looking for?
Should I talk more? I'm not sure what to say, ok stop panicking, just focus on the problem. Should I say I'm focusing on the problem? The problem is not the whiteboard. The problem is that there is someone constantly looking at the whiteboard. The solution is simple and I'm surprised that I've never seen a company try it. Give the candidate a big whiteboard or a laptop with no network connection. Give a problem and leave the room.
Come back later. When depends on the size and scale of the problem.
Put the code on a projector and get other engineers in the room.
Now discuss the code. Run the code through some sample data. Make some criticisms and see how the candidate defends their decisions. It's like a long code review session.
Digressions are ok. Maybe talking some data persistence will lead to a discussion about caching. Maybe asking why the candidate did something will lead to talking about concurrency. A bad candidate can't BS through this. They wrote the code, they have to either explain or defend it. And the way they talk about things also gives a chance to show their level of experience. The way a junior dev talks and a senior dev talks is very different. The key thing is, let the candidate have some time alone to work. Stop pressuring them with having an engineer there constantly. The engineer doesn't like it because they would rather be working on something. The candidate doesn't like it because it's stressful. And there's no benefit to having someone there constantly. You don't need to hear their thought process in real time. You don't need to see the iterations they went through before the final solution. If you really want to know, you can find out all these things in the discussion session afterwards. |
It's a bit of an art to come up with tasks that let you accurately rank candidates.