/ blog

A Gem of a Week

5 February 2007 · Estimated reading time: 6 minutes

Time compresses when you are in the flow. Musicians know this, as do athletes, and, yes, even programmers. For us, “time flies when you’re having fun” is more than just a saying. The last 10 days have not just flown by, they’ve soared by like a jumbo jet making up time en route to some far away destination.

I won’t try to recall every detail of last Sunday’s sprint because others have already done so with aplomb. I do want to talk a little about an area that hasn’t been explored in as much depth: the technology behind what we did. It ended up being a huge part of my entire week, not just that one, wonderful day.

For the backstory, check out Mark Bixby’s excellent blog post on the Method Arts website. (Kelly Patrick Robinson also wrote a great summary, but his site changes so often, I’m almost afraid to link to it.) Reid Givens also blogged about it and put together two great podcasts where you can meet the team and hear a little more about what we did. Update: Brian Warren has now put his thoughts up on his blog as well.

OK, I’ll assume from here on that you’re hip to what went down in a borrowed office space in Albuquerque, New Mexico, between 8:00 a.m. and 8:00 p.m. Mountain time, January 28, 2007.

When we were meeting in the week before “The Sprint,” Daniel Lyons suggested we use Ruby on Rails as our development framework.

I respect Daniel immensely, not just as a programmer, but as a person. He is easily the best programmer I know. Go ahead. Ask him to write out—off the top of his head—the Fibonacci sequence in Java. Or Perl. Or C. Or C++. Or C#. Or Lisp. Or Haskel. Or Ocaml. Or... You get the idea. He could have suggested anything for the sprint. He suggested Ruby on Rails and he couldn’t have been more right.

I had barely touched Ruby on Rails before that Sunday, but ended up spending all of last week with it (more on that later). I was so impressed with how productive we were and how well thought out Rails is that I now have to bite my tongue to keep myself from telling everyone I know (well, everyone I know who builds web apps), “Stop. No, really. Stop! Get trained on Rails. Get your people trained on Rails. Start over. I promise you will finish faster than if you continue with PHP / Python / Zope / JSP / ASP.NET / Insert-Favorite-Supposedly-Web-Savvy-Middleware-Here.”

Rails is optimized for building web applications. It is an incredibly well thought out framework for implementing what is understood to be the best practices of circa 2007, rapid, agile methodology web development. It seems obvious in hindsight, but we were building a web app and we had to build it fast. Hence, Ruby on Rails.

What Rails allowed us to do was separate the work we had to do on the plumbing of the site from the work on the faucets from the work on the wash basins (the model, controllers, and views, for those following along at home). Also of great help that day was Subversion, killer revision control software. Thanks to Rails’ separation of model, controllers, and views and Subversion’s ability to seemingly intuit what we intended, Daniel, Lance Sanchez, and I were able to commit 63 revisions to the repository that day while only having to manually fix one conflict. Pretty smooth. This combination of software did what good software is supposed to do: get out of the way and let users solve problems.

We could have built something that day using another language and another framework. But, we wouldn’t have made it nearly as far and we wouldn’t have had as much fun.

Having barely touched Ruby on Rails before that day, I let Daniel and Lance do most of the heavy lifting. We had a great time working under the self-imposed pressure of our contrived event. The next day, though, things got real…

The Friday before the sprint, Daniel had the idea that he and I could rebuild—in one week—a system my contract employer had invested two years and a bunch of money building. Much to his credit, my boss gave us the green light to spend all of last week on this, rather than my regularly scheduled duties. Again, Daniel did a lot of the heavy lifting (things like database migrations and model classes), but if the sprint was an interesting, if superficial, foray into the world of Rails, last week was a full-on immersion.

Just like the sprint, we were building a data-driven web application and speed was of the essence. You see, Daniel left today for two months of driving across North America testing a new type of spark plug. (It’s a long story.) Anyway, the point is, we literally had one week to do this.

We did it. We built a complex, database driven web application in one work week. I am convinced that if we had used any other framework and any other language, we would have made it half as far with half the fun and twice the stress.

You may have noticed that I’ve mentioned “fun” a couple of times now. Some might complain that if it’s fun, it must not be work. I guess they’re right. It doesn’t feel like work when you’re having that much fun. Thing is, when you enjoy what you do, you don’t even notice the passing of the hours. All you know is that you’re getting things done at a rate you never thought possible. You’re in the flow. I don’t see anything wrong with that.

The sprint has garnered some attention in the press. It’s fun to be recognized for being willing to take a shot at solving a problem that has cost New Mexico taxpayers both money and frustration, but more than the publicity that has come from all of this, the real value for me was in my introduction to Ruby on Rails, the most productive web building framework imaginable, and, even more importantly, in the camaraderie of that special, intense day that will forever after be known as The Sprint.


The Albuquerque Journal story neglected to mention everyone who participated in The Sprint. So, for the record, here it is, the official list of participants with the role(s) they filled that day:

Update: I was interviewed about the sprint a couple of weeks after it took place. Here is the video of the interview on Albuquerque local TV: