Time to shelve w/kg as the category determinant

Races are very popular on Zwift, and I love them too, but they could be much better. The big problem is that the w/kg category system needs to be replaced with something more logical. I know the ZHQ Beta Crit City races are trialing some new ideas, slowing/disabling riders who have entered below their real category, and Zwiftpower filters out the sandbaggers. This is an improvement; however, these tweaks won’t fix another, major problem coming from a categorization based on w/kg.

Here’s what I’m thinking: racing is best when there’s a large field of very similar ability riders, because you have to out-think, out-maneuver, out-sprint, to win the race. You have to ride close to your limit to do well, all the time. It’s at its worst when you’re in a cat in which you can’t stay with the lead group in the first half-mile, every race you’re hoping to find a few others similarly dropped and often end up riding alone for long stretches.

To achieve racing panacea then, all the riders in each race should be able to finish in about the SAME TIME. Right now, that’s not the case, partly because people are allowed to enter the wrong categories, but also because the category system is fundamentally flawed.

It might seem like the w/kg system should even things out, but it doesn’t do a great job, because a heavier rider putting out the same w/kg as a lighter rider will beat them most of the time, more and more certainly as the weight difference increases. I’ve spent a fair amount of time thinking about this, because I’m 67kg and have suffered the consequence of the current system: being promoted out of your current category as soon as you get to the middle of the pack. Bottom line of the w/kg system is that the lightest riders can essentially NEVER compete for a podium, unless they’re pro-level in the A category .

To make the point clear, here’s an example: yours truly. I started Zwifting again in earnest back in December, quickly got bumped out of D as I got my cycling legs back – UPG after my 4th race. Over the next 3 months I entered 23 C races (10 Crit City, 13 others) and finished in the top half of the field ONCE, when I got third in a race with just 7 riders (actually 5thbut two ahead of me got UPG). My 23rd race in C I hit 3.4 w/kg, finished 9th of 16, and finally exceeded the top three-race average C-limit of 3.1. Since then I’ve been in fourteen B races and worked my way up to a best of 3.7 w/kg, with a top finish of 22nd out of 32, when I managed to outsprint nine other riders to the line. To get a podium in B I’d probably have to hit around 4.5w/kg, well into the A cat range.

Don’t get me wrong, I’m still having fun, I join the fastest group off the line I can, trying to find a bunch I can stay with and outsprint them at the end. It’s impossible for me to stick with the lead group (usually the top 60% of the race are in there) for even half a lap without hitting zone 4 or 5 and blowing up my race. This makes sense, because the lead B riders are often within a minute of the A race winning time.

The annoying part for me is when I look at the C group results, because there are ALWAYS a bunch of riders who have beaten my time – without getting WKG/UPG – even when I’ve spent most of the B race drafting in a sizeable group. Surely I (and others at the lower end of B) should be riding in the same race with them, because we’re the same speed racers! My basic point with this post is that everyone would be better served if we did something radical (!) – base categories on a rider’s ability to complete a standard race in a certain amount of time.

So how much overlap is there between race times in different categories? A lot. Below is my analysis of three random (all recent) Crit City races with large fields, as well as one London International race. All four are about 10 miles/16km. I dumped the unfiltered results (so it includes riders with WKG/UPG/ZP, to get an idea of how many people are in the wrong categories) into Excel and converted times to seconds to make calculations easier. The number of riders who entered each of the ABCD categories are shown at the left for each race, and the range of times achieved in each race is shown by the length of the colored bar, to the same scale in all races (see 1 min scale bar). Based on quick inspection of many other races, the four races I looked at in detail are typical. Numbers in overlapping bars mean those riders finished with times in the same interval.

My biggest take-home messages from this analysis:

  • There’s consistent, substantial overlap in times between categories, in all races
  • Much of the overlap is between riders racing in their “proper” w/kg categories , most noticeably between B and C, as well as between C and D.
  • A huge fraction of the leading riders in the C and D categories get DQ’ed (36 of 74 = 49% in C, 32 of 58 = 55% in D), confirming the frequent reports in the forum.

So, how to get people with similar race times into the same races, and get rid of the cheats? Set categories by actual race time AND prevent entry into lower cats.

So, what times could be used for the cutoffs for each category?

I took a look at a bunch of Crit City races and came up with the following times that should split people up into five good categories, based on their best 8-lap races (and indicated on the image above):

  • Cat A qualifying time = 20:15
  • B = 21:30
  • C = 23:00
  • D = 25:00
  • E = new category, free entry, time sets subsequent category, if longer than 25 mins then they stay in E.

Obviously, if people agree with me in principle, we can argue on the specific times, or adjust them from experience in races. My thinking is you could move someone into a higher cat as soon as they finish a race in faster than the cutoff, but it could be three finishes over a certain number of months, or whatever system you want; those details could be decided later.

A system based on actual race times has many advantages:

  • Racing for everyone will be more exciting, because all races will be between much more closely matched riders, encouraging people to keep zwifting
  • Zwifters trying racing for the first time won’t be discouraged so easily by facing B and C (w/kg) riders immediately
  • Data already exists to place riders into new, time-based categories
  • New riders get assigned quickly to a realistic category
  • No benefit to anyone based simply on their weight, all weights of riders have equal chance of winning
  • Weight cheating won’t work any more, because your power to weight ratio is now irrelevant
  • Sandbagging is much more difficult
  • Most races will now behave like a race IRL, with a larger peloton that most riders will be able to keep up with for longer
  • Less depression from riding on your own
  • Much lower chance of being lapped and having lapped riders draft the leaders
  • Bunch sprints for the line much more common in all races
  • Tactical racing will become much more common in all cats, increasing interest
  • More fun for zwifters, more $ for Zwift…

What do you all think?

Apart from the enforced categories, which is Zwift’s domain, that’s literally what I’ve been doing with ZHR since 2015.

I think most racers would agree that we do need a Auto Categorizing System

I would think a points system is the way to go, you beat stronger riders you get more points if you stop racing your points slowly drop down.

One thing I notice is you do a lot of flat races, even in the real world you are at a disadvantage to a heavy strong rider. You should be racing in the mountains.


Respect to the detail you have gone into but I agree more with your definition of the problem than I do with the proposed solution. Two reasons, first the reality is that cycling is not a single discipline sport and certain races should suit certain riders e.g. TT / flat / rolling etc. Zwift done a decent job of varying courses in recent series such as tour for all. Second I think this would require heavy commitment from Zwift to deliver and there are already too many issues and plans for them to take this on as it is. Racing might not be perfect but is rather current state than a fudged fix that’s worse.

@Matthew_Whitwell I don’t think this has anything to do with the variety of courses, match between different riding styles and circuits. The system I envisage could/should be used to give a time-based ranking on a variety of circuits, and the overriding principle remains the same: racing will be the closest/most exciting if it’s based on your ability to finish that course in a specific time, not on an artificial w/kg category that arbitrarily keeps riders of the same ability apart by locking them in different categories. Instead of first/last finishing times being spread over 4, 5, 6 minutes within each cat, they would suddenly drop to 1, 2, 3 minutes. Better racing for all circuits: hills, flats, mix.

I can’t see how this is a “fudged fix”, its more logical and straightforward than the existing system, in which riders can make up any weight they like, add a few kilos if they’re getting close to the w/kg limit. You can’t make up a finishing time - if you want to win you have to race hard.

As far as what I’m suggesting being a heavy commitment to deliver, I can’t believe the coding necessary to pull finishing times is that difficult; surely a few lines of code, additional entry into a database. Enforced entry into specific cats for the race doesn’t seem like it should be anything more than checking the value of one variable and dumping them into one of five race starts. The payoff for everyone would be significant; even the w/kg system would be better if that part alone was done.

1 Like

Think about it from a user experience angle, how do I know what category to enter? Do I need to go look back at some recent rides and try and calculate how long it took me to complete a lap, Zwift doesn’t give me lap time data, so how do I know? And what route do you use to get this data, there are so many options! Crit City is event only, what if I never raced on it before?

Or do I need to export all my data to an excel file and crunch all the numbers that you showed above? No way I’m wasting time doing that.

A points system is the obvious answer, have an E category for first timers to enter and get some points before entering the lower cats. As you win you move up. Pretty simple to understand and execute.


So Zwift have to track the finishing times for every loop and every variation of every route. And a Rider has to have ridden every route. I did a quick count and there is currently 107 routes. So with forward and reverse options and multiple laps we can get to 1000 of different options very quickly.

I do agree the w/kg system is not the best, it was fine in 2016 when we used Excel spreadsheets for racing and there was 30 people racing.


@MRBaldi_T-ZHR Thanks, I’ve noticed the ZHR races, but I’m fairly restricted in when I can ride (and I’m East Coast US), so I haven’t tried them yet. The Hare and Hounds concept is interesting, but I’d still rather a traditional mass start, with a peloton and all the associated malarkey. I’m about to switch to outdoor riding, but maybe in the fall I’ll try one. I just joined the ZHR FB group though, so I’ll see what else is going on there.

I agree with the problem that you’ve defined, i.e. “the lightest riders can essentially NEVER compete for a podium, unless they’re pro-level in the A category”.

Your analysis also reinforces something that’s apparent from skimming through results on Zwift Power - that’s there’s often a big overlap in times between categories and if, somehow, it was possible to apply better or smarter categorisation, we could have much better races - instead of riders with very similar times being split across two or more separate categories/races.

There seems to be some development focus from Zwift on anti-sandbagging measures, which is welcome. Zwift Power’s filtering also retrospectively removes some of the overlap owing to riders in the wrong category. But I’d rather race against 50 riders of a similar ability to me than 25, 10 of whom get slowed down by Zwift or DQd post-race by Zwift Power, whilst there are 25 of a similar ability in the category below who are also getting slowed down or DQd.

So I’d like to see:

  1. A better determinant of categories, to allow riders of similar ability to race each other, PLUS
  2. A simple or automated way to help people enter the right category in the first place, PLUS
  3. Anti-sandbagging/filtering measures

It would be great if Zwift would put some development time towards a solution to the first two points.

@Mike_Rowe_PBR It can be done with no involvement by the rider at all. Zwift keeps track of your times just like it already does for w/kg each race and figures out what your current cat is. You would just sign up for the race generically and Zwift plonks you into the appropriate cat race based on the times it knows you’ve done in the past. Riders wouldn’t have to do, or keep track of, anything.

Points would work as an alternative, but I think a time-based system would get you to be racing with the right group more quickly.

@Gerrie_Delport I agree, it would be impractical to do this for every combo of or track/route, and also not necessary, because most races are held on the same very limited subset of tracks/directions. So, I think you could generate a cat based on performance on a few standard tracks. Crit City seems to be always on the same circuit (that’s a subject for another time!); you could pick a commonly ridden race route for a hillier track, another for a more mixed circuit. Your cat wouldn’t be perfectly matched to every circuit/route, but it would still work better than w/kg overall, and you’d get the experience you have in real life where you do better on certain kinds of track than others.

As far as mountain racing, I’ve been meaning to ask about that, because I think I’m noticing a counter-intuitive effect, where I struggle on inclines relative to other riders. I’m wondering if there’s something in the way my trainer (wheel-on, KICKR snap) is set up? Seems like at my weight I should almost always catch others up on hills, but its usually the opposite where I fall back even if I increase my wattage significantly…

@OT1 We’re on the same page! How we get to racing with people able to complete the race in about the same time is the key to better, more popular, fairer racing.

1 Like

Hi @Justin_Thackeray you may know about the 3rd party site zwiftpower? They run a rankings based system which is not too far removed from what you’re saying. It has in part resulted in a pull towards certain events where the all-star riders in each category race. I have proposed in that forum to segregate the ranking system into climbs / TT / sprints to balance reward across different disciplines and I don’t think that’s too far removed from what you propose.

In the end Zwift gives you a choice of which race you want to enter and which category. Some like more of a challenge than others and yes it can result in sandbagging but you get the option of how much / little challenge you want. While this can be frustrating it’s best of all world as some take it more seriously than others.

If you want to take racing more seriously then I would check out zwiftpower, they do their best to filter riders into correct category ( I was dq this week for being 1w over allowance in a race). Zwift is never going alienate the portion of users who aren’t that bothered even if a lot of us do care.

Zwift can give people the choice to enter any category but if someone is entering a lower cat then zwift should flag or make them invisible if they reach 90% of the cat boundary.
So if a B enter a C race once they do 90%*3.2w/kg = 2.88w/kg for 20 min they get flagged. Or if the reach 3.2w/kg for 1 min they get flagged. Anyone entering a lower cat for a easy ride should not be close to the cat limits.

But I would prefer having every one in the correct cat. If they need a easy day then do a group ride.

If those races/rider aren’t that bothered they should not mind riding in the correct category.

1 Like

I do know it, that’s where I got all the data from for the chart. I rely on it after every race to see how I really did, with the various bits of data they post on performance beyond just time and w/kg. It’s good to have in terms of clearing out the out-of-cat riders from the race listing, but the races themselves remain mangled, and people get discouraged from continuing to enter races when the cats are not enforced during the race. The ZHQ changes are helping to clear things up during those races, and I hope they introduce them into all Crits soon, but the issue of people of the same ability (course finish time-wise) being in different categories is not fixable afterwards at zwiftpower.

Its also unclear to me what the point is of the rankings they show there - are they actually being used for anything? As far as I can tell its a metric you can see but isn’t used to determine anything related to category or race entry. Correct me if I’m wrong, I could be missing something.

I think it is absolutely in their interest to do a better job. If the racing experience was better, more people would get hooked on it and be much more likely to keep subscribing. I know that some people don’t care about racing at all (such as my better half) and are fine just doing rides. I do my share of rides to mix it up (the JETT “2.5-3.2w/kg” rides are friendly and at a perfect pace for me for a less pressured ride over longer distances), but the races are what push me to ride more often, and harder. I think if they fixed these issues with racing there would be even more people brought into the fold and Zwift would see more $.

I’d also prefer it and as I stated in first reply I agree with the diagnosis not the cure.

Even if the system were changed there’s still the issues of weight doping, poor equipment etc hence I never pay any attention to zwift results I only ever check zwiftpower. This has made racing much fairer and sorry less about some of the rogue issues that are there.

How do you base the cats on time when the time it takes a rider to complete the course is greatly influenced by the other riders in the group?

Times will be faster in larger races in crit city vs small races

You can get a faster time on lower power drafting a quick group vs leading a weaker group

While I fully agree the system can be improved, I think part of the issue is that people feel like they deserve to win sometimes. There’s only 1 winner in each class, a win should be rare and difficult. Many of us might never win.


Weight doping would disappear with the system I described; you can enter whatever weight you like, but your time isn’t going to change because of it. Variation in equipment and their calibration means the results we see on Zwift are certainly a poor reflection of what we could all do IRL, but you will never get round that problem. All you can do is compete virtually against another rider in silico; for all you know its an arthritic 95 year old on a steelie, but who cares if they’re matching you, turn for turn, your only goal is to get your avatar over the line before theirs does. IMO that doesn’t take anything away from the excitement of the race.

True, that is a tricky issue. You can see that effect clearly in the races I did back in December and early January, times for all cats were (usually) slower. Maybe adjust time thresholds based on number of riders in each race? Ultimately, the ideal solution would be to use a ranking system based on who you beat in each race, that could be adjusted to give higher weight to more recent races. The effect would be the same - getting closely matched riders into the same race.

I think you’re missing the point. In all cats, your probability of getting a podium increases as your weight increases. Lighter riders get promoted before they even have a chance to compete in each cat. Where’s the fairness in that? All I want is a level playing field and to maximize the number of riders in each race who can complete the course at a similar speed. We would all have more fun.

After thinking about this some more, I think my system would still work well, because it doesn’t depend on you reaching the threshold, or even close to it in every race. If you break it once (or three times in 30 days, or whatever system is chosen), you’re moved into the higher category.

In practice, if we did switch to the system I’ve described, most of us would be assigned a category based on the racing we’ve done in the previous 90 days, probably dozens of races each, and during that time presumably there will be several races with many people entered, you rode in a decent-sized peloton pushing the pace most of the way enough times to get a representative collection of finish times.

When new zwifters appear it would take several races to see what they could really do, but fairly soon they would also have a few races with faster competition combined with a good size peloton.

Here’s the most important point though. The change in the nature of each race would naturally make the system robust: the huge scatter of times we currently see in each cat race with w/kg categories would quickly be replaced by much closer racing, so a much higher fraction of races would have a tight peloton, meaning all riders would get faster times more consistently. It would be much easier to set your fastest, representative time because the conditions to do so would occur much more frequently.