On 17th of May, we had a Code Retreat at HERE in Berlin. I was helping Martin Klose with the organisation and facilitation of the event. It was enriching experience and I highly recommend you to do something similar.
About Code Retreats
As the official website says, “Coderetreat is a day-long, intensive practice event, focusing on the fundamentals of software development and design.”
It is an event in the spirit of Software Craftsmanship where highly motivated participants gather to learn from each other, to try out different approaches for solving problems, all the while having as much fun as possible.
The event consists of 6 or so sessions of 45 minutes each. In each session participants pair with new partners, decide on language to be used and then set out to solve the task at hand. The task is usually Game of life, which proved to be simple enough to explain, small enough in scope to be tackled with confidence and being surprising open to experimentation.
The goal is not to solve the task, but to learn in the process1. It is probably impossible to solve the Game of life properly in 45 minutes. By properly I mean without taking any shortcuts and producing the code that you are completely satisfied with.
Focusing on solving the task instead of learning along the way is actually a common pitfall for the participants. This is understandable given our industry’s tendency to emphasise ideas like “getting shit done”. But in Code Retreat you are in a safe environment. After every session all the code is deleted and you start next session with a blank slate. This enables you to try new approaches without the previous attempts weighing you down.
I’m regular in Software Craftsmanship Berlin meetup organised by Martin Klose, a well-know Software Craftsman. He was also organising the previous Code Retreat I attended. After our monthly meetups we usually go for a few drinks and so we discussed organising a Code Retreat at HERE, a company I started working for recently.
After deciding to organise the event, I’ve needed to find out what is involved in organising events at my company.
This was a bit involved, but everybody was extremely helpful and supportive. After explaining what I wanted to do, my manager told me to just go for it and that he’d take care of the costs. The people from the external security company were also extremely helpful, basically accommodating every request I had. In the end all that was necessary was a handful of in-person conversations and a few emails. Combined with a bit of courage.
To be truthful, at first I was a bit worried, as the registrations for the event were coming at a slow pace. This proved to be unnecessary, as in the end we closed the registrations at our target of 30 registrants, with some time to spare. From the registrants we asked for a 15€ deposit. This was used to filter out potential participants that were not truly interested but just considered coming. All the participants that showed would get the money back, and for the people that do not show up, we would at least have some beer money. :)
Finally Saturday the 17th of May came. I met with Martin around 08:00 and a few minutes later the participants started to arrive. There was a breakfast and coffe while people mingled and started to get to know each other.
The day was off to a great start – only 2 participants did not show up, despite it being a beautiful Saturday morning2. We rearranged the table positions from classroom-style rows to randomly-positioned tables that gave off more of a cosy and relaxed feeling.
Martin presented a few slides explaining what is this all about. Afterwards the task was introduced. We went with the classic: Game of life.
It was time to start the first session. First one is going to be a normal session – no constraints were given, only pointed suggestion to use TDD with small steps to drive the solution. To break the ice and pair people in a meaningful way, everybody formed a line depending on their familiarity and experience with TDD. People on the opposite sides of the line would form a pair.
I participated as well, pairing with a guy who had much more experience with TDD and quite good Python knowledge. We decided to go bottom-up, starting with the rules. We did not get much further than rules, but it was nice session with proper TDD, good pairing style and we were happy with the code we produced.
I did not participate in the following sessions, as we had odd number of participants. Instead I was going around the room, asking pairs questions and trying to help with pointers to those that needed it. Some of course did not need help and I could in fact learn from them. This was extremely rewarding, both helping people and seeing how the pairs progressed.
As the time for lunch was slowly approaching, I noticed that the weather is nice and that we could eat on 7th floor’s balcony. This was quite relaxing lunch, sitting in the sun with light breeze and enjoying talking with interesting people. By the end of lunch some clouds were showing, so I guess we had a perfect timing. In the spur of moment we even made a group photo.
The third session came with some constraints: small functions, no else clauses and, for more advanced participants, no ifs at all. I was going around as in the previous session, getting more and more into the role. I finally managed to get over the fact that I’m not the expert, but it does not matter anyway. I just enjoyed helping people, and I could help more than I expected. It was also great joining the pair for few minutes and discussing the problem. Some were defensive at first in the presence of a third person, but in most cases that disappeared quickly.
Before forth sessions started, one participant left us for personal reasons, and so we had even number again. That ment I’ll participate that round. This was in my opinion the most interesting round, as I really like the constraint we used: “tell, don’t ask”, or more specifically no (i.e. void) return values. All the while doing TDD. I particularly enjoyed that constraint in the last Code Retreat as well.
The session turned out quit differently than I expected. Instead of programming I just talked for 45 minutes with my pair. He was explaining to me what Property-based testing is, accompanying the explanation with small snippets of scalacheck code. We went on to some other CS topics and interests. This was by far the best session for me.
We decided to combine last two session into one bigger session. This was an interesting experiment, but ultimately the conclusion is that 45 min sessions work better. Participants enjoy it more as they move faster, do not get stuck in one track and meet more people. We even had one pair that implemented the task. I was disappointed at that, as they missed the point. They admitted that they felt rushed and did not care for the code as much as they would have otherwise. This absence of real-world constraints lies at the core of a Code Retreat.
After the last session we had a retrospective about the whole event. Looks like participants enjoyed it, marking the event as a success.
After the event almost half of the participants went for drinks. This was quite nice, just chatting and making a lot of bad puns (admittedly most made by me). Some brave souls stayed till after 22:00. After coming home, I was extremely exhausted and just went to sleep.
All in all I feel that the event was successful. We had almost perfect attendance, people had fun and claimed to have learned a lot.
We had great variety of participants, cca 25% were women, there were some well-know people e.g. Phil Calçado, there were a few startup founders (e.g. Martin Scholl, my pair from the 4th session), and overall people with different backgrounds and experiences.
The list of languages the participants commanded was also quite impressive, including: Haskell, Clojure, Scala, Erlang, Prolog, Ruby, Python, Java, C#, C. And probably a few I can’t remember now.
I really enjoyed helping Marting with this event. It was rewarding and enriching experience. I also found out that I like to facilitate events like this.
If you have the opportunity, think about organising Code Retreat (or something else) yourself. Even if there is none, you can always make the opportunity yourself – you can get all the help you need on the Code Retreat website.
Finally, if you are from Berlin, join Software Craftsmanship Berlin.