Coderetreat Turku, Finland
On 20 November Aki Salmi gave me the the opportunity to meet a wonderful group of passionate programmers in Turku, Finland. My friend and dynamic facilitator Erik Talboom was supposed to be there with us, but he could not make it this time. So I was on my own to facilitate a coderetreat in a country and a city I have never seen before.
The first surprise of the morning: almost everyone was at the venue at 8:45 when I arrived. “They must be eager to code”, I said to myself. But we waited a bit to make sure that everyone will arrive in time for the intro. And I took the time to enjoy the unusual cubical separators of the venue: hay stacks 🙂
I started the intro by using these slides. I generally explain why we gather up this early in the morning, what are the rules of the day and how the coderetreat started. I tend more and more to explain The Four Elements of Simple Design from the intro, and specify that I will enforce their usage throughout the whole day. I think the intro is the main part of the day where the facilitator sets the rules and the expectations of the day, and if done well, it is an excellent starting point for an efficient learning environment.
The first session of the day: no constraints, just explore the problem. I try to follow what every pair is doing during this session to understand what are session constraints it would be best to present. I learned this over the couple of years I have been facilitating coderetreats: the intro and the first session can make the difference between a well facilitated coderetreat and a mediocre one. In my view every group is different in many ways, and the first sessions shows what are the best ways in which a facilitator can get the attendees out of their comfort zone.
The second surprise of the morning: everyone is so quiet. During the retrospective of the first session I understood a bit of a small cultural difference: people in Finland do not talk that much; you need to engage them in conversations by asking a chain of questions. Then I understood which will be one of my main focus areas over the day: what are the best questions to ask in order to generate useful conversations.
For the second session the constraint was for the attendees to choose at least one of the following concepts: no conditionals, no loops, four lines of code per method, only one dot/arrow per line. Almost everyone chose the easy constraint: no loops. But beware, the no conditionals constraint will come again!
The third session was something that I love a lot: Taking Baby Steps. It is a session I created together with Erik and I like to use it during every coderetreat I facilitate. It is a bit more difficult to explain in the beginning because of the more complicated restrictions. Also you need to make sure that every pair has added an empty project in a source control repository, everyone has a timer on the table and that every pair understands what we are going to do during the next 45 minutes. But it is a fun session, which energises the audience.
Of course, after this session the audience was polarized: some liked it a lot and even said they would use it during their work hours, some said it was very frustrating, two minutes is not enough, and they would not use such a thing ever. Of course, both extremes are right because the consultant answer “it depends” applies here also.
After more than three hours of coding we had lunch. A quick one: in around 25 minutes everyone was chatting and having a good time. So I had to think about starting the fourth session exactly after one hour of lunch. Everyone was eager to code, I had the same feeling like in the morning.
We had a short presentation of Agile Finland made by Aki, and a short presentation of the wonderful Entrepreneur Society BoostTurku.
We then started the fourth session of the day. The pairs needed to choose between one of the following pair-programming games: ping-pong, mute pairing, evil coding, “Yes, and…”. I chose this topic because during the last three sessions there was always who kept the keyboard a lot more than the pair. And I think it was useful. During the retrospective of this session the feedback was that their focused more on the problem and they worked together as a pair, the code quality seemed better because the navigator was more involved in the process.
Then the fifth session was something I presented only a couple of times. I tried to enforce the Single Responsibility Principle by applying the following constraints: name the methods to reflect precisely their responsibilities, if any method has “and” or “or” then you need to break that method in at least two methods, no conditionals, no try/catch, one assert per test, test only one behaviour per test. This session is highly useful to present when you see that the code is not abstract enough, and the responsibilities are dissipated throughout the code. During the retrospective we had an useful and energetic discussion on how to avoid using conditionals in static languages.
The last session was simple: choose your own practice. A lot of the pairs have retried pair-programming games and Taking Baby Steps, but a lot of other ideas as well.
So the coderetreat was at the end, but not before the final retrospective of the day, or the closing circle. I asked the three usual questions, and here are together with the answers:
1) How did you feel?
- Fun x2
- Learned about tools
- Learned how to approach problems
- Most efficient when doing baby steps
- Good way to spend a Saturday
- Frustrated because we didn’t finish
- Deleting the code was annoying
- Made my life completely different
2) What did you learn?
- To approach problems in a different way
- Baby steps x2
- Think small
- Practice things
- Write useful tests
- About TDD and pairing
3) What would you apply on Monday?
- Discuss how things can be done differently
- When coding an algorithm you could do things differently
- Find what slows me down
- Smaller steps
- Will learn better my language and tools
I had an excellent time at the coderetreat in Turku and I like to thank to Aki for inviting me, to BoostTurku for hosting us and to Vaadin for supporting the costs of my trip and for sponsoring the lunch. Also many thanks to Agile Finland for supporting events like this.
Special thanks to Mozaic Works, the company I work at, for supporting me in my frequent trips to the European Communities doing all sorts of events from coderetreats, to technical games or serious games.