Scoring Rock Climbing Competitions

The last two years or so I have been very busy working on APEX 5.0. This is the main reason for not posting anything in so long. It’s not that I was so busy with work that I did nothing else, but just that I didn’t have the motivation to write. I should have plenty to write about APEX soon. But this post is about another interest of mine; rock climbing.

My youngest daughter climbs competitively and I try to climb at least twice a week when I bring her to team practice. The local climbing comps consist of proud parents watching their kids climb the hardest routes they can and then, when the scorecards are turned in, waiting around for an hour or more while the scores are tallied. It is not uncommon for people to leave, get lunch, and return before results are announced. In our area, climbing comps typically have 100 or so competitors.

In early 2014 a climbing friend, Matt, who was also responsible for scoring an upcoming competition had some ideas for how to make the scoring go faster. He asked me what it would take to create an app to do scorecard data entry. I saw the project as an opportunity to learn some new technologies I was interested in, specifically node.js, and jQuery Mobile. I picked a mobile web app because it is the best way to reach the widest range of devices with the least effort.

Climbing comps are traditionally scored using an Excel spreadsheet. For each scorecard you look up the row of the climber by name and then enter the number of points for the top 5 climbs and the number of falls (or attempts). The spreadsheet creates a bottleneck because only one person can be doing the data entry. Even if the bottleneck were removed by splitting up the spreadsheet by gender and/or category (or using Google Sheets), the data entry would still be tedious and error prone because of all the numbers that must be typed in. This is why it takes so long to get the results and give out the ribbons so the kids and families can go home and the climbing gym can open for regular business.

I worked a few weekends on the climbing comp mobile web app. I already enjoyed programming in JavaScript and learning node.js was a lot of fun and pretty easy. I chose a thin-server architecture with MariaDB for the database, restify on node.js for the REST resources and static content, and jQuery Mobile for the front end. I specifically wanted to minimize the number of libraries and avoid using a heavy weight MVC framework. This was to reduce the number of new things to learn at once, focus on the things I did want to learn without additional layers, and experience the pain points first hand, so I could better choose what additional libraries or frameworks I might want to add or switch to in the future.

By the time of the first competition, the app was working well enough to be used. The database had to be loaded with climber and route data with command line scripts, but the UI for data entry and reporting results worked. The key point of the app is that the UI closely resembles the score card and it already knows the point value of each route. Data entry is simply a matter of entering the 3 digit climber number from the score card using an on screen keypad, touching each route they topped, and touching the number of falls; 7 taps. The UI is optimized for tablets, but works well on laptops as well, and the UI is responsive so it can even be used on a phone.

On March 15th 2014 we used the climbing comp app for the first time at the Boston Rock Gym. The server and database were running on Matt’s laptop. We had between 3 and 4 people doing data entry on iPad or Android tablets. As scorecards came in, they were divided between the people doing data entry and quickly entered into the app. When time is called, any climbers that are waiting in line get to finish their last climb. By the time the last climber was on the wall, all the other scores had been entered. The owner of the gym had the honor of entering the last scorecard and the scoring was complete before the last climber’s feet touched the ground. The app was a great success. On the down side at least one family, expecting a long wait, left for lunch and returned to find that the ribbons had already been given out.

Since then, the app has been used successfully at two more comps. Before each one I have added new features and fixed bugs. Now climber and route data can be entered or uploaded from the app UI rather than using command line scripts. There is plenty more work to be done but it is just about at a point where others could use it. (Currently, it only works for red point format comps.) ClimbingComp is available on github for anyone to download and use.