Kata Level: 2
1° Focus: TDD By the book
Time: 60 minutes
Challenge: After having just done a CodeRetreat the previous day I was feeling a little inspired for encouraging self-organization. A majority of the group wanted to do TDD by the book again, with Fizz Buzz.
Result: Five pairs.
Discussions: The discussion started at the beginning as to if we start with another code problem or do FizzBuzz. One developer was tired of doing FizzBuzz, everyone else was game for or wanted to do FizzBuzz. We had a brief discussion about how the "problem is the lie". Asking ourselves what do we want to get out of this? Do we want to become better at solving problems or at TDD? There was mention of one participant's Japanese Akido sensi's comment about "Americans, you practice something four times, think you get it and want to move onto something new." At the end of the kata sync, everyone agreed that they were happy they did FizzBuzz, because it allowed them to focus on doing TDD and NOT the code problem.
It's an important point that is too easily missed. Assuming you are not practicing how to solve problems better, in a kata the problem is the medium with which you are practicing something. The whole point is that you don't have to spend any brain power on how to solve FizzBuzz, you can concentrate on practicing the focus. Everyone agreed that perfect TDD form, following Kent Beck's three rules, doing the simplest/dirtiest thing possible and implementing then refactoring keeping green is hard. E.g. it's easy to throw a punch. Throwing a perfect punch is a bit trickier. Throwing a punch with perfect hand position, fist position, wrist position, forearm extension, arm extension, shoulder movement, hip weight transfer, feet placement and position...etch. I can go on and on. Anyone who's ever tried to perfect/work on their golf swing, batting, contract bridge, water color painting...can easily relate.
In a kata, the "problem is the lie". The coding problem is just the medium with which you practice something. It has to be sufficient to facilitate the practice, but shouldn't be big enough to distract from the focus. I've used FizzBuzz to practice things like Strategy Pattern, µObjects, microservice Need pattern in AWS, learning Elixir and many other things. The problem is irrelvant to the learning.