We Are Winners!

2008-11-01

WOW Initially, What Does this Error Mean? had a pretty strong presence in the top leaderboard. As the days went on, we slipped further and further down the scale. We hovered between 10th and 15th on the general leaderboard.

I knew we could sort by different criterias, and I occasionaly looked at the leaderboard by other criterias, but I can’t remember at what ranks we were.

In the end, we won Most Useful. That is a very good thing for us.

Again, congratulations to all teams that participated, and I’m hoping to see another repeat for 2009.

To celebrate the start of voting for the RailsRumble 2008 competition, I thought I’d make a new video. Thank god for version control! This allowed me to go back in time, all the way to the initial checkin, and take a snapshot of each evolution of our design.

It was a very iterative process. I did a couple of things in the bus from Sherbrooke to Montreal, then James picked up from there. The ugly green and red is mine, the nice white, orange and greys are his.

I hope you enjoy this show!


Evolution of a home page: What Does this Error Mean? from François Beausoleil on Vimeo.

If you prefer the high-quality video: evolution-of-a-home-page—what-does-this-error-mean.mov (15 Mb, QuickTime 4)

During the RailsRumble, we really had to guard against future creep. Jamis summarized it well in Beware of future creep

First, never implement more than you need to. That sounds harsh, in a grasshopper-and-the-ant kind of way, except it really isn’t. It isn’t a mandate to slack off, it’s a command to do what you know. Implement the feature you’re working on, not the feature you hope will land someday. Keep it simple, keep it minimal, and keep it real.

Jamis in Beware of future creep

While pairing with Daniel, it happened to us a couple of times when he or I would say “What does our story say already? Oh, let’s add a story for later”. That was really the essence of the competition. Delay anything (features, infrastructure, what have you) that could be delayed.

We’re really excited about What Does this Error Mean? and the way it panned out. Happy voting !

Reading up on RailsRumble, I found Raymond Law’s RailsRumble 2008 post-mortem.

Raymond writes:

Forget about writing tests – Look, I am in support of agile and test-driven development, with one exception. That is, you are not participating in RailsRumble. There’s just no time for it. If you are a good enough programmer, you can build a small application with no tests. If you can’t, I don’t want to work with you. Writing tests for a new application starting from scratch in just 48 hours is simple not feasible. No bargain!

Raymond Law in RailsRumble 2008

Sorry Raymond, but that is plain crazy. We took the time to write tests, and it gave us confidence. We even ended up with a 1:1.9 ratio of code to test. I do believe in agile (like you do), and I was really happy for those tests. Especially as we got more and more tired, the tests were a safety vest that kept us afloat while time was running out.

No ticketing system like Unfuddle and Lighthouse – One team member had tried to use Unfuddle to create tickets to get ourselves more organized. While it was a sincere attempt, it simply didn’t work. There’s no time to accept a ticket, create a new ticket, … We pretty much abandoned it soon after we started.

Raymond Law in RailsRumble 2008

We used Pivotal Tracker to organize our stories. As Raymond said, he didn’t have a lot of time to plan ahead of the competition. We got together 10 days prior to the competition and we used Pivotal Tracker to remember a lot of things for us. Accepting a story was as simple as clicking Start. I think having the stories spelled out gave us another safety vest by keeping us focused and on track.

Before the rumble, I didn’t know about Pivotal Tracker, but now that I do, I’ll be sure to use it more and more. It was a very low ceremony way to remember things. Even while coding the tests for a story, if we uncovered a missing requirement, we just Apple-Tab’d to Pivotal Tracker, added the story, Apple-Tab’d back and went on.

Hope you had a great weekend!

Well, those were an interesting 48 hours. We built and deployed What Does this Error Mean? within the time constraints that were imposed by the rules.

What is What Does this Error Mean? ? It’s a way to search for errors and solutions, but without Google’s page ranking algorithm being in the way. You want to know what it looks like?

Obligatory What Does this Error Mean? screenshot.  Our app is simple enough that it only needs a paste box on the home page

Click for larger version

The concept behind What Does this Error Mean? is simple: you receive some obscure error message you don’t understand. You copy it, go to What Does this Error Mean?, paste and then click “Find me some help!”. If we find similar error messages in the system from previous posters, we’ll present you with ranked solutions. If we don’t find a solution, we allow you to follow the error so you get notified of new solutions on your error.

To help us poor developers, Team GiraffeSoft even took the time to create two plugins: What Does this Error Mean? Rails Edition and What Does this Error Mean? Merb Edition (both plugins have only been tested on the latest released branch). Install the plugins, and suddenly your development error page becomes a direct link to What Does this Error Mean?.

To top it all off, James made a screencast for your viewing pleasure: wdtem_screencast.mov (QuickTime MP4, 75 Mb, 3 minutes).

If you like our idea, but most of all it’s implementation, vote for us. We will be very thankful.

Things that worked

So, what worked about this competition? Well…

  • Being in the same physical location helped, a lot. This meant we could bounce ideas off each other very quickly;
  • Pair programming;
  • Unit testing (we used Shoulda and Test::Unit);

These are so self-evident, I don’t know why people don’t do that all the time. The RailsRumble team encouraged us to do unit testing, and I pity anyone who didn’t do that. We’re confident that our application is pretty solid, given the amount of tests we have versus the simplicity of the application:


1 $ rake stats
2 (in /Users/francois/Documents/work/team-giraffesoft)
3 -—————————-———--——————--—————--——
4 | Name | Lines | LOC | Classes | Methods | M/C | LOC/M |
5 -—————————-———--——————--—————--——
6 | Controllers | 278 | 223 | 8 | 25 | 3 | 6 |
7 | Helpers | 153 | 85 | 0 | 12 | 0 | 5 |
8 | Models | 241 | 188 | 7 | 31 | 4 | 4 |
9 | Libraries | 251 | 136 | 1 | 28 | 28 | 2 |
10 | Functional tests | 730 | 588 | 11 | 13 | 1 | 43 |
11 | Unit tests | 767 | 622 | 7 | 2 | 0 | 309 |
12 -—————————-———--——————--—————--——
13 | Total | 2420 | 1842 | 34 | 111 | 3 | 14 |
14 -—————————-———--——————--—————--——
15 Code LOC: 632 Test LOC: 1210 Code to Test Ratio: 1:1.9

I kept an eye out on our statistics during the competition, and our code to test ratio steadily climbed. At the end of Saturday, we were at 1.2 / 1.3, and now 1.9? Wow, hadn’t really realized that.

Things that didn’t work

  • While pairing with Daniel, we were stumped a couple of times. One of the most stressful ones was when we were trying to set properties on Person, and they wouldn’t be set. We were really stumped, and just stumbled upon for nearly 20 minutes. You know what? The error was that Person had an attr_accessible declaration. Once we realized that, our test passed immediately. Daniel said he’d write a plugin so that assigning to a protected attribute in test mode would raise an exception. This will be a welcome relief!
  • Realizing Sunday morning that 1.5 hours of work from Saturday was a bad design decision. Initially, we would put a 10 year cookie in your browsers. Then James realized that this had security implications. We were going to use the cookies to remember what errors and solutions you had posted so that if you ever came back and finally logged on or signed up we could just associate the anonymous postings to your person record. So, 1.5 hours down the drain… We eventually replaced that with some values saved in the session.

Thank you to the RailsRumble organizers for putting up this event for the second year in a row. I count myself very lucky to have participated in this competition with such talented coders as Daniel and James.

And good luck everyone on your own applications. May the best one win!

BTW, if you’re wondering, we only built 17 story points on Sunday. Bug fixing, you know…

We used Pivotal Tracker to track our stories to build. Initially, I thought we’d do maybe 15 points in a day. Looks like I was really, really, wrong:

28 points in a day, according to Pivotal Tracker

We delivered 28 story points in a single day. Team GiraffeSoft really rocks!

You know what, training for the RailsRumble was very hard. I had to work at it. Hope you enjoy my workout as much as I did!


RailsRumble 2008 Training from François Beausoleil on Vimeo.

Are you participating to the RailsRumble ? I’m part of Team GiraffeSoft, with the other team members being James Golick, Daniel Haran and Mathieu Martin.

None of us are designers, so our application might suffer a bit for that, but we’ve got so many great ideas. What’s our idea you’re saying? Oh, that’s What does this error mean (obviously, the website isn’t up yet). We intend people (not just developers!) to come in, paste an error message they don’t understand and get an instant answer.

I certainly hope to see you there!

Search

Your Host

A picture of me

I am François Beausoleil, a Ruby on Rails and Scala developer. During the day, I work on Seevibes, a platform to measure social interactions related to TV shows. At night, I am interested many things. Read my biography.

Top Tags

Books I read and recommend

Links

Projects I work on

Projects I worked on