Complexity dimensions - FizzBuzz part II
Referring to the kata on the previous post, you can see how in the first minute (0:00 - 1:18), I add three tests that force me to have a correct implementation on one of the dimensions
: It returns the same number that has been prompted
.
Basically, the tests are (Input -> Output
):
You can see how the 3 -> 3
test is missing. That’s because 3 would not result in 3
, it would be Fizz
. That’s another complexity dimension
because it follows a different independent requirement that make the algorithm more complex.
During the next two minutes (1:18 - 3:10), I add the following three tests that unveil enough duplication to implement the generic algorithm for that dimension
: It returns Fizz when the number is divisible by 3
.
Two more minutes (3:10 - 5:14) and I have another dimension
: It returns Buzz when the number is divisible by 5
. You can see how I hesitate when adding the third test. I was thinking that 15 will result in FizzBuzz
. But that’s another complexity dimension
because it is the combination of other complexity dimensions
and thus, makes the algorithm more complex. That’s why I chose to go for the 20, which is only Buzz
.
I then continue combining the Fizz dimension
and the Buzz dimension
in a bit more than two minutes (5:14 - 7:41). The tests introduced to force a correct implementation are:
This is the point where the implementation meets the initial requirements of the kata:
Although the duplication is not completely obvious, you can see how prompt % 5 == 0
and Buzz
appear twice. Same thing with prompt % 3 == 0
and Fizz
. Just for the purpose to demonstrate another aspect of the complexity dimensions
concept I’m not going to stop here.