For a couple of years now I have harped on (to the great boredom of many uninterested listeners) about elevating Zwift racing to the next level. I have written multiple articles here on Zwift Insider, provided numerous forum rants, and have even had meetings with Zwift directly. My general opinion has been that we should empower race organisers with the ability to customise how race pens are defined – and back that up with a ranking system so there is always something worthwhile to race for, even if you find yourself in a tough field and competing for the win is not realistic.
Zwift has made some great progress in the realm of ‘competition’ as they call it. Category Enforcement (CE) has practically removed the issue of sandbaggers (riders racing below their category) and cruisers (riders carefully managing their 20-minute power to stay in a lower category). However, as great as Category Enforcement is, it has two significant problems:
- Race experiences tend to be consistent for any one rider (always competing for the win, holding on but not challenging for the win, or at the back).
- The Category Enforcement system does not necessarily promote successful racers, which I think most of us would agree should be the case.
Zwift is also aware of this, and recent forum posts have shown they are directing their attention away from Category Enforcement and towards a ranking system based on the ZwiftPower/USAC rating model.
I have some concerns with the ZP/USAC ranking approach, and would rather we look to the gaming world to see how effective ranking systems are already utilised. There are many online games that use systems with extremely clever designs that consider the complexities of frequent many vs. many competitions. One challenge (as an example) is how to rank new, returning, or infrequent players.
The good news is, as we have seen recently with other projects like Sauce4Zwift, you can always rely on the community to come out with something incredibly impressive! This time it is the turn of long-time Zwifter Tim Hanson with his ZwiftRacing ranking system (available at zwiftracing.app).
ZwiftRacing – Overview
The ZwiftRacing system uses the Elo-MMR algorithm to rank riders based on their performances against other racers. Many readers may be familiar with Elo rankings from chess. Elo-MMR is an evolution of this logic for the online gaming world, adding much more intelligence to account for the various ways that users interact with gaming software and acting to limit ways the system can be deliberately ‘gamed’ in a way that lessens the experience for other users. Mathematically it is a Bayesian model, which in simple terms means it provides a ‘statistical belief’ of your ranking, which is updated as more certainty is derived based on additional evidence.
Highlights of the ZwiftRacing ranking system:
- Initial seeding of new or returning riders using power metrics so they do not disrupt lower-ranked races
- Confidence factor built into algorithm so new riders are given an accurate ranking as quickly as possible
- Ranking reset 3 times per year to refresh competition
- 8 ranking levels from bronze to grand champion to see how you stack up against the competition (with sub-levels also supported)
- Accurate ranking changes regardless of how pens are split – this effectively ranks racers in power-based or age-group races, as well as pens organised by ranking itself
Just a glance at the rankings reveals some fascinating information. The biggest takeaway for me is that there is such a strong correlation between riders with both a high W’ (anaerobic capacity) and sprint power and their ranking, whereas threshold power is not so impactful. This makes perfect sense when you think about the majority of Zwift races. You need a decent enough threshold to hold on to the pack, but the key moments in a race are decided by surges or short climbs (short duration repeated power) or a final sprint for finishing position.
This ranking system would also allow for more dynamic races even without completely configurable pen boundaries. As each major ranking has 3 sub-rankings (e.g., Gold 1, Gold 2, Gold 3) there are a total of 15 ranking levels. An organiser could, for example, set Pen A to be Grand Champion down to Platinum 2, and Pen B to be Platinum 3 down to Silver 1. The variety in how these pens are configured would allow for Zwifters to experience many different types of race dynamics – sometimes at the front of the race and sometimes fighting for rankings gains at the back.
The Zwift Community has contributed some huge improvements to the ecosystem as a whole – ZwiftPower and WTRL racing being the two biggest examples. I hope Zwift will also consider this ranking methodology as an option going forwards (along with that all-important race organiser toolkit!) I spoke to ZwiftRacing developer Tim to get some more insight.
ZwiftRacing.app – Interview with Creator Tim Hanson
Hi Tim, firstly I am super impressed with ZwiftRacing.app. Could you talk a bit about what led you to put so much work in? What problem were you trying to solve?
There were a couple of things that came together at a similar time that led to the creation of ZwiftRacing. I’ve been a Software Engineer with an interest in UI and UX development for a long time but my recent experience has been using Angular. I wanted to find a project idea where I could use it as an opportunity to learn React.
Separate from that, I started to think that there must be an alternative approach to ranking riders that can take inspiration from other online video games (like Rocket League for instance). In this type of system, a player’s rating changes by some amount after every event. The direction it changes (up or down) and the amount it changes are dependent on the riders’ finishing position and who the competition was.
Diving in a bit deeper it seems to solve for a lot of the concerns I had about a ranking system, such as accounting for new or returning riders in the autumn, or that it only gives an accurate ranking to riders that race very frequently. Can you speak a bit regarding the ranking system (ELO-MMR) and why you felt it would be a good fit for Zwift?
As you mentioned, this system is based on a concept created for the chess world called ELO and has been extended to fit into the massively-multiplayer gaming space. It does a really good job at evaluating a set of results to determine what changes are needed to each player’s rating.
With this approach, every place matters in every race which for me is the number one selling point. I love the added motivation when I’m deep in the hurt locker with a few KM to go. I’m typically in a place where a few extra places at the line might mean the difference in whether my rating goes up or down.
Additionally, once you have riders into ranks, you can look past the A/B/C/D categorization which is tied to a single data point in a rider’s power profile and to a results-based metric where you are assured to be racing against others who are similar in skill level to you. Like any other video game, the others around you might be stronger riders but perhaps you are better at race craft and can beat them anyway. This is an often overlooked aspect to racing on Zwift. It’s the strong riders who also are efficient in the draft who, more often than not, come out on top.
The ranking reset 3 times a year. What is the purpose of this, and how does it impact race experiences early in the season?
This is another concept that is borrowed from other online video games. Each rider (aside from Grand Champion riders) maintains their current rank (Platinum 1 for example) but their rating within that rank is reset. The other impact to a season change is that the first set of races completed in a given season are more impactful to your rating than subsequent ones.
The main reason why this is beneficial is that it allows newer riders (and riders returning from some time away from Zwift) a quicker path to a rating that is a truer reflection of their power and skill.
How could you imagine Zwift using these rankings going forward as a way to improve racing?
I am sure Zwift HQ have plenty of great ideas for improving the racing experience and community that they don’t have the capacity to move forward with at the pace they would like. But, if I had to imagine an (unlikely) world where they would be interested in utilizing this system, they could eliminate the A-E category system and replace it with a single signup where Zwift would put you in the pen of people closest to your rating among those who have signed up.
Are there any areas where you feel like the ranking algorithm doesn’t do a perfect job? What do you wish it could account for that it doesn’t?
The main issue at present is that points events aren’t supported correctly since each race series has their own point definitions. Those events (ZRL for example) are evaluated as normal scratch races currently. I would love to work with event/series organizers to define those points criteria in a central location so that rating changes could be formulated based on points received.
Do you have a vision to develop it further? What sort of things would you like to do?
Of course. I am a father of three young children so I have way more ideas than time. Here are some of them (some more developed than others):
- Achievements – Building on to the (very successful) badge system that Zwift has, I want to introduce a set of race-related achievements that riders can pursue. I have 71 defined so far. Things like:
- Finished a race in every World
- Won a race in Crit City
- Podiumed in a Mountainous race
- Exceeded 1000W over 15 sec
- Club Rankings – Competition is fun so why not provide a way for clubs to battle it out to see which is best? (DIRT of course)
- Looking for Club/Team – There currently isn’t a place for unaffiliated Zwifters to easily locate a club and/or team that works for them when it comes to grouping up to participate in a race series like WTRL’s ZRL or DIRT’s DRS. I’d love to fill that gap and provide a place for club captains to look for new riders that fit their time zone preferences.
Join the ZwiftRacing Ranks Trial Race!
We are hosting a trial rankings-based race on Wednesday 19th October at 19:00 UTC. You can sign up here. Please ensure you enter the correct pen based on your ZwiftRacing ranking.
Sign up at zwift.com/events/view/3179031
The race is being held on 2 laps of Richmond’s 2015 UCI Worlds route.
Your Thoughts
Please note that ZwiftRacing.app is in BETA. The plan is to assess the feedback and data from each season to make improvements for the next season. Check out ZwiftRacing.app and give your comments below!