Coding Dojo 2
Today was the second MSFTCorpDojo I organized. Naturally we did the same kata as the first time. Three very interesting things happened this time. I've done this kata in about ten different dojos now and there are usually two different paths the design takes. But this time we had a third design suggestion that sounded promising. Instead of parsing the input and then transform the input to output we decided to aim for a solution where we updated a data structure while parsing. Might not sound that very different but believe me, it is.
The second thing that happened was that instead of doing PingPong we did Micro Pairing. Usually you only switch keyboard after writing a failing test, but now we tried switching keyboard each time we've written a test (passing or failed, preferably failed), made a test pass or refactored. This had two interesting side effects the group liked. First it meant we switched more often getting a better pair programming experience I think. Second it added a fun kind of competition where we almost competed to not have to write a new failing test.
Last, but not least, this was the first time I've ever finished this kata in a two hour dojo. Finishing the kata is not important but an interesting experience. So why did we finish the kata? Three things; We did not always make baby steps implementing. Or at least it is questionable. Sometimes we did a solution to make all tests pass that logically was more complex than the trivial change but it was less number of key strokes... I'm personally leaning toward that an important part of the session is to do baby steps and see the refactorings appear obviously even if it means doing things I know I'll delete in 30 seconds. The second thing that made us complete in two hours was probably that the design/algorithm we decided on turned out to be pretty simple to implement. The last thing is that we ended up with only one of 16 tests that actually tested edge cases that should cause an error so our implementation was very straight forward and solved the problem as long as we didn't get any bad input.