As part of the interview process we initially ask the candidates to do 'FizzBuzz' nowadays the percentage of candidates that can correctly answer FizzBuzz has increased dramatically - this may be due to it's popularity on the web.
About a year ago, as a second question we began asking a question very similar to the original FizzBuzz. The question was designed to be as simple as the original FizzBuzz, and to also assess a particular ability of the candidate, specifically the ability to order and prioritize in a meaningful and logical manner a set of "business rules" that have been provided in some arbitrary order. The wording of the question initially seems slightly ambiguous, which may make it difficult for non-native English speakers, but if thought through can be correctly resolved - Also it gives the candidate the opportunity to ask questions for clarification, which is always a good thing.
We find this a very important skill to have as a developer, as software development is typically based on functional requirements that are derived in no particular order over time, that may place constraints and conditions upon other areas of the software without explicitly indicating and it is the job of the astute developer to at the very least investigate potential issues and conflicts with regards to the implementation.
What we found was that a little over 65% of the candidates (sample size of 38) that passed FizzBuzz completely failed FizzBuzz v2.0 Normally these candidates would be detected later on in the process, but it seems to be a nice way to detect them early on.
My question is not about whether or not FizzBuzz is outdated, but rather what factors could be contributing to such a high number of candidates failing the FizzBuzz v2 question.
- Is the question too ambiguous?
- Does the stress of an interview environment decrease ones ability to think critically to the point of not being able to complete such a trivial task?
Question:
Write a routine in your favourite programming language that will take a list of strings as input, and for each string in the list will do one of the following:
- Print only Fizz if the string contains the letter A
- Print only Buzz if the string contains the letter B
- Print only BuzzBuzz if the string contains both A and B
- Print only FizzFizz if the string does not contain both A and B
- Print only FizzBuzz if the string contains only one A and only one B
Some typical questions asked by candidates are:
- Should it be case sensitive?
- Does "contains A and B" mean A should come before B
- What should be printed if none of the points are met?
- What should happen if more than one condition can be met?
We found that the overwhelming majority of candidates that successfully completed the question, didn't ask anything at all they just did it like they did FizzBuzz.