Client
The client regularly played golf at a local club. Tee times were reservation-only, booked via the website, and were made available a few days ahead of time.
The Problem
Popular time slots were very difficult to reserve due to many people attempting to book them at the same time.
Club members would wake up early and spam the refresh button in hopes of getting in. But we all know that you can’t beat a computer.
Design and Development
At its core, the key functionality was dead simple: click faster.
Ideally, faster than humanly possible.
The main difficulty came from testing. Because each user account is tied to a real identity and paid membership, we had to be extremely careful not to break anything. So iteration came slowly.
Note: As a matter of principle, I approach all my scraping and browser automation tasks with respect for the website in question (e.g., keeping requests to a minimum), but this case was extraordinarily sensitive.
With projects like this, when speed is important, it’s a matter of how fast. A few considerations:
- Latency: Was the bot’s physical location a bottleneck? What if we found one that got better/faster routing to the reservation server?
- Front-Running: The server automatically enables the “Reserve” button in real-time as soon as it’s available, per the on-screen clock. But would it be faster to manually visit that page precisely when we estimate that the server’s clock hits that specific time?
- Multiple Bots: Should we run multiple browser instances (all logged in to the same account) to increase our odds?
Luckily, none of this came into play in practice. Still, they were avenues to be explored if the bot wasn’t consistently the first one to get into the time slots.
Finally, the user needed a way to set and cancel desired booking times. This was a simple static HTML page with a mobile-friendly form. It also showed the status of the latest booking attempt, since implementing email notifications was outside the scope/budget in this case.
Results
The client no longer had to physically be at the computer in the early hours of the morning, racing to click buttons. They just had to set it and forget it.
For their sake, let’s hope no one else at the club hires me to do the same thing!
It worked amazing this morning! Thank you again for all your help.