Thursday, January 20, 2011

On the goals of Coderetreat

Last Sunday, I facilitated a coderetreat in Cleveland, Ohio, at the Leandog Software boat. It was a great time, filled with writing code, practicing technique and learning both obvious and subtle lessons. I'm always excited to see people's reactions about the event (for example, here and here), as they gain more insights into their journey. Over the past two years, I've found my own role as facilitator transform into a guide, poking a bit here and there at the code.
The full benefits of coderetreat come clear through the course of a whole day, starting with a session, or two, of understanding the problem domain, then the rest of the day is spent pushing our limits, accepting that our 'normal' way of coding isn't enough, that we should be striving towards an ideal. The format of the day is structured very specifically to allow for this experimentation. This is a reason we start early and I don't support having people 'drop by': we want time to get over the 'hacking away to finish' mentality that normally accompanies time pressure and brings with it the necessary corner-cutting. Focusing on improving our skills over 'getting it done' is one of the primary aspects that sets us apart from just being another hackfest: we are practicing to get better at the fundamentals. For example, we aren't there as a way to primarily practice or sell TDD, we aren't there to work on design patterns, we aren't there to finish the problem. We are there to work on learning better software design skills through exploration of the 4 rules of simple design. This is done through experimentation and exploration.

This past Sunday, Justin Searls recorded my introduction. This is how the day begins and sets the stage for the spirit and goals of the day. Feel free to embed this video into any blog posts you might write about coderetreat.



  1. I'm a hugh fan of both practice & kata in general, and code retreat in particular (driving 300 miles to attend one tomorrow)

    However, I am confused by the concept of the perfect line of code.

    I believe in the concepts of adequacy and refactoring. I also believe in the practice of 'the simplest thing that works'

    it's like working in clay.
    As such, to get towards the perfect line of code, you don't carve out the code. You mold it. Get it down. Expand the functionality, rework. after enough rework, you 'know' it's perfect because you don't have to touch it anymore, regardless of the new features.

    of course, there is always "some" feature you can dream up that will make you touch it, which is why perfect is more of a dream than a reality....

  2. Hi, Llewellyn,

    I enjoy the idea of the mythical 'perfect line of code.' However, it isn't about attaining it, but striving to understand how to write it. Being able to easily change a bit of code when you come back to it is the goal to strive for. That's the 'perfect line of code.'

    Coderetreat is about the molding, the refactoring, the emphasis on more and more appropriate application of the rules of simple design, as well as developing a deeper understanding of them. With an ever deeper and subtle understanding of the rules of simple design (specifically 'reveals intent' and 'no duplication'), we improve our skills in building software that can stand the test of time.

    This is why we don't focus on finishing the problem. By focusing on the very small, repeatedly and aggressively studying the concept of duplication and the ability to choose appropriate names, you become more adept at these when the pressure is on.

  3. And don't forget, coderetreat is not intended to be the only form of practice required. The focus here is on simple design, but there are many other aspects of software development than just that. However, the techniques and concepts at coderetreat are an essential part.


Please don't post anonymously; I won't use your name/url for anything insidious.
Comments by Anonymous are not guaranteed to make it through moderation.
Constructive comments are always appreciated.