Balkan Coderetreat in Sofia
A couple of months ago I contacted Stefan Kanev to ask him if I could attend a coderetreat in Sofia. My main concern was not to bother all the attendees to speak English just because of me. What happened was that instead of attending a coderetreat I ended up facilitating a coderetreat in Sofia, and a rather special one.
Then I started chatting with Stefan and we ended up with the concept of Balkan Coderetreat. We want to create a type of event that will be organized in different countries in the Balkans. Why? Because there are not enough events for programmers around here. And one more reason: people from different countries and cultures would meet and share their knowledge and ideas. This idea is in the spirit of the ALE Network which I support as much as I can by being a bumble-bee, cross-pollinating ideas in the local European communities of Software Development. I would like to see this event happening in one of the Balkan countries each 2-3 months, organized each time by someone else. This would be in the spirit of a community of professionals that care about what they do and about sharing and learning, cross-language, cross-cultural and cross-border. I intend to support this event being organized again in a different country sometime in January.
We setup the date for the coderetreat on 27 October 2012 and then Stefan created the website where people could register for the first event in his home town, Sofia. We did not have a lot of people registered at the beginning, but we ended up having around 26 people registered. We did not have enough time to make the event known in some other countries around, but we tried to do that in: Romania, Turkey, Macedonia, Serbia, Croatia, Hungary and Moldavia. We had two people registered from Serbia, but unfortunately they renounced to come in the end.
I made hotel reservations and drove to Sofia, for the first time ever, on the Friday before the coderetreat. The drive was lovely and relaxing so I was in a good mood for the day after.
On Saturday morning Stefan picked me up from the hotel, and with this occasion we actually met; before we had just talked on Twitter, email or Skype. We arrived at our host for the day Software Society. We needed to rearrange the desks and everything so that all the people would fit. And one after another they came, the room was packed with passionate programmers wanting to code.
At around 10 I started the intro of the coderetreat which, amazingly, lasted exactly 15 minutes. I guess I start being good at giving this intro speech…
The first session was, as usual, a free one: just explore the problem, see what you could find out. We had a lot of developers doing Ruby, Python, and just one pair doing C++ (the courageous ones!). During the retrospective I saw that everyone was energized and I felt it as a good thing.
Then I decided that the second session will be focused on the Single Responsibility Principle. Why? Because I saw a lot of responsibilities passed around in the code without any sense. And it was good the everyone was so energetic so they could figure out how to respect the following restrictions: When the method name has “and” or “or” then split the method, No conditionals: ifs, switch, etc, No try/catch, Exactly one assert per test, Test one behaviour per test. During the retrospective there was a lot of talk about using or not conditionals, and how could we program without them. As almost always, I did not give answers but I rather asked more questions to make the attendees experiment more on this topic.
Clearly after this session we needed something to help the pairs work better together for the third session. So I presented the pair-programming games: Ping-pong pair programming, Evil coding, Mute pairing, Beginner’s mind. Almost everyone chose ping-pong, a couple evil coding and only one pair chose mute pairing. Beginner’s mind seems something rather difficult to digest in the beginning, so it seems. After the session ended the general opinion was that these are really useful, even in real-life coding when you are on o project. Some of the pairs said their productivity increased a lot because they were able to focus better.
Of course after three hours or so of work we needed a break for the lunch. And so we had one relaxing hour of lunch, after which we started again with another interesting constraints.
The fourth session was something really useful after the lunch, that reinvigorates the attendees while they fight with the force of digestions: Taking Baby Steps. This session was something really different for everyone. Around three quarters said they liked it and they would apply it in their daily jobs, and a quarter said they did not like it, but it was interesting.
As a blow to make things even harder I presented TDD as if you meant it as the fifth session. This one was, as always, the hardest one. I needed to help the pairs in an active manner, giving advices and reinforcing the rules a lot of times. For the beginners in testing was mind-blowing, and for the experienced TDD-ers was a way to make them remember some of the basic actions they are doing while writing code in a TDD manner. During the retrospective of the session only a couple of said it is something useful that could be applied in production, and that they would use it. The main idea was: I would use this if there is a problem I don’t understand and I need to take really small steps to understand what I need to do. In my opinion this is one good situation to use it, but there are many others. And then my question always is: how can we know that we know enough about the problem?
The last session was as always a free one: just practice something that you like, and decide your practice in the first five minutes of the session. I saw a couple doing pair-programming games, Taking Baby Steps or even TDD as if you meant it. Nobody wanted to finish the problem; that was a relief 🙂
As usual we ended the coderetreat by asking the three questions:
1) How did you feel?
- Great, learned something
- Exercised more
- Felt my mind explode
- Very nice
- Had fun
- Nice meeting new & old friends
- Tired, sleepy
- Wired, I usually don’t work with people that know about programming
- Nice social experiment
- A bit scared in the morning because of the first pair-programming experience
- Fun x 2
- Nice day, enjoyed meeting all
2) What did you learn?
- I should use tests more
- Write tests first
- You can build your app through tests
- Apply TDD as if you meant it
- The value of timeboxing or constraints
- Constraints help you be more creative
- My writing speed is not that good
- Use testing
- Testing more seriously
- TDD is not that time consuming
- Take TDD seriously
- Be more disciplined
- Saw how other people test
3) What would you apply on Monday?
- Break into smaller chunks
- Write tests first
- Take a book on TDD
- Timebox more often
- Do typing exercises for typing faster
- Configure better my environment
- Do something from scratch
- Implement Conway’s
- Focus on smaller parts
- Timeboxing x 2
- Baby steps
- Use the IDE better
- Use the TDD principles
- Use local repository
- Commit more often
- Try pomodorro technique
- Add constraints
And in the end of the closing circle someone came with a good addition on my usual questions: “What do you want to learn next?”. It was a question that puzzled a bit the audience, but it remains a good question. So what would you like to learn next?
Many thanks to our host Software Society, to Stefan for inviting me over and sponsoring the lunch and to all the passionate programmers I had the chance to meet with which I had a couple of beers after the coderetreat.
You can find the slides that I used for this coderetreat here.
Special thanks to Mozaic Works, the company I work at, for sponsoring my trip to this community event in Bulgaria.