Monday, October 17, 2011

Smashingline

I started working on Smashingline five months ago. Smashingline is a website that displays results from races. Most of the results are for footraces but there are some triathlons and a bike race or two.

For about two years I had wanted to build some sort of web property (a web site or a web app) as a way to demonstrate that I could build the frontend, backend, and an API to glue the two parts together. At the beginning of May of this year following a race that Sarah and I had both run we were discussing how tedious it was to download race results and create charts in Excel to get a better idea of how we did in the race relative to the other runners. I casually remarked that this seemed like something that would be helpful if it was online. As the thought formed I realized that this idea was a good candidate for the web site I was looking to build. I did a few quick searches but didn't find anything like it; I did turn up a variety of race results web sites, but at best they showed a table of results with a row for each runner. This presentation of data didn't (and still doesn't) give you any deep understanding of how you did compared to anyone else. A week later we were on vacation in Maine when I started putting the website together at the Maine Grind.

I made a few key decisions fairly quickly; first I chose to develop on Google's AppEngine. The reasons were entirely pragmatic: I already had the development environment including Eclipse and its AppEngine plugin installed and configured on my laptop. Second the project would be coded in Java. Since Java is very similar to C#, which I use daily at work, the learning curve was not very steep. In making these choices I had to balance conflicting desires: getting the website up and running as quickly as possible against learning a new language like Ruby or Python and an associated platform like Heroku or Amazon's AWS. In the end I decided that "shipping" the finished product was more important than academic pursuits. By the end of the vacation I had a working prototype.

Unlike the weekend projects you can often find posted to Hacker News I have probably spent about 140 hours on Smashingline. That time includes both writing code and uploading race data. About two months in to the project and with several races on the website I realized that I needed to make major changes to the way that race information was organized in the DataStore (Google's version of a database). It was taking too long to get information out and Google was changing the pricing model for AppEngine which would raise the cost of Smashingline from $0 per week to about $10 per week. Once I successfully completed those changes the site was much more responsive and the costs fell well below AppEngine's free quotas. Since then other changes have been relatively easy: adding "Like," "+1," and "Tweet" buttons to the front page and the results page for each entrant so they can share them with friends. Adding Google analytics and opening webmaster accounts at Google and Bing. Settling on the name "Smashingline" buying the domain and configuring DNS. Creating a Smashingline page on Facebook and opening a Smashingline account on Twitter. Of course there's always bug fixing and a whole host of minor improvements like a feedback form so people can suggest races for inclusion on the site.

The biggest challenge to the site going forward is the continued availablity of race data. Right now most race data on the web is an HTML table or a table embedded in a PDF file. But some of the results are only available through websites that display information for a limited number of runners at a time and they require the user to "page" through the information if they want to see all of it. Race result data, acquiring and arranging it for use on Smashingline, deserves to be the subject of its own post.

For now I have a growing backlog of features to add and not enough time to do them. Beyond that if the site is to thrive I have to deal with a variety of issues: it takes considerable time to properly format race results so they can be added to the DataStore, if the site's popularity grows data formatting will consume all of my available time (and more). Also as site usage increases its costs grow. Currently there is no advertising but that can't continue when the site exceeds AppEngine's free quotas. If ads become necessary I'd like to keep them as unobtrusive as possible. There is very little publicity for the site. Improving the site's visibility is probably more important than almost anything else, even greater than implementing new features. There is definitely a need to build relationships with race directors and other people and groups that organize races.

It's been an interesting almost six months of code hacking on vacations, nights, and weekends. If it's really true that most web sites and applications become an overnight success in about two years then I only have 18 months to go!