I've always worked for smaller companies/start ups with less than 20 empoyees. In my experience, as soon my employer trust me enough, I'll be asked to join an ongoing interview and expected to ask the right questions.
The first time this happened I was totally unprepared. My boss asked me to join the ongoing interview and then asked me if I had any questions for the candidate. "Do you know XML" I asked (this was back in 2007) and the candidate replied "Yes".
That was enough to give the candidate the job. I got lucky, becouse he turned out to know alot more than XML and he stayed within the company for a decade.
Since then I've done a few more of those awkward interviews. But everything changed after reading this article, I suggest you do the same, but in conclusion, knowing what you are looking for in a candidate helps out alot!
Right after reading that article I told my employer that I want to interview our candidates next time we need more developers on our team. This brought me two benefits:
- No more surprise interviews, I can be prepared.
- The candidate might become my co-worker, I can now get a glimpse on how well we'll work together.
The second bullet point is for me the most important thing I try to figure out during my interview. Other things I find important are culture fit, in this case how curious the candidate are to learn new things and their ability to pay their new learning's forward.
I ask the candidate questions about in what ways they learn new topics and trying to start a discussion about anything they just learnt. The candidates are often nervous (and so am I) but it helps to steer the discussion into something they know well and have strong feelings about. My goal with my question is to be able to answer the question: Is this candidate a culture fit?
When I'm done with my questions/discussions I'll let the candidate create a small console game (I'll come back to that) writing real code. I keep hearing about interviews where the candidate gets to solve a fizz buzz or an complex algorithm on a whiteboard, but that wouldn't answer the question: Can we work together?
Once the candidate starts coding my challange, I'm able to get a sense of his/hers coding standards, coding principles and their thought process. We solve the problem together with their design and thoughts.
The challenge is to create a console game in five steps, each step changing the rules of the game (almost like real world programming).
Step 1: Create a console game with two players. Each player take a guess on number between 0-100. The player that is closest to a random number between 0-100 wins.
Step 2: Add three guessing turns (on the same random number). If a player guesses the right number they win, otherwise the closest player on the last guessing turn wins. After each turn the game should give a hint on who is closest.
Step 3: Add a choice to start the game with 2,3 or 4 players.
Step 4: Change number of guessing turns depending on how many players:
- 2 players, 5 turns
- 3 players, 4 turns
- 4 players, 3 turns
Step 5: Change the random interval depending on number of players:
- 2 players, 0-100
- 3 players, 0-250
- 4 players, 0-500
As a final challenge, I let the candidate to redo step 5, but with code that I have written.
After this I'm able to understand the candidate's thought proccess and how well he/she understands code that has been written by someone else. I'm also able to answer the question: Can we work together?
I've given you an insight of my process when interviewing. It may not be perfect in every case, and I might tweak the details over time.
To round things up, my advice to you is:
- If possible, take the chance and take part in the interviewing process.
- Prepare yourself for the interview, know what questions you should be able to answer after the interview and design your questions and coding challenges to find those answers.
Remember that this might the first time you meet a future co-worker. Remember that you are in a position of power, avoid to use it in a bad way, that could result in a bad start on your future collaboration.