Are you an HR and looking forward to recruiting a resource who is good at technical practices and a good team player? This blog post is for you.
Are you from the marketing department and are wondering how could you publicize your organization? This blog post is for you.
Are you a project manager and are looking for a way to upskill the team? Well, this blog post is for you.
Wait, you are just a developer and want to improve your skills? This blog post is definitely for you.
Do you want to do something for the software community? Well, this blog post is for you.
If you are a scientist and wondering what are the boundaries of the universe? Sorry boss, this blog post is not for you.
What is a Coderetreat?
The answer to all the above questions is Coderetreat. Invented by Corey Haines et al in 2009, it is a day-long public learning event for software crafters. It includes 4–7 sessions of 45 minutes each along with pair swapping, retrospectives and challenges. The attendees deliberately practice good techniques like TDD, Pair Programming and focus more on getting things well as opposed to getting things done.
I am sure that you did not understand a lot. Let me explain with an example.
There are 3 roles involved. The host who provides the infrastructure for the Coderetreat, facilitator who guides the group through the Coderetreat and attendees.
Imagine you have 4 developers, Jon Snow, Mr Beans, Voldemort, John Rambo who are attending a Coderetreat hosted at (some_company_name)
The reason these 4 are chosen for the example is that they come from different domains, representing the diversity of the attendees.
They would be presented with a problem statement by a facilitator (usually Game of Life) with a time limit of 45 minutes. What they have to do is pair with someone. That someone should be not from your team with whom you work regularly. Find someone new. In our example, let us assume that Jon Snow pairs with Mr Beans and Voldemort with John Rambo.
During the next 45 minutes, the pair should
- Respect each other (This practice can be followed later as well, with everyone)
- Mutually agree on a language.
- Use TDD and have passing tests.
- Write clean and readable code.
- Avoid duplication.
- Have small methods and classes.
The facilitator keeps on monitoring if the pairs are following the above points. After the next 45 minutes, stop coding. And then, you have to do the toughest part of the whole day, i.e. delete the code.
Nope, not kidding. Everything that you do during Coderetreat does make sense. We will see that later. For now, delete it. Gather together and have a retrospective along with facilitator and other team members for 10 minutes. You could discuss on points like
- What did you learn from your session?
- What went well in your session, what didn’t?
- What will do differently in your next session?
Next 5 minutes, the attendees can take a break to attend phone calls or nature calls, whatever they prefer.
For the next session, they have to work on the same problem, but with a different pair and with a constraint provided by the facilitator. The constraint can be like
- No conditionals
- Immutables only
- No loops
- Code swap
So in our case, Voldemort would be pairing with Mr Bean and Rambo with Jon Snow.
The facilitator will then time box the next session for 45 minutes. After the time limit, the facilitator will ask them to
- Delete the code
- Take a break
- Switch pairs
- Add another constraint
The same cycle continues for the remaining day. At the last session, the retrospective is usually a bit longer where the developers share their experiences for the entire day. The questions asked during the final retrospective are
- What have you learnt today?
- What will you do differently in your job from Monday on?
Why we do what we do during the Coderetreat?
First, following the good programming practice like TDD, clean code, no duplication is something that the developer should do anyways in daily life. But usually, the pressure of getting things done does not allow them to experiment. And hence, Coderetreat’s major focus is not on how much is done, but on how well it is done.
Secondly, pairing improves the communication skills of the developer. And switching the pairs gives them a chance to learn new languages, approaches and practices throughout the day from other developers. Networking is an additional benefit for the developers.
Then comes the part of deleting the code. Normally developers are too obsessed with their code. This teaches them to let go what they have written to build something better.
Retrospectives teach them to look back and learn from their experiences.
Constraints are added to help them write better code. In usual workdays, replacing a for loop might be not of that importance. But Coderetreat is focussed exactly on those things which one would not do normally. What they learn can be useful for their daily work.
You can find the detailed list of constraints at https://www.coderetreat.org/pages/facilitating/activity-catalog/
But why Coderetreats?
In case if you are an HR and planning to recruit, it is an excellent opportunity to host a Coderetreat and then analyze the attendees throughout the day. Not only it is possible to know the coding skills, but also how open the candidate is to learn something new, and how well he interacts with the other team members can be known.
In case if you are looking to publicize your organization, then hosting a Coderetreat would be an opportunity for a lot of developers to visit and know the organization.
In case if you are looking to upskill the team, letting some of them facilitate the Coderetreat is an excellent opportunity. Facilitation involves being aware of good programming tools and practices. Which means that the developers who want to facilitate end up learning a lot about the same. The knowledge that they gain then spreads through the organization. Even letting them attend the Coderetreat provides the team with valuable insights.
In case if you are a developer, it is a day meant for learning, experimenting, networking and coding.
In case if you want to do anything for the software community, what could better than hosting and / or facilitating a Coderetreat?
By the way, every year, one day is celebrated as Global Day of Coderetreat. Developers from all over the world participate in the Coderetreat on that day. For more updates, you can visit https://www.coderetreat.org/