When a complaint pops up so often that it turns into a meme, it’s time to sit up and take notice.

This is the situation Zwift finds itself in this winter regarding a lack of racing category enforcement. Here’s one image often shared on social media when a racer pops in to complain, once again, that their C race was blown apart by riders holding 4.5w/kg.

The Situation Today

Right now, Zwifters can join any race category they wish. (One exception: women-only categories cannot be joined by men.) That means a strong A racer can hop into a D race, or vice-versa.

If the race organizer sets category limits, those are enforced after the race through the community-developed ZwiftPower.com website. Serious Zwift racers know ZwiftPower the only place where “real” results exist.

While races can customize their categorization schemes, the vast majority use ZwiftPower’s categories, which work like this:

(You can know if a race uses the ZwiftPower categories because it will say “ZwiftPower category overrides wkg” at the top of its ZwiftPower page.)

While some may disagree, I think ZwiftPower’s categories do a good job of breaking riders into groups that can compete well against each other.

Yes, the categorization scheme could be improved, and we’ll talk more about that. But there are two much bigger problems with how things work today.

Problem #1: Post-Race Enforcement

Since everything is enforced after the event, sandbaggers can still wreck the race. If you’re an A on ZwiftPower (let’s say your FTP is 325 watts, or 4.3 w/kg), you can still race in the D’s (where FTP should be below 2.5 w/kg). During the race, you may put in hard attacks or take long pulls which change the outcome of the race. Perhaps certain riders will try to hold your wheel and blow up. Maybe some will break away with you, dropping riders who would have otherwise made it to the end of the race with the front pack.

If it’s a chase race you can really mess things up, because your power on the front breaks the system of time gaps carefully set up by race organizers. Example: the race organizer may have the D category begin 2 minutes behind the C’s, knowing that the more powerful C’s will catch up to the D’s near the end of the race given that time gap. But if you’re on the front of the D’s putting out A power, the C’s will never catch your D group.

And here’s the kicker: at the end of the race you won’t see any warnings at all (apart from angry messages sent by legit D racers). You’ll probably cross the finish line first, and you will show up as first in the on-screen D category results in the Companion app.

Here are three race results screens from recent events. Note how high above the category limits the “winners” are, and how there is zero indication that they are disqualified:

Yes, sandbaggers are removed from the final results on ZwiftPower. But that brings us to the second problem…

Problem #2: ZwiftPower Required

Riders have to be connected to ZwiftPower to show in the final results. Yet so many Zwifters aren’t on ZwiftPower–particularly new riders and those who don’t care much about riding in the correct category.

The end result is that 50 people may be in race, but only 35 are registered on ZwiftPower and thus show up in the final results. (I call it “grading on a curve” because whenever I check my final results on ZwiftPower, I’m almost always a place or two higher than the in-game results showed.)

How Big Is the Problem?

It’s fine to say there is a problem… but do the numbers actually back it up? I took a quick look at today’s race results on ZwiftPower, and selected four races that had a decent number of participants. I didn’t pick and choose to support my theory–these are just the first four I selected.

For each race I looked at the total number of riders who entered, how many of those riders weren’t signed up for ZwiftPower, and how many were filtered out for breaking race rules.

  • Crit City (see on ZwiftPower): 257 total riders, 85 not signed up for ZwiftPower, 22 filtered.
    Result: 41% of participants don’t show in the final results.
  • 3R Richmond Flat (see on ZwiftPower): 269 total riders, 170 not signed up for ZwiftPower, 22 filtered.
    Result: 71% of participants don’t show in the final results.
  • EVR Asia Race (see on ZwiftPower): 155 total riders, 73 not signed up for ZwiftPower, 13 filtered out.
    Result: 55% of participants don’t show in the final results.
  • The Friday Criterium (see on ZwiftPower): 145 total riders, 47 not signed up for ZwiftPower, 18 filtered out.
    Result: 45% of participants don’t show in the final results.

Wow! I honestly didn’t think the numbers would be that dramatic. If we add those up like it was one big race, we end up, on average, removing 54% of the riders from the final ZwiftPower results.

A Dilemma

My educated guess is that the percentage of racers not using ZwiftPower is much higher today than it was a year or two ago. With Companion offering what appear to be legit race results, many riders don’t see a need to hassle with ZwiftPower. Heck–many racers don’t even know ZwiftPower exists!

So we’re in this weird situation where we say that the final results are on ZwiftPower–but if half of the racers aren’t showing up there, can we really call those results valid?

I don’t think we can.

This means we’re left with a choice between two insufficient options: Zwift’s results which include sandbaggers, or ZwiftPower’s results which leave out many legitimate racers.

The Way Forward

Most of what I’ve written above is common knowledge among experienced Zwift racers. I only shared it to make sure we all know where things stand, so we can agree there’s a need for change.

So what is the way forward? That will be the topic of some upcoming posts, but let me share a few ideas today.

Keep It Fun… for Everyone!

Zwift has succeeded because they’ve made indoor training fun. And that should be their continued goal as they tackle the race categorization challenge. Racing is fun because it’s good training spurred on by a spirit of competition, but if the competition isn’t fair, the fun goes away.

It’s worth mentioning that the sandbagging problem disproportionately affects the lower categories. You can’t sandbag in the A’s, and most riders in the B’s are experienced enough to know where they should race. But the C and D categories get a lot of overqualified racers who really mess up the experience for the legitimate C’s and D’s.

A Phased Approach

Designing a race categorization system for Zwift is no small task. It includes big deliverables like:

  • Designing the actual system on paper
  • Implementing UI elements which make it simple for Zwifters sign up, participate in, and view results of races
  • Coding the backend number-crunching which categorizes riders
  • Building tools so event organizers can use the system

If Zwift waits for the entire system to be perfect, it will never launch. A phased approach is probably wise. Perhaps something along these lines:

  1. Now: simple categorization based on riders’ FTP
  2. Soon: categorize riders based on their phenotype (perhaps using their stored 15s, 1-minute, 5-minute, and 20-minute power bests)
  3. Later: roll out a complete results-based categorization system

A Quick Win?

Let’s talk about #1 above (we’ll talk about #2 and #3 in later posts). I believe this has the potential to be both simple to implement and effective in improving everyone’s race experience.

Categorization would be based entirely off of each rider’s saved FTP number, meaning Zwift has no additional data to crunch. Category limits could be exactly what ZwiftPower already uses (see above).

Example: my FTP is 300 watts, and I weigh 80kg (3.75w/kg). Standard categorization scheme is:

  • A+: FTP above 4.6w/kg and 300w
  • A: FTP of 4.0-4.6w/kg+ and 250w+
  • B: FTP of 3.2-4.0w/kg and 200w+
  • C: FTP of 2.5-3.2w/kg and 150w+
  • D: FTP below 2.5w/kg

When signing up for the event, I would only be allowed to join the A+, A, or B categories, since my FTP indicates I’m too strong to race the D’s or C’s.

Yes, Zwifters could change their FTP to cheat the system. And some certainly would. But don’t you think this would stop most of the sandbagging already happening? I believe it would improve the current situation dramatically.

This simple system could be upgraded to make it more powerful, but if Zwift wants to implement something simple soon, this may be a smart approach to take. Because it’s easy, and it would work.

Plans from Zwift HQ

I should mention that I’ve spoken with folks at Zwift HQ about the need for a better race categorization system. They certainly agree there is a need–it’s just a question of how to best meet that need, and where this falls in the list of priorities.

In the near term, HQ is planning to implement post-event hiding of riders who race without heart rate or use zPower (assuming the event is set up to disallow such riders). Those riders would still be able to race, but they wouldn’t be included in the final results screens.

Zwift is definitely working on bigger race categorization tools and ideas as well–but I’ve been asked not to discuss them in any detail here.

Your Thoughts

What do you think? Is the lack of category enforcement really a problem, and what is the best “quick” solution? Share your thoughts below.

Read Part 2 of this Race Category Enforcement Series >