Practicing legacy rescue techniques

A little over a week ago it was time for our first legacycoderetreat of 2012 here in Belgium. I was lucky enough to work with Adrian Bolboaca again on this retreat. He is a serious influence and inspiration to me when it comes to software craftsmanship. I went to pick him up at the train station. Yes, he really flew over from Bucharest just to co-facilitate this retreat with me, isn’t he awesome 😉

And how did the Brussels youth repay this man for flying all the way here to come and inspire people? Yeah, by stealing his bag. Everything was gone: laptop, digicam, creditcards, some souvenirs he brought along especially for me, his trusted notepad, even his clothes. So we spent the first hour explaining everything to the nice police officer. After some Chinese takeout we finalized all the session descriptions we had been working on the last couple of weeks and we were set.

It’s become tradition that I take care of breakfast for the retreats, so off we went in the morning to fetch us some “koffiekoeken”.

We got a personal chauffeur this time, since Gien offered to pick us up on her way to Brussels. Watch out for this girl, not only is she a damn good driver and poker player, she’s a mighty fine craftswoman (do you say that?) and I hope we get to work together some day.

We were a big bunch of passionate developers trying to make sense of this trivia code base that we had to work with throughout the day. We ran different new session ideas we came up with and experimented with the timings as well. I’ll do a series of posts on the different session ideas soon, I promise. People especially loved the session on revealing intent, clarifying the naming in the existing code base. This was the biggest learning moment of the morning as people really started to understand what the real behavior of the system was.

We took a really long lunch break, since we were walking over to the Japanese restaurant. We had some awesome wasabi there, oh yeah there was some sushi underneath the wasabi as well which was also good 😉

After the long lunch it was time to crank up the volume, blow the speakers and probably some minds as well. We introduced a session on using TDD as if you meant it as a tool to help us extract behavior from existing methods and decomposing large methods within the code base. It was hard for the people that had never done this before. People that were familiar with the technique quickly picked up the adapted version for refactoring (I really promise to blog about this soon) and found it very useful.

To make matters even worse, the next session we focused on extracting pure functions, not just methods. And we also suggested to use our adapted version of TDD as if you meant it to help extract these pure functions. Here we ran into some discussions with people that don’t really believe in the power and greatness of pure functions. It’s something that we had foreseen, so we tried to explain why we believe it’s a good idea and it can be used in OO languages like C# and Java. It’s not limited to pure functional languages.

During the closing circle we got some great feedback that these techniques are really something people could start doing on Monday. For most people this felt closer to their reality than the techniques we use during a normal coderetreat. Although regulars were all convinced that having a mix of both is the best way to keep learning and mastering their skills.

This is why we decided to alternate a normal coderetreat with a legacy one every 6-8 weeks. A normal coderetreat will help you see where you want to go in the future, while a legacy one will help you to deal with the situation at hand now.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s