SailSys

A complete software solution for sailing clubs that covers everything from calculating handicapped results to managing races, competitors and online entries.
ASP.NET Web API
Angular
Azure
Stripe
SaaS
Web App
An image of this project

Sailing involves ever-increasing amounts of technology on the water, but the software clubs use to manage races and competitors has fallen far behind. Many clubs are stuck managing entries on paper and results in Excel, or using one of many small applications greatly lacking in the standards and experience users have come to expect.

I took over the development of one of the smallest but most promising of these applications, SailSys, which was being used by three clubs in Australia. I led a remote team of developers redesigning and redeveloping the system to improve its usability and reliability. The rejuvenated product has since been extremely well received by competitors, race officials, club management and the wider sailing community. So far it has processed over $2m worth of entries to events and it is now being used by over 50 sailing clubs across Australia and Hong Kong.


In 2018, I was working on SailConnect, a mobile application through which sailors can create a profile for themselves and their boats to find and communicate with other skippers and potential crew. It was being led by an Australian sailor, Brad McMaster, based in Sydney, and was a big improvement on the existing system of whiteboards and phone numbers that many clubs use.

Whilst talking to users and the sailing community in Australia we discovered a small but promising product called SailSys which provided a way for clubs to accept entries via their website and then administer races, process results and manage boat handicaps. SailSys was owned by John Maclurcan, who has been handicapping races in Sydney Harbour for 40+ years. When Brad and I first met John, SailSys was being used by three Sydney clubs but it required a significant amount of John’s time to oversee, deal with issues and educate club volunteers on how to use the site. We immediately saw the impact we could have on the product. After several meetings John agreed to sell the product to us, retaining a stake and his position as head handicapper, and my work began to get a Mark 2 system ready for the start of the Australian summer season – eight months away.

Screenshots of SailSys Version 1
SailSys Version 1 before we rebuilt the system from the start. The image on the left shows the screen competitors used to administer their races, and on the right is the page competitors used to display results.
To Rebuild or Not to Rebuild?

We had decided early on that we would rebuild from scratch. Although this is something I know I should fight the urge to do, it seemed particularly necessary in this case as SailSys version 1 had been built using Adobe ColdFusion (a web application framework that debuted in 1995 and is prohibitively expensive and complicated to run as a cloud-based application, as well as being little used outside of legacy government projects). The codebase consisted of more than 600 files each containing HTML, JavaScript, CSS, ColdFusion Query Language and SQL! Working primarily with .NET and my recent experience with Angular and Typescript we settled on creating an Angular Web Application as the front end and a ASP.NET Core Web API on the backend. Using these modern technologies would make the system easier to maintain and allow us to stand out from competing products, many of which only offered a downloadable application.

“When I was looking for an alternative race management system, and I saw that SailSys was 100% cloud based, it was a no brainer. It means I don’t need a physical workspace, I can pick my laptop, a friend’s tablet or my phone and I can execute my race management responsibilities anywhere, anytime.”

— Phillip Kilfoy, Vice Commodore, Port Douglas Yacht Club

I spent a lot of time exploring the existing system and performing the the actions a club would carry out: opening a race for entry, approving entries and running races. I travelled to Sydney to speak to current users of the system and get a lightning course on sailing race management, scoring and handicapping from John. So equipped, Brad and I even volunteered at a local sailing club to run a race so we could better understand the complications of recording boats as they cross the line using the current system and on old-fashioned pen and paper. This valuable experience really helped shape the direction of the product: recording the sail numbers and finishing times as competitors crossed a distant finishing line in the dusk while ferries criss-crossed their path and one competitor's sails obscured those of another proved quite a challenge.

Screenshots of Figma showing early SailSys designs
Using Figma to redesign the competitor entry pages. Figma has some great features to allow remote teams to contribute and discuss designs and, best of all, it’s free!
Our Remote Team

Building SailConnect we had worked with a small team of talented company of developers from Rosario in Argentina, DGenix, lead by Nico Milcoff and David Revoledo. They had really impressed us with their abilities and flexibility, so David and one of their senior web developers, Bruno Sabetta, joined us for six months to help build the API and site with several of their other developers slotting in as features demanded.

Being a remote team spread across three time zones building a complex system and with very few of us having much sailing experience, communication was paramount. On a typical day I communicated with Brad in Sydney in the morning, where we spoke about the previous day’s progress and features I’d designed, and discussed important architecture decisions. Later I fed the output of our discussions back to the team in Argentina through Slack or Skype while Brad was in bed. As recommended by GitLab, I tried to ensure we kept a lot of written documentation and notes on discussions so that everyone could easily stay on top of things they had missed.

Screenshots of our development plan in Pivotal Tracker
A screenshot of Pivotal Tracker the tool I used extensively to manage the product and ensure we hit our release date
UX Improvements

From my research into the original product I had a lot of ideas on how to improve the usability. Version 1 was incredibly reliant on moving in and out of series of submenus for most features, which proved complicated for new users. In SailSys version 2 users can now complete the five steps needed to add a new series and open it up to entrants on one page with a series of tabs for each stage, rather than moving between pages. One of the features I’m most proud of is the finisher time capture. It was heavily influenced by my volunteering as a race official where I marked finishers while Brad called out sail numbers or names of boats crossing or approaching the line so I could prepare. Building on some of the concepts of the old system and developing new ones, users can now drag boats to a staging area (for boats approaching the line), tap to assign a boat a time or use a button to grab several times in quick succession for later dragging onto a boat (if lots of boats are finishing at the same time) and see a list of discarded times (if a boat is mistakenly marked with another boat's time). An example video of these features is shown below. We’ve received some great feedback from volunteers of the clubs using the system many of whom are over 60 and veterans of previous systems.

Screenshots of the SailSys app showing the series race settings
The redesigned series edit page no longer required going in and out of menus, instead users are guided through the steps of setting the series settings, division, races, subseries and pricing in order. Here is the tab showing the race setup for a recent series where users can set the name, date and number of the race as well as the times they would like each division to start.
A demo of the the race management page which officials move through as they complete the steps necessary to run a successful race and the race finishers’ recording page which is designed to give officials a simple and quick way to record the finishers of a race in real-time.
Our Data Processing Architecture

Like other race management systems, we support handicaps ­- the ability to apply a pre-calculated factor to a boat’s finish time to speed a boat up or down. Handicaps are mainly used in races where you have lots of different boats racing against each other. They improve competitiveness and ensure the same boat (most likely to be the fastest and most expensive) doesn’t win every race which would put people off competing. There are many different types of handicapping scheme, but SailSys has a custom system developed by John that is based on a boat’s actual performance relative to the rest of the fleet in the series. This handicap value can move up and down if a boat is racing particularly well or badly and produces far closer results. It gives small boats a chance of winning a competition even if they haven’t won a race outright.

To ensure series start with accurate handicaps and without every boat on equal handicaps, club admins have access to a database of past handicaps for all boats and series, so they can assign a similar initial handicap a boat achieved in previous races or that of a similar boat. The exact details of how we calculate handicaps is proprietary, but it required a great deal of thought to come up with a simple architecture and processing infrastructure that could handle large fleets that might, for example, have boats spread across five divisions, two subseries (a subset of races within a series), each of which needs results for three handicap types + scratch results (actual finishing times with no handicap). In this scenario, 40 different sets of results and handicaps would need to be calculated, which if done sequentially was very slow. To improve things, we used Azure Durable Functions which splits this work into 40 separate functions and calculates them all in parallel. Azure Functions’ serverless nature means it scales to meet the demand and we can display results and handicaps to users in a matter of seconds no matter how many races are being run at the same time.

Screenshots of the SailSys site on a mobile and desktop showing results
The new responsive results pages showing the overall pointscore of a series (left) and the results of an individual race (right). Displaying so much information on a range of screen types was a challenge.

“The on-water processing has radically improved our ability to service our fleets. A key feature was our ability to send a short text to all entries with a simple click of the button. All competitors had their results before even returning to the dock.”

— Rob Ridley Principal Race Officer, Royal Sydney Yacht Squadron

The Launch and Beyond

The system was ready for the first race in September 2018 and although I was still fixing some last-minute bugs as the first boat crossed the line (!) the system worked seamlessly from the competitors’ perspective, with everyone receiving text messages on their phones containing a link to view their results on our new mobile adaptive site.

Since the launch, David, Bruno and DGenix, who were instrumental in the progress we made, have moved on to other projects and I have been maintaining, improving and adding new features as and when they are needed with another team of developers.

We started off with the three clubs that had been using the old system and, as of December 2023, we now have over fifty paying clubs across Australia and, recently Hong Kong, (most of which switched from our biggest competitor). We have facilitated well over $2m worth of entries between competitor and club and helped run thousands of races.

Entrants have praised the ease with which they can enter a series and access results and club volunteers and admins have welcomed the time they have saved with the increased speed, reliability and usability of the system. In December 2018 I went out to Sydney again to observe volunteers of the Royal Sydney Yacht Squadron using the system to finish races on the water. We got a lot of useful feedback and seeing the volunteers (most of whom were in their 70s) using SailSys with ease on a rocking boat in the middle of Sydney Harbour was a moment of great pride for everyone.

We're still working hard to improve and expand the app for new and existing customers and continue to grow our user base of clubs to more countries. Here's hoping for fair winds and following seas!

If you're reading this and are interested in using our product at your club, do drop us a message!

A photo of SailSys being used on a laptop on a committee boat
SailSys in action on the committee boat at the Royal Sydney Yacht Squadron