What’s a good interview question? Ask yourself what you’re trying to accomplish. Do you consider an interview to be a high-stakes event? It sort of is. You have a rec open, You need to act while it’s still open. And your rec is an investment. You want to figure out if who you’re interviewing has the skill set you need for the rec.
But you also have to be human. By “thinking like a human”, you can anticipate the troubles of a candidate (whoa, empathy in an interview?! Yes.)
My view is that an interviewer must carefully choose and craft his or her questions to an interviewee. Consider:
- Clarify your “Candidate Specification”
Who do you want to hire, and why? What is he or she doing, on a day to day basis, for the next 6 months to a year? Take the time to canvass your team and your superiors to gain a strong familiarity and orientation of the topic.
- Consider what skill or quality your question attempts to reveal.
Carefully analyze your question. Brainstorm about what it attempts to reveal. Some questions are intricate, and can reveal a variety of qualities about a candidate. Others are straightforward, and not beg for much commentary. Does it fit in your timeframe? Is it too hard, or too easy, for the role it seeks to place? Discard it if none of the questions help your initiative.
- Is it clearly articulated?
Your method of presentation is essential. If you haven’t practiced this question with a colleague to work out any kinks, you risk overwhelming or frustrating your candidate, for no good reason. Practice your technical or theoretical questions.
Does Fizz Buzz match the criteria?
For an automation engineer, let’s consider if Fizz Buzz matches the above criteria.
- Create a list from 1 to 100
- For each item in the list that is divisible by 3, print “fizz”
- For each item in the list that is divisible by 5, print “buzz”
- For each item in the list that is divisible by both 5 and three, print “FizzBuzz”
def main(): xs = range(1,101) map(fizz_buzz, xs) def fizz_buzz(x): if x % 15 == 0: # Requires commentary... result = "%d\t%s" % (x, "FizzBuzz") # do not use tabs like me elif x % 3 == 0: result = "%d\t%s" % (x, "fizz") elif x % 5 == 0: result = "%d\t%s" % (x, "buzz") else: result = x print result if __name__ == '__main__': main()
I’ll apply my own criteria to this:
- We want an automation engineer. An automation engineer is is a coder. Since they are coding most of the time, we would prefer they have the following qualities:
- The ability to distill a process explained in plain English into a sequential set of steps
- The ability to check for edge cases
- A high level of familiarity with some particular programming language, as an indicator of experience
- The ability to articulate how the program works, and why certain decisions were made for its implementation
- What does this question reveal?
The same set of attributes above. You see, these are actually the same specification! As they should be.
The only way to nail this is to air it out. Fizz Buzz’s “specialty” as an interview question is that it gives an interviewer the opportunity to see how closely an interviewee will analyze the problem to detect the edge case. If you check for divisibility of 3 in your first conditional, you’ll short-circuit and not be able to check for divisibility of both 3 and 5 (whether you do this by the modulus operator or not is irrelevant here). Is one such question a good indicator of an interviewee’s skill? No way.