The Seatle Code Retreat was the first retreat of my year-long tour, and I couldn't have asked for a better day. Gary Bernhardt was responsible for the organization, and Blue Box Group was the company sponsor. We had a fairly diverse group of backgrounds, ranging from ruby to python to .net; it appeared that a large group from the area's .net community came, which I'm always happy to see. Everyone seemed to have a great day, and there was even talk about when the next Seattle-based retreat would be. One of the goals of my tour this year is to spread the format that I've seen for a successful Code Retreat; hearing people talk about doing more retreats is very encouraging. Plus, seeing the format that I use in person can give people a foundation for facilitating their own retreats..
While the standard language for code retreat is Java, the community in Seattle decided on Ruby. This didn't seem to be a problem, as about half the attendees had a strong background in the language, and the other half had done some up-front preparation with the language. A lot of people spent some time before the retreat getting familiar with Ruby by going through the Edgecase Ruby Koans. The Ruby Koans are a set of ruby scripts that walk you through learning the language via making tests pass. I'd highly recommend checking them out.
How It Went
People started arriving around 8.30am; my goal was to begin the first session around 9.15 or 9.30. One unique aspect of this retreat was the simultaneous event happening in Grand Rapids, MI, hosted by Jeremy Anderson and sponsored by Atomic Object. Because it was the same day, Jeremy suggested we do a Skype call between the two retreats. What a great idea. So, at 9am PST, we reveled in the magic of technology by having a short video chat between Seatle and Grand Rapids.
As I like to do, the first 2 session were spent getting used to the problem domain, Conway's Game of Life. About half the participants had experience doing test-driven development, so we had a good mix of people pairing. As I wandered during the morning sessions, I saw basically two general approaches, either variations on a Cell class to hold the rules of evolution or variations of a World that contained a set of Cells. With only 45 minutes for a session, the announcement of 'Keyboards Down!' comes pretty quickly.
At the third session, I started broaching some ideas around letting the examples guide the design of your code. These ideas center around ideas gleaned from two areas: conversations with JB Rainsberger and Keith Braithwaite's TDD as if you mean it exercise. JB has fantastic ideas around test-driven development, and, based on the participants, I brought up his idea of moving specificity out to the test. This leads to interesting designs, as the injection of specific functionality and qualities leads to natural extension points appearing in the design.
For lunch, we had a local restaurant cater a taco bar; it was very well put together, complete with crunchy and soft shells and plain tortilla chips. I'm a firm believer that code retreat lunches should be a nice meal, and the taco bar that Blue Box Group ordered was definitely up to par. Coincidentally, the Grand Rapids team also had a taco bar; their food was from Qdoba (or Chipotle, I don't remember exactly), so I'm going to say ours was better on the basis that it was from a local establishment. :) During lunch, several conversations sprung up, and it was wonderful to see people discussing and sharing their thoughts on the different worlds of software development.
The afternoon was filled with intense practice, and, as I walked around, I saw people trying newer and more interesting approaches than they had in the morning. By the sixth session, most of the people were pretty wiped, so the majority of the people spent the time talking, discussing the day and explaining different approaches they had taken. At the end, we took a group picture. People were pretty exhausted, and only a few people went out for dinner and a beer.
Through the day, there were several teams who experimented with passing in functionality into the system, taking the idea of 'move specificity out to the tests' to heart. One team extracted the rules into a block that was passed into an evolve method. That allowed them to experiment with the evolution algorithm without being tied to a specific set of rules. It was interesting to see them implement variations on the standard rules. A couple other teams experimented with extracting the algorithms for determining the 'neighbors' of a cell. This could lead to watching he evolution of different systems from the same underlying system.
In the end, I think this was a very successful code retreat. The effect of removing the pressure to complete always leads to interesting developments, and it was exciting to see the attendees take it to heart during the day. Experimenting with different ways to implement a system is a valuable practice. The skill to be able to have an idea and let the code guide you to an implementation can be beneficial in the day-to-day tasks we normally face. Watching twitter for the next couple days, it also appeared that many people were expanding their horizons more by continuing to learn Ruby. If your general language is C# or Java, it is important to expand your mind to see what a dynamic language can offer. I know that my style in C# was significantly improved by studying Ruby. Stretching your mind into a new family of languages always leads to a better understanding of the fundamental conepts of software development.
I'd like to give a special thanks to Gary Bernhardt for organizing the event and for purchasing the morning bagels. I have a tremendous amount of respect for his ideas and his approach to development, and I would urge everyone to follow him on Twitter and also to read his blog, Extra Cheese. While in Seattle, I did a video interview with him, and I'll be posting that soon.
And we would not have been able to have this without the generous sponsorship of Blue Box Group. They provided both the space and the lunch. It is always exciting to see local companies willing to support community events and Code Retreat in particular.