At Table XI we’re constantly challenging ourselves to improve our development chops. We recognize that the best and brightest—perhaps especially the best and brightest—need consistent opportunities to wrestle with big problems and up their game, so to speak.
To that end we’ve spent a good deal of time over the past year exploring ways to build out our developer education program. There was no need to recreate the wheel here—it’s already been rolling through Chicago for some time—so we turned to some of the folks we think do it best. We visited our neighbors at 8th Light, stormed the halls of The Starter League, and spent time talking to meetup and conference organizers at places like WindyCityRails.
The answer we came up with was pretty simple: Provide resources that help developers to form new perspectives on the challenges they face. To this end we’ve been happy with a number of approaches: We started a book club for developers; hold monthly, company-wide Round Table meetings; and last month, we hosted a full-day Code Retreat for our entire development group.
What is a Code Retreat?
Good question. Does it involve slamming our laptop lids and running down the hall to ‘retreat’ from code? Far from it. (We’re afraid of the tripping hazard.) It’s actually a day-long workshop focused on the fundamentals of software development and design, providing developers the opportunity to take part in focused exercises away from the daily routine of “writing useable code.”
That’s a bit of a mouthful that means we spend a day programming and go home without a program. Unintuitive as it may sound at first, taking a step back from production realities can be quite liberating. The code retreat takes great advantage of the format to hammer home fundamental principles of good software like SOLID and the 4 rules of simple design. We leave the retreat with a better understanding of how to write flexible programs that minimize the cost of change over time. No small feat.
How is it structured?
Typically a Code Retreat is a day-long facilitated event, broken into several sessions. Ours was run by Corey Haines, the Godfather of Code Retreats (I’m pretty sure he even owns a cape). Corey and a few friends pioneered the whole concept four years ago, and he’s really at the center of the movement. When it came time to organize our event, we knew he was just the guy to host it.
Corey facilitated five sessions at our office. In each 45 minute session we paired with someone new to work toward an implementation of Conway’s Game of Life. The pair chose a common language and let loose on the problem using TDD, of course. By switching partners we were able to collaborate with people we don’t normally have the opportunity to work with, which was a ton of fun.
Sounds easy so far, right? But there’s a twist! Each session also introduced a new constraint designed to bend your mind in one way or another. Say goodbye to the comfort zone. For instance, most of the world’s programs are chock full of “branching logic” like:
> if ‘this’ then ‘do that’
Corey said, “No way, José.” Our first constraint was to attack the problem with no such branching. Without a familiar tool, we had to think of different ways to move the ball down the field (that’s a sports metaphor, I think). Next thing you know we had a better grasp on polymorphism, and life was good.
Why do it? To avoid software ossification.
Time is incredibly valuable. At Table XI we’re always working toward aggressive deadlines and goals. We love our client projects for many reasons, one of which is that they keep the lights on. With that in mind, we have to be smart about carving out time away from these projects. We firmly believe that Code Retreat falls squarely in the ‘being smart’ category.
When facing problems we humanoids tend to favor solutions that are near at hand. Often this means accommodating blind spots rather than challenging them. Next thing you know, short-term productivity yields to long-term complexity and systems fight off changes like the plague. It happens all too often. New features introduce tough regression errors and take too long to build (if they’re even possible). Everyone is sad.
The Code Retreat is great at expanding the set of approaches that a developer can draw upon. By stripping away the usual deadline pressures for a few hours, we explore new tactics and see problems from different angles. At day’s end, we walk away with our heads sparking with ideas, which we can practice and incorporate when the time is right.
Consistently creating high quality software is an immense undertaking. It requires months and years of work, while keeping accrued knowledge “under your fingertips” through frequent practice (as Corey would say). The Code Retreat is an excellent day devoted to just that: practice. We learn new approaches and revisit forgotten patterns. We break down barriers by pairing across team boundaries. We improve our ability to talk through problems and communicate design ideas. At the end of the day, we’re more creative and efficient developers, ready to build flexible, maintainable systems for years to come—the ultimate value-add for our team and clients alike.