Monday, February 15, 2010

Please Help - CodeRetreat Tour Videos

Dan Benjamin of is going to help me out. Thanks to everyone who has contacted me to see if they can help. It is really flattering when the community out there is interested in helping.

I'll let everyone know how it goes, and I'll be writing up a guide when I'm finished.

As I'm traveling around this year on the coreyhaines coderetreat tour 2010, I'll be doing video interviews with people I meet. These will be very similar to the videos that I did during the 2008/2009 pair-programming tour. Already, I have an interview with Gary Bernhardt about the testing cultures in Ruby and Python, as well as several videos with J.B. Rainsberger, talking about such topics as primitive obsession, why inheritance is bad, value types and other random things. And these are just during the first two code retreats!

During the previous tour, I simply put the videos up here on the blog, embedded via vimeo. Throughout the year, people were always asking for a podcast format, providing both an audio and a video component, so people could listen in the car, working out, while knitting, etc. I agree this is a great idea, but I haven't taken the time to really figure out how to do it. People tell me it is easy these days, but I'm currently at the ignorant end of 'everything is easy once you have someone show you how to do it.' As an example, the current 15-minute video that I'm trying to upload rendered out at 835M! That takes hours to upload. I don't know what compression I'm not setting that causes this. I'm a sad panda.

I'm putting out a request for help. I know there are a lot of people out there who have successful podcasts with audio and video parts. I'm hoping that someone will be willing to take a few hours over the next week, or so, to help me set up my environment to do this effectively. My video editing needs are small, as I intentionally leave the videos with little editing, focusing more on the impromptu, conversational aspects of the interview.

Here are the main things I don't know how to do effectively or at all:
  • Render a video (with iMovie or Quicktime) that is good quality and small enough to upload without taking what feels like a million hours;
  • Effectively strip out the audio from the movie;
  • Set up a podcast for the audio version;
  • Set up a podcast for the video version;
  • Get podcasts into iTunes;
  • Create a process for effectively updating the podcasts;
  • Anything else I should know how to do.
Wow, I sure don't ask for a lot.

I am looking for someone who would volunteer their time to help me do all this. Once I know how to do all these steps, I can do them going forward; I would rather have someone teach me how to do this, rather than continue to stumble around.

As a way to say thank you, I will do two things:
  • Credit you as a the person who helped me figure all this out;
  • Write a guide / do a screencast on how we did it, so others can have the step-by-step instructions.
Note: I'm on a mac, so experience on that platform/toolset would be necessary. I currently have iMovie, Quicktime Pro and Camtasia.

If you can help me, please email me at I'd like to get all this done over the next week, so I can start pushing these videos up.

Thanks in advance.

Thursday, February 11, 2010

Just a reminder


Tuesday, February 9, 2010

Code Retreat Tour #1 - Seattle, WA

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.

If you would like to see more pictures, you can check out this picassa album.

Wednesday, February 3, 2010

Corporate Retreat Round-up

In December, I had the pleasure of being invited to participate in Relevance Software's corporate retreat. It was a 2-day event, held outside the office, where they reflected on 2009 and discussed goals and specific plans for 2010. I'm not at liberty to discuss details of the discussions, but the format consisted of prepared presentations, breakout sessions, open-topic brainstorming and, of course, video games. I've spoken before about how impressed I am with Relevance on both the personal and professional level, and this was no exception. The transparency that was displayed at their corporate retreat, regarding both successes and failures was inspirational.

While at the retreat, I IM-ed Sarah and told her that I wanted to have my own corporate retreat. By the time I got back from Relevance, we were already discussing the details: what it would be like, what we could talk about, etc. Since I'm striking out on my own, and I have a lot of different projects and activities going on, it would be good to just take a look at where I've been, what I've done, and where I want to go, and, most importantly, how I'm going to get there. And thus was born:

The First Annual
coreyhaines LLC / fabled net
Combined Corporate Retreat 2010

There were a few things decided immediately:

  • it should be offsite; we can't do this sitting on the couch at home;
  • we should each have a full day for our own planning.

This led us to look for a hotel in downtown Chicago. After pricing out some possibilities, we found that we could get a night at the Intercontinental Hotel for around $115. The Intercontinental is a well-known, 5-star hotel right in the heart of the Magnificent Mile; it sounded like a great deal. At this point, Sarah made a fantastic point:

If we only stay Saturday night, then those sessions lose the morning hours. If we check out on Sunday, then those sessions will either lose the afternoon hours, or we'll be sitting there with all our bags.

Based on that, it made sense to get the whole weekend: check in on Friday night and leave on Monday morning. While this might seem a bit extravagant, it turned out to be such a successful decision that we found ourselves continually mentioning it and loving the fact that both days were relaxed and easily provided the necessary amount of time to really deep-dive into our sessions. The hotel had a second level that had open chairs and tables, including a nice table in a semi-private nook next to a window overlooking Michigan Avenue.

We decided to embrace the inherent humor of the situation, including taking advantage of Vista Print's free promotion offers to get swag for our retreat. We also took it seriously, though, planning and publishing agendas to each other with a layout of the day's topics.

It isn't my place to discuss what Sarah talked about at her retreat on Sunday, so this post is going to focus on the results of my sessions on Saturday. I had two major sections: a shorter morning focused on my personal history and goals; and, a longer afternoon focused on my professional path. When the day was over, we had spent around 7 intensely packed hours focused on my plans and goals.

Morning: Personal Goals

We spent the morning with two primary objectives: go over the path that has led me to where I am and discuss how to keep my professional traveling from negatively impacting my personal life, specifically my relationship with Sarah. I won't bore people with the stories from my past, but the brainstorming about techniques for a well-balanced life was very valuable. In any relationship, it is important that both people are involved, so it was important to spend some time discussing 2010 together.

Lunch - Big Bowl

Curry and fresh ginger ale is a great way to transition from personal to professional discussions. I'm just saying.

Afternoon: Professional Goals

The afternoon had a little over 5 hours of structured activities. I started with an overview of my professional career, adding more detail after 2004, when I was introduced to extreme programming. 2009 was covered as a foundation year; the exact nature of what is being built was considered, as well. Turning the discussion to 2010, I started to outline some of the projects that I had in the pipeline: the coreyhaines code retreat tour; partnering with Sarah on projects; the cluster summit; contracting; development of some day-long tutorials; "come code with me" classes; the coreyhaines community contribution fund; the "Software Journeyman" interviews; and, the "How I Got Started In Programming" interviews.

I am not a well-organized person; my detailed planning skills tend to be a bit on the meager side. I've found myself impressed with Sarah's skills in these areas, and I was looking for some advice and inspiration. So, I asked her to give a keynote at my retreat, focused on planning and organization. Rather than giving a talk, she decided to lead me in an interactive workshop to help determine a personalized, effective process for planning. We started working on developing a day-long rspec tutorial, and, while doing this, she extracted a set of steps that take advantage of my collaborative style. One interesting take-away she highlighted was that I work best with a small group of people, bouncing ideas around; it is ineffective and counter-productive for me to sit down and try to plan something out entirely by myself. She also led me in an exercise to help break through mental blocks when presented with certain tasks by rating each task simply on enjoyment and difficulty. Working through a specific planning session (a day-long RSpec tutorial) with focus on extracting a personalized process was incredibly valuable to me, as it will help keep me from being overwhelmed. Having a partner like Sarah is a constant source of happiness for me, and I especially am grateful for this part of the day.

Using our newly-developed process, we proceeded to approach some of the other plans that I had for 2010. Some were discussed explicitly, some were postponed to be flushed out at later 'focused planning sessions.' I intend to address these in detail in upcoming blog posts, but I want to give an overview of some of the projects for this year.

The coreyhaines code retreat tour 2010

My goal is to facilitate at least 10 code retreats around the country and the world. I believe that the code retreat is a significant event to help people become a better software developers. I have the schedule outlined through May, and I am in talks with places for the second half of the year. This is where planning skills are important. Sarah and I spent a considerable amount of time discussing what was an appropriate schedule, finally deciding that one location a month was the most appropriate.

Travel expenses are another aspect to consider; I will need to closely watch the balance of my income to expenses. The individual code retreats are sponsored by local companies, and I want to keep my costs separate from the site sponsorships. So, I hope to gain tour-level sponsors that will help cover some travel costs. I have a couple things in the works here, as well as some excellent help from Gustin Prudner and the gang at Entryway Software.

Partnering with Sarah on projects

January has been filled with sickness and other annoying interruptions, so the blog posts and screen casts about The Stickies Project have been on hold. We are still working on the application when we get a chance, though. Our schedules will become a little less crazy in the middle of February, and we intend to pick back up the active sharing. I will be writing a series of short, technical blog posts, followed by a longer series of blog posts on different aspects of writing an application in javascript.

One of the many reasons that I enjoy working with Sarah is her mind for application ideas. We have a couple more in the queue after The Stickies Project, and I'm looking forward to bring those to light. Working with Sarah is a pure joy, as our skillsets overlap, but there are definite places where her skills extend past mine. It is nice to have a partner who can really stretch your knowledge.

Along with the code retreat tour, this topic is highest priority for me.


I need to balance my education-oriented projects with a healthy amount of contracting for two reasons: most of my projects don't generate income for me; and, it is important to periodically deliver software to keep my chops up. It is a challenge to keep my activities and projects from stepping on each other; if I try to do too much, then everything will suffer. I am currently working on a small (from a time-per-week perspective) contract to cover my base expenses, and I have a couple other opportunities coming up. Due to my schedule of travel, it is important to find contracts that are flexible.

Day-long tutorial development

I've been intending to develop several short topic-oriented classes that I can do in half-day or full-day sessions. Sarah and I started the planning process for creating an RSpec tutorial. We also brainstormed a bit on other topics that I feel qualified to teach: jquery, cucumber, ruby, rails, javascript testing, etc. Looking at my schedule over the next year, it became apparent that holding a class over the next couple months would not be feasible. So, starting in July, I will be doing once-a-month, day-long focused classes on specific topics, most likely on Saturdays or Sundays in Chicago.

The first one-day class in July will be "RSpec: from 0 to Rails."

The second one-day class in August will be "Testing Javascript: Too Easy Not To Do It."

"Come code with me" class

I had a great conversation with Paul Pagel the other day over beers, and he challenged me to put together a class for apprentice-level developers. This would be a series of hands-on, build-an-app-style sessions. I told Sarah about this, and we began discussing what form something like this could take. There were thoughts of a twice-monthly evening class, or even a weekly class. Then an idea came: what if it was an intense course, a few hours in the evening over the course of two weeks: like 3 hours a night, 4 nights a week, for 2 weeks. We would spend the 8 days building an application together, working as a team. I would try to find a co-instructor, so we could provide focused, hands-on mentoring while building a real-world application. I was explaining to Ray Hightower that I would probably find an app that I could build in 2 days, then stretch it into 8 days. This would allow us to really focus on showing how to do it right. Ray came up with a great tagline: 'a 2-day app squished into 2 weeks.' I love it!

One question is whether there should be a charge for this. I'll be charging for the day-long tutorials, but this probably would be expensive. Would that cause people to take their participation more seriously than if it was free? The other option is to make it invite-only; people would apply for it. If no explicit charge, then I would ask people to give an amount that represents how much value they feel they received.

This won't happen for a while, October at the earliest, so I still have time to think about this and get feedback from people.

The coreyhaines community contribution fund

This is an idea that I've been tossing around for a few months now. The basic idea is simple: create a code retreat/other event sponsorship fund that spreads the cost of sponsorship over many people contributing very small amounts. Code retreats and other practice-oriented events don't always have a local company to sponsor them and there are lots of people who would be willing to contribute $15 to support an event. For various reasons, events generally ask for sponsorships on the order of 100s of dollars, not $15. So, I want to start a fund that relies on the power of numbers to provide sponsorship for events. I'll be writing more on this later, as I begin to flush out the logistic details (non-profit, website, etc).

During our brainstorming session, Sarah had some great points and suggestions. In the end, we made some alterations to the original idea to include the following points:

  • Provide incentives to donate (for example: get publishers to donate books for drawings; develop blog badges for people to display; work with companies to get discounts);
  • Have a good website that highlights both people donating that month and the events that were sponsored;
  • Cap the donation to $15;
  • Cap the number of donations per month to 100 people;
  • Prevent people from donating two months in a row;
  • Provide some form of matching program with my own funds;
  • Be explicit that this would not go towards my own personal expenses;
  • Extreme transparency of input and output.

I'm planning on writing a more detailed blog post that will give more information on this and provide a forum for feedback. I'm planning on beginning the fund in April or May, so keep an eye out soon for the more formal announcement blog post.

The "Software Journeyman" interviews

During my travels in 2009, I had the unique opportunity to meet, work with and talk to a large number of people. I very quickly realized that there were a lot of people who had some great thoughts, but no real good way to share them. So, I began video-taping conversations with almost everyone I had the pleasure of pairing with. Most people I met had something they were very passionate about, and I was privileged to help them share their thoughts via my blog. Talking to so many people and spending so much time on the road, my head was normally filled with ideas. So, I also started a sub-series of videos called "Road Thoughts," in which I found a nice place to film myself sharing thoughts that were floating around. I received overwhelmingly positive feedback on all these videos, and I was proud to provide a platform for people to share their ideas.

Since I stopped actively traveling on the pair-programming tour and have spent a few months contracting and looking towards the future, I haven't done as many interviews. I still have a few that haven't been published, and the code retreat tour will provide me the opportunity to do more interviews.

In 2010, I would like to pick this series back up and continue to publish videos. My goal is to do at least one video at each location where I travel. Starting in March, I intend to publish at least one video per month.

The "How I Got Started in Programming" interviews

While the "Software Journeyman" interviews were generally focused on the craft of software development, I also found another source of inspiration and community: talking to people about their "origin stories." During the initial 3 weeks of travel, in December of 2008, I listened to a few people tell me how they got started in programming, including Uncle Bob Martin. In January of 2009, I realized that these are valuable stories that capture both the personal side of our field and important stories about our heritage. So, I started sitting people down in front of my camera and asking them to tell their story. These turned into the "How I Got Started in Programming" interviews.

While I have a lot of videos in the backlog, I haven't posted any in a long time. It takes a bit of time to prepare a video for publishing, and the number that are waiting to be edited is a bit intimidating. So, starting in March, I will be posting at least 2 interviews per month. Also, while traveling, I will begin to gather these stories again from people I meet.

Was it worth it?

Yes! Absolutely! Spending a day completely focused like this was invaluable. I don't believe it would have been nearly as effective at home, due to all the distractions. Having Sarah there, providing input and challenging my ideas, allowed me to make significant progress towards planning my year and keeping it from getting out of control.

Feel free to share your constructive thoughts and feedback in the comments below, or, better yet, write a post on your blog.