Sport & Tournament Management System
- 2023
- Lead Engineer
- Shipped
STMS is a full-featured tournament management platform supporting various competition formats with real-time scoring, Elo-based player rankings, and predictive match outcome analytics. Built with a real-time architecture using WebSockets and powered by machine learning for performance forecasting.
78%
Match prediction accuracy
Real-time
Live scoring + leaderboards
Multi-format
Single & double elim, round robin
The Problem
Sports organizers relied on manual spreadsheets and disconnected tools to manage tournaments, resulting in delayed scores, inaccurate rankings, and zero predictive insight into player performance.
Tournament directors were keeping live scores in shared spreadsheets. Three rooms, fifty matches, one source of truth — and it was usually wrong.
The Solution
Designed a real-time tournament engine supporting various formats with live scoring, registration, and leaderboards powered by Redis and Django Channels over WebSockets. Implemented a custom Elo algorithm with Celery async task queues. Built a predictive model using Scikit-learn and Pandas for match outcome predictions.
Key Decisions
Django Channels + Redis pub/sub for live state
Live scoring needed sub-second fan-out to leaderboards, brackets, and an admin console at the same time. Channels over Redis pub/sub gave us a single broadcast primitive without standing up a separate WebSocket service.
Tradeoff: Slightly heavier ops than a flat REST API, but the moment the scorekeeper hit submit, every screen updated.
Custom Elo over off-the-shelf ranking libs
Wrote a small Elo implementation tuned for tournament formats — initial rating per division, K-factor that decays as match count grows, optional margin-of-victory weighting. Off-the-shelf libs encoded chess-specific assumptions that didn't fit.
Tradeoff: More code to maintain, but the ratings stayed interpretable for organisers, which mattered when results were contested.
Scikit-learn rather than a deep model
A gradient-boosted classifier trained on past match features (Elo delta, recent form, head-to-head, surface) hit 78% accuracy with a tiny footprint and explainable predictions. A deep model would have needed more data than the leagues had.
Tradeoff: Capped at the accuracy of the engineered features — but kept us out of an MLOps rabbit hole.
The Impact
Achieved ~78% accuracy in match outcome predictions. Enabled live tournament management with real-time leaderboards, eliminating manual score tracking and reducing organizer workload significantly.
With hindsight
I'd swap the bracket data model for an event-sourced log next time — every score correction, walkover, and re-seed is auditable, which is exactly the thing tournament organisers ask for the moment a final goes sideways.