I've already written a post about what I think constitutes a good interview process. So here I won't go over what questions (I think) you should ask but rather I really want to focus on how I think you as an interviewer can get the best impression of the qualities the candidate has.
Brief recap 🎓
Interviews are a necessary evil. They allow the interviewer a chance to determine if the interviewee has the skill set and mindset to be successful. They also allow the interviewee to determine if the company would be an place were they can grow and produce something meaningful. A good interview process should provide the interviewer with enough information to compare the one candidate against other candidates and the job's requirements.
However interviews are prone to stress and false positives. Every failed candidate you interview, makes you question if the quality you require for a hire decision is too high - eventually after one too many failed interviews, you will drop your standard and potentially hire someone who isn't a good fit. Hiring the wrong candidate will result in you not seeing the productivity increase you hoped for and potentially even an overall team drop in productivity.
Getting the best 🏆
People get nervous in interview situations and those nerves can make it hard to see the solution to a problem. So what we often hear is that we should put the interviewee at ease by offering them a drink of tea/coffee/water, asking how they got to the office, taking them on a walk around the office or starting them off with an easy question. All of that is great and we should continue doing it however it's all too common to then forget about this once that first question has been answered and from that moment on begin questioning the interviewee like you work for the
KGB 🕵. This is short sighted and can lead to an interviewee closing down after one tricky question, instead we need to find ways to get the information we want while allowing the interviewee to feel as comfortable as possible.
In our day-to-day development we very rarely work on one isolated task after another so why in our interviews do we follow one isolated question with another? A better approach is to use questions that flow into each other so that as the interview comes to an end you have built an app together, added a new feature or solved a particularly multifaceted bug. By using this pattern we can mimic the development process, a process that hopefully doesn't make the interviewee nervous but rather is a comforting and enjoyable experience and so put the interviewee at ease.
So if we take developing a new
feed as our feature example the steps would be:
- How to display the feed in a table
- Requesting data from an API endpoint to show in the UI
- Parsing the data in an in-memory data structure
- Persisting that parsed data
- Overcoming performance issues during parsing
- Ensuring it does what we want it to do
So in the above example we will have covered:
- Design patterns - Delegate, Notifications, etc
- Networking - NSURLSession, AFNetworking/Alamofire, etc
- Data structures - Array, dictionary, etc
- Persistence - Core Data, UserDefaults, File System, Keychain
- Threading - GCD and Operations (Queues)
- Testing - Unit testing, dependency injection, mocking, etc
When this interview is shown as the second list, we actually covered a lot of core programming topics - you probably didn't think that when looking at the first list. That's because you do this everyday in your day-to-day job and by mirroring that process we were able to get a better understanding of what the candidate knows rather than just what they think know.
As well as improving the flow of our interviews we can also improve the feedback/encouragement cycle. We all like (dare I even say, love) to be told we are doing a good job. But it would be weird to stop mid interview to tell the interviewee they were doing a good job - especially if they just bombed on the previous question. A more natural approach is rather to show the interviewee how much of that imagery feature you are developing together has already been completed. So before each question you can say something like:
Ok, so we have our feed being shown in a tableview with data that we pull from an endpoint but now we want to show the data as shown as the app opens and not have the user wait for a networking call. Can you tell describe ways to persist data?
A little long winded certainly but the start of the question is a recap of how much the interviewee has already achieved. It's especially important to do this if the interviewee has a struggled with the previous question - if I jump straight in with
Can you tell describe ways to persist data?, I'm only going to get a distracted and dishearten answer. By expanding my question with feedback, I give the interviewee a break, encourage them and still ask the question I want to.
Very few interviewees will be able to completely answer all the topics we listed above and it's important to remember that an interview is a two way process where the interviewee attempts to sell themselves to the company and the interviewer attempts to sell the company to the interviewee. So if the interviewee has failed to answer a question take a few minutes to talk the interviewee through any points they missed. This can help to jog the interviewees memory about the topic and allow them to answer the reminder of the question. Even if there is no jogging this technique increases the sense that both you and the interviewee are developing together by hearing how you would overcome the issue. It also improves the interview flow as with the introduction to the next questions described above, you can't say
so we have developed A and B if
B wasn't actually developed.
Personally I remember having been in one interview, as a fresh faced graduate, were the interviewer refused to tell me how they would solve the problem (in any detail) and it really made me question if I would have been able to grow in that position (a key requirement for me joining a company at that time) and left me with a negative impression of how they viewed their interview candidates.
Looking back 👓
So we have the following list of steps to turn your interview process into an enjoyable experience for everyone that allows you to get the best possible insight into the interviewee's qualities by:
- Treating the interview as a development task
- Providing natural encouragement throughout
- Debugging any knowledge gaps together
Now, it's important to note that by following the above process you are not asking easier questions (continue to grill away) instead you are just using the paradigms that the interviewee already knows to shortcut to understanding them better by making them more comfortable.