Day 3
TDD
Matteo presented a “Bowling Game” Kata, to show how TDD works, in very small steps. After the Kata, we ran a Randori, where we tried to write a roman-to-decimal converter. At first, the team made some progress, but then got bogged down by the combination of unfamiliarity with java, TDD and the difficulties of the problem. I’ve now participated in a few Randori’s and I’ve seen this pattern a lot: people get into trouble and try to program themselves out of trouble, thereby making the situation more difficult. What can we do when things bog down? Step away from the keyboard. Revert back to the last working situation, erasing all code that was written since then. Take a break. Draw something on the whiteboard…
Meanwhile, Jacopo and I sketched out different approaches on a (paper) notepad. We tried simplifying the problem by breaking it in two parts; we tried a data-driven approach with very little logic; we tried a more algorithmic solution; we went through the data backwards, then we tried to go through it in the other direction. Programming problems have lots of solutions, each with their advantages and drawbacks. We explored several alternatives on paper and in our heads. We were the final pair in the Randori and finally implemented the algortihmic solution the team had embarked upon, despite the weird Italian keyboard, which seems to hide the { and } keys 🙂
During the lunch break, I wanted to see if we could do a simple Ruby implementation, without any loops or ifs. Of course we could! I haven’t been programming lately: getting people to follow a waterfall methodology takes up too much of my time. I realized that I still like to program. TDD (or should I say BDD?) is the fastest and most fun way I know to write working software. These little Katas are great exercises to explore different ways to solve problems. On the train from Milan to Geneva (read more in the next entry), I worked some more on the Roman numerals and on a Sudoku solving program.
Oops
During the Randori, we noticed that few participants had experience with java, the programming language chosen for the course. This could pose a problem during implementation. Pairing with people who know java helped, but we still lost a lot of time with the complexities of the java libraries (who invented java.util.Calendar and what were they smoking?) and infrastructure (web server, database) that we didn’t really need. Time to adapt again: we focused on the domain code only.
XP in Milan
Matteo, Luca, Allesandro and I went to Milan to meet with the local XP User Group. We talked about the activities of both groups, how we’re organized and the state of agility in Belgium vs Italy. We continued the talk at a nearby Chinese Pizza restaurant, were we had a mix of pizza and Chinese food.
Some members of the user group volunteered to pair program at ESSAP, to add a bit more java experience. On Thursday and Friday, there were lectures on acceptance tests, continuous integration and retrospectives. Of course, ESSAP ended with a retrospective and a party.
Read more about ESSAP.
Ciao!
Ciao Jacopo, Luca, Alberto, Francesco, Alessandro, Davide, Andrea, Piero, Matteo, Sergio, Federico, Alessandro, Alejandro, Uberto and the members of the Milano XP UG. Hope to see you again. In Italy, Belgium or at one of the fine agile events around the world. Hint: if you like beer with your agility, don’t miss XP Day Benelux in Mechelen.
I couldn’t stay for the whole course. On thursday morning I was off to Geneva, to meet with Freddy Mallet of Hortis.
Hello Pascal, thank you for being with us! It’s been a lot of fun and I hope we’ll meet again soon.
We plan on doing a 2007 edition; international participants are welcome. We’ll speak English. Promise. Most of the time 🙂
Matteo,
as a guest, it is my duty to lean enough Italian to understand and to be understood.
The most difficult part was in the discussion about the stories. During story writing I was least able to follow, yet would have had the most added value in coaching. Writing stories sounds deceptively simple, but it isn’t. Really understanding what the customer needs is hard work.