In June this year, we were lucky enough to have Corey Haines come by the Westerngeco offices in Oslo to host a code retreat with the seismic embedded software engineers. We had a great time and learned a lot. Corey kindly agreed to give a short interview for our software newsletter, and here it is:
Q. Could you tell us a little about who you are and what you do?
I’m an independent software developer trainer, specializing in working
with teams to improve their fundamental software design skills. In
2008, I lost my job and decided to go on a pair-programming tour,
traveling around writing code with people in exchange for room and
board. Over the past few years, I’ve been working on developing and
augmenting a training format called code retreat. When I’m not
traveling, I live in Chicago with my girlfriend and a cat named Zak. I
spend my time at home working on my application, MercuryApp, as well
as advising non-technical founders of startups.
Q. What is a code retreat? Where did the idea of code retreats come
from? What can you expect when you go to your first code retreat?
A code retreat is a day-long, practice-oriented training event. It
stems from the idea that, as software developers, we spend most of our
performing on live code. Since we are always trying to ‘get things
done’, we necessarily have to cut some corners in our code. We often
neglect some of the basics of our craft, such as good abstractions.
Using a focused practice approach, we can make ourselves a bit more
effective at designing and developing software. So, the format is
designed to give the opportunity to really work on writing better
During a person’s first code retreat, the morning is usually spent
getting intimately acquainted with the problem. Then, in the
afternoon, we really push hard on practicing some variants of design,
focusing on aspects of the 4 Rules of Simple Design. Depending on the
group, we might then move into pairing games, design constraints (no
if statements, no loops, ultra-small methods) or a
TDD-as-if-you-meant-it exercise. And, lots and lots of intense coding.
Q. You have been facilitating code retreats all over the world. What
are some of the surprising things you’ve experienced during these
A major thing that has surprised me over the past couple years is just
how much progress a person can make in their understanding when
working under the code retreat constraints. Having the opportunity to
delete your code every 45 minutes allows you to really try new things
out and not have to live with the mistakes of the past. In our
day-to-day coding, we often write production code before we really
have a great grasp on the problem. By giving ourselves the freedom to
explore, the solution we come up with at the end of the day is so much
better than at the beginning.
Another surprising thing has been the number of people who get hooked
on working on Conway’s Game of Life as a regular practice problem. I
often hear from people later that they can’t stop working on the
problem, approaching it from different directions, trying out new
I’ve also had more than one company tell me that they’ve begun
integrating the idea of ‘do it once and throw it away’ in their
regular routine. This has a surprising effect on the codebase, as it
decreases the amount of technical debt in a codebase, as spiking the
solution first gives a better understanding of the domain.
Q. First there was OO, then there came patterns, followed closely by
agile. It seems that the movement du jour is software craftsmanship.
What does software craftsmanship mean to you? Is it important? Is
there anything new in it?
Software Craftsmanship is a natural partner to all those things. It is
an outgrowth and evolution of our understanding of how to develop
software. Just like OO and the agile methodologies were culminations
of previous work, Software Craftsmanship brings together a lot of the
lessons that have been learned over the past decades around building
and delivering software products.
For me, Software Craftsmanship is about working to build a programming
industry that can be proud of its professionalism, delivering the
right product for the right situation at the right time. This involves
the whole range of activities, from effectively mentoring new
developers to working closely with our client businesses to understand
the values that a modern software development process can provide.
Q. What excites you about software development now? What technologies
do you have on your radar?
I’m quite excited about the push to get kids interested in
programming. I’ve been spending a lot of time in Scratch
(scratch.mit.edu) lately, as I’m helping teach a class for teenagers.
There is a dearth of developers, especially experienced ones, so it
would be good to start working with the next generation.
I think it is cool to see some of the more fundamental languages
coming back into vogue, such as lisp and smalltalk, emphasizing
functional and pure object-oriented paradigms. The emphasis on being
adept in different language paradigms is an encouraging trend.
Q. How do you see the future of software development?
First, I’d like to see a continued renewed energy and joy in the
younger generation. It is exciting to see the push in the past couple
years to focus on showing kids just how exciting our craft can be. We
wake up in the morning, start with nothing, and have created something
new by the end of the day. It is an amazingly heady feeling to be a
Second, I’d like to see the industry focus back on fundamentals of how
to deliver quality software for the businesses we are part of. Rather
than always looking at the latest shiny toy, let’s also take some time
to really work on improving our core skills as software developers:
abstractions, modular design, naming, etc. It is important to keep
innovating, but the past has seen a push to focus too much on the next
great thing. For me, code retreat is one of the core activities in the
quest to improve our fundamental skills.
Corey is organizing a global day of Code Retreat, find out more at the Code Retreat Blog.