I’ve been purposely taking on longer/harder races lately in preparation for the start of the big Zwift Racing League this Tuesday. So when I saw that the first race for Zwift Academy was a three-lapper of Richmond’s 2015 UCI Worlds route, I knew that was the perfect event for me. Three laps works out to ~50k, the same length as the Tuesday’s big ZRL kickoff race. And Richmond had some punchy climbs, which is the kind of training I need more of.
I love racing in Richmond, and I’m not entirely sure why. I never win here. But it is the first race route I remember racing, back in November 2015 as part of the ZTR and TFC races.
There’s just something special about the way the course is laid out that keeps me coming back again and again. Will I ever be able to power away from the field on the final ascent of 23rd Street so I can supertuck and stay away from the chasers just like Sagan? Doubtful. But that doesn’t stop me from dreaming, then racing my guts out every time I’m in Richmond.
Warmup
Today’s race was at 7:11am, so I had already chewed my caffeine gum and rubbed PR lotion on the legs well before climbing into the bike at 6:15. I was happy to see the Pace Partners had returned, giving me a chance to spin through Fuego Flats with Coco Cadence and her cadre. (I’m not sure why I enjoy warming up with Coco, but it sure is more fun that going it alone!)

15 easy miles later it was time to head to the pens.
Bike Choice
I’ve been riding the new Canyon Aeroad 2021 lately, because it’s such a freakin’ light bike, while remaining super aero. It’s exactly what I need, since I struggle on the climbs! I’ve been pairing it with the Zipp 858 wheels, only because it’s hard for me to put disc wheels on for a road race. Even a virtual one. Just feels wrong.
When I hit the start pens, I discovered something interesting: everyone had the Aeroad 2021. Apparently Zwift is auto-equipping us with that bike for these races! So watch out, Tron riders – you may end up with a wimpy wheelset when you join the start pens. Double-check your rig.

Route Notes
What I wanted to do was stay with the front of the race over the each of the three climbs we would be hitting on each lap. Three climbs per lap. Three laps. Nine goals.
For those unfamiliar with Richmond’s 2015 UCI worlds route, it’s essentially flat for the first half, then bump for the second half. Here’s the profile:

You’ll only shed a few riders on the flat half of the course – then the fireworks happen when Libby Hill, then 23rd St, then Governor St blow apart the field on the back half. It really is a magnificent race course, even if it destroys me… every… time.
The Start
Predictably, the race didn’t start too hard. We began with 66 riders and dropped a few quickly, but we still had at least 2/3 of the field intact when we hit Libby Hill for the first time. I made sure to position myself near the front (but out of the wind) as we began climbing, giving me a bit of space to drift backward if necessary while still staying in touch with the front pack. It worked like a charm, and I made it to the top with the front riders just a few bike lengths ahead.
One down. Eight to go.
23rd Street comes hard and fast after Libby, and it’s just a straight near-sprint to the banner. I crested the hill in 6th, gave a few extra hard pushes on the pedals to get up to speed, then messaged “Sagaaaaan” as I descended in a supertuck. (Seriously. I could watch his race win on repeat forever.)
Governor Street was the last climb of the first lap, and it’s always a tough one – the longest of the three. I made it to the top in the front group, but it was far from easy. Our group of 66 had dwindled to just 16, and we still had two laps to go. This was going to hurt.
The Middle
Things were tame for the flat portion of the second lap, and I made it to the top of Libby Hill with the front just as one “A. Courts” jumped off the front with one other rider in tow. I couldn’t have chased even if I wanted to, but with 15 miles left I figured those riders would be coming back anyway.
Up 23rd, then up Governor Street. I was still with the front pack, although A. Courts was off the front, and one “mbahgusmbangs” (we’ll call him “Bangs”) had just jumped away as well. How was A. Courts staying away? And how did Bangs jump so hard after such a hard climb? Looking closely at the rider list, my question was answered: neither was registered on ZwiftPower. And both were using zPower.
Cool. No need to worry about chasing them down.
Unless…
Ah, crap. A legit rider (D. Maxwell) had jumped up and onto Bang’s wheel. Smart. Perhaps not entirely sporting by some standards, but it was within the rules, and he was playing the game brilliantly.
As a public service announcement, I messaged everyone to let them know that A. Courts was on zPower, not on ZwiftPower, and therefore didn’t need to be chased. (He quickly replied, in classic zPower Ranger fashion, calling me a “whinging yank.” LOLz. I wasn’t whinging. But I do suppose I am a yank. So he was half right.)

The Finish
With one lap to go, the two zPower Rangers were off the front, with the canny Mr. D. Maxwell in tow. Maxwell was just 8 seconds ahead, but nobody in our group wanted to put in the effort to chase him down on the flats, knowing we would need everything we had for the three final climbs.
I could actually feel my matches burning on each of those climbs. The question was, did I have enough left? I felt I did not. But I resolved to give it all I had.
We had a pack of nine, chasing a pair, with A. Courts alone in front.
We reeled in Maxwell and Bangs on the descent before Libby Hill, then Bangs sat on the front of our group, pulling us along at 5+ w/kg. Ha!
Then we hit Libby for the last time, and the climbers pulled out their big power to weight ratios. Our pack splintered to pieces, with me bunched up near the back with the 9-11th place riders.

Up 23rd Street, things got even more broken up. On the plus side, Bangs had disappeared, leaving us only one zPower rider to chase (A Courts, still over 20s off the front). I was in a pack of 3, representing 7th, 8th, and 9th place. I deployed my feather powerup on the right-hand corner of Governor Street, since that’s the steepest section of the climb. Then I hit the power hard, trying to drop the two guys I was with and perhaps bridge up to a rider ahead.
(Turns out that was the glycogen depletion talking. There was no way I was catching the riders ahead.)
One rider followed my attack: Tharratt. He came around me, then eventually I was able to come around him. As we reached the top of the climb I hammered hard to get up to speed and try to break the elastic between Tharratt and my back wheel. I was on the limit, pushing as hard as I could while watching Tharratt’s numbers to see if he was going to try to reel me in. Somehow I managed to stay just ahead, crossing the line totally exhausted in 7th place.
See my activity on Zwift.com >
See my activity on Strava >
See race results on ZwiftPower >
Watch a video of the race:
Takeaways
This was a tough, tough race. I could tell because my legs were sapped the next day for Sprintapalooza. That said, I think it was great training for Tuesday’s big ZRL kickoff race with all its punchy climbs and longer distance.
I’m not sure I could have played this race any better than I did. Richmond’s climbs kick my butt every time, and having to take them on three times put me over my limit.
My only real takeaways here are for Zwift HQ, actually. First: please stop holding races where we’re all stuck in the same kit. We know this is a Zwift Academy event – we don’t need the jersey to remind us. And it’s super-difficult to know who is who in a race where everyone is in the same kit (and on the same bike)!
Secondly: please roll out your anti-sandbagging tools soon, and/or make it so race organizers can hold events where zPower riders are barred from entry. And if a rider is over the stated category limits when they cross the finish line, for heaven’s sake, don’t show them on the leaderboard! That just reinforces their behavior, which means one rider will continue to negatively impact everyone else in the event.
In lieu of the fixes above, I’ve taken the liberty of editing the results screen from this race:

Your Thoughts
Share your comments below!
A. Courts CCCP rode 4.6 w/kg @ 134 HR!! Give that man a pro contract! That’s what Zwift Academy is all about right? Stop being so jealous of other stud specimen riders, Eric. The only thing better is when A. Courts CCCP crashes my C Race division. Zwift Racing is BROKEN. Been that way for 4 years and counting and Eric Min doesn’t care. Sad.
To be fair, it’s been a while since a zPower ranger affected a race I was in. So in the Bs at least, it’s not a massive issue that ruins everyone’s experience every time.
But it’s worse for the Ds and Cs, as you mention. Much worse.
What happens more often in A races is that an A+ racer creates the same dynamic. I try to just go with it because it’s rare that Zwift hosts A+ categories in races, and even when they do, that category is often just a few riders, which makes the race boring. Most days, the A pack can deal with an A+ rider or two, and a team at that level can work together, say, to put their top sprinter in a good position to compete even with the A+ rider trying for a prime. Or the A-level diesels can do what good domestiques have always done: Follow the A+ rider on a breakaway, stay on his wheel, but never help off the front. That usually brings the A+ rider back, and when it doesn’t, the domestique can sometimes get a podium position. (I once got a second place doing this on a short race. First place was, shall we say, out of reach 😆)
But that’s at the level above B, where people are all in good shape and have been doing this for years, if not decades.
Eric, every single C race a B, A, and even occasionally an A+ rider will join (not kidding). They attack over and over, and almost always destroy the race dynamics. I wrote an open letter to Eric Min on Slowtwitch. Jordan Rapp from Zwift was nice enough to respond, but his response wasn’t encouraging.
https://forum.slowtwitch.com/forum/Slowtwitch_Forums_C1/Triathlon_Forum_F1/Open_Letter_to_Zwift_HQ%3A_Dear_Mr._Eric_Min%2C__P7329160/
I’ve never done that, but think about this. If you’re a low cat. A racer and your race has 2 A’s and 6 A+ racers, I can totally understand that low cat. A racers wants to join the B cat. and have a much, much higher quality race. The alternative would be getting dropped early on and having to ride most of the race alone.
Seriously. Y’all seem to have no idea what it feels like having to race in cat. A. While cat. B is has a lovely 3.2 – 3.9 w/kg boundary, cat. A is from 4.0 – 6.0. That’s even worse than a B sandbagging in cat. C. Too bad y’all don’t understand.
There are a number of admittedly good reasons why it hasn’t been rolled out more broadly. I actually wrote the code that does the “green cone.” But there are some significant limitations with it which is why it hasn’t been rolled out more broadly. I originally built it as an interim step to a larger system that was shelved; so now we’re doing the work to figure out what needs to be done to actually make this a more complete feature.
Is this the reply? Because hearing that Zwift has shelved any changes to the cat system is indeed very discouraging.
Just stop people entering a race on zpower, just stop people racing in categories they are not registered under in Zwiftpower. These are races, not Grandfondos.
A race is a race which means it needs rules. Rules are for the minority, not the majority of people, just like in real life – you are not suddenly going to loose thousands of Zwift subscribers by making racing fair. Min goes on about us racers being a minority.
I disagree that it’s worse for C and D. Most cheaters aim for winning overall, so I feel cat. A racers are more affected.
Hey Eric great write up as usual. As a fellow 82-83kg rider I feel your pain on the Richmond climbs, but it is such a great racing circuit. As a Cat C racer who fights for podiums, it is frustrating that the lead group is normally dragged along by a group from the category above. Quite often it feels more like a B race and is almost impossible (unless you have XP live view open on a phone/laptop) to know who are the legitimate riders for our category. Sigh, I hold out little hope of Zwift fixing this any time soon, or any of the other many problems. P.s. when will you be writing you part 2 thoughts on the $450Mil investment round? It would be interesting to hear your thoughts on what happened to the UI update? Thanks for all your great work!
Simon from the podcast said the UI was really just to help Apple tv users with the stupid remote. It would have disappointed many.
Have Zwift ever said they are likely to introduce the option to exclude zpower riders from races? Seems difficult as they are effectively excluding paying customers from some of the content. For the record I’d like this option
At 98 kg I was more than twice as heavy as some of the women in my (D) ZA race on Thursday but I had read something you wrote about the course on Wednesday and then went and rode a lap of it myself as recon. I went into it worried that the field was just going to ride away from me on the hills so I vowed to try to hit them ahead of the field if I could.
I was in a work teleconference until about 15 minutes before my race so I didn’t get a good warm-up. When two ladies darted off for the first prime I decided to stretch my legs a little more and stood up sprinting after them. We slowed down (as you do) waiting for the field but we weren’t going that hard and the field wasn’t coming. We ended up working together to put a sizeable gap in.
On Libby hill one of the sprinters fell off and it was down to me and the other sprinter. We slogged our way up 23rd Street Our gap on the field was holding strong so I made sure to use my weight to my advantage to go downhill very fast, and the gap increased. We slogged up Governor’s and I fully expected the sprinter on my wheel to fly around for the lap but she didn’t.
The field was maybe 30 seconds behind going into the second (and final for us) lap, the woman between us maybe 10 seconds back, and there was still a sprinter on my wheel. I tried to get her to help share the work to keep us away but every time she was in front we dropped down to 17 mph. I knew that wasn’t going to do it. She went for the first sprint and I let her but watched carefully developing a plan to get away.
I tried to lose her a few times and called my husband on the phone and asked him if he had time to come downstairs and read things for me. (My eyes are not great so although I can read my own speed, Watts, and HR, I can’t actually make out the stuff on the right for how close I am to other riders – all numbers ahead of this were guesses.) He came down just as she caught me again and told me the other woman was 17 seconds back and the field was about a minute back. (A minute! I couldn’t believe it!)
On the second sprint the sprinter with me went and I let her, but then I timed my own just as she slowed for me afterwards. I gave it everything I had and got an achievement for going over 700 Watts for the first time. She lost contact. I pushed a big gear and sat up taking deep breaths on the descent, knowing that the three hills between me and the finish were either going to give me a win or crack me. The gap grew.
I dug deep and wouldn’t let myself drop below around 3 W/kg on Libby Hill (a pace that was really hard for me) and cursed when I got a truck Power Up at the top. My husband reminded me to use it anyway, for maybe if I was lucky I could get a helmet or feather next. I did and got the feather.
The rest of the race was a pile of pain. I pushed as hard as I could on the downhill after 23rd Street and brought my gap to 40 seconds. The two sprinters behind me met up and looked like they would be working together to chase me down but they separated on Libby Hill and never met again. I deployed my feather when the grade turned orange on Governor’s Hill and kept telling myself that it could only hurt this badly for a few more minutes.
My husband sat on the couch silently. I worried that meant bad things and truly dug as deep as possible. The finish doesn’t have an overhead barrier – just a line on the ground – and I didn’t know where it really was. It was a surprise when the screen changed showing just me, by myself on the finisher’s list. I slow pedaled and stuck my arms up in the air and my husband congratulated me. He went to my computer and gave ride ons to my competitors as they started coming in… 45 seconds later. Yes, I had made up time on the hill against a sprinter who weighs half of what I do.
I still can’t believe that I won. My output average was 2.4 Watts/kg, appropriate for my category and lower than the women who came in 2nd-4th. I got away after the first sprint and stayed away, and then managed to lose the sprinters on my wheel and time trialed my way to the finish. It’s crazy and yet it happened less than 48 hours ago.
I suppose that if I want to repeat performances like that one I should kit up and go do ZA Workout #2 now…
I love it! Way to race smart, Kelley.
We should publish a version of this as a “How the Race was Won” story! Interested?
I was thinking the same thing. Awesome story.
I’d love to do that. Do you have like a template you could send me with the headings, or how would that work best?
Email sent!
This is what’s confusing about the ZA “races”, they are officially group rides, so forget anti-sandbagging and zpower issues you mention – it’s perfectly legal for a A racer to race and win D grade. I’m actually surprised your “B” race wasn’t smashed by A graders.
This a very odd decision by zwift. One of many when it comes to “races” recently.
Yeah, it’s weird – they show up as group rides on ZwiftHacks, but the race I wrote about above shows up as a race in ZwiftPower. Not sure what’s going on…
Strange might not be the right word… A ZA Road “Race” from today — https://www.zwiftpower.com/events.php?zid=1113172 — definitely shows up as a race in ZwiftPower, except no w/pkg limits are enforced. The C category was won by someone with no HR and 4.2w/kg, and Zwift Power still shows a gold cup next to their name along with a points increase from the race.
I don’t know if it was advertised as a race on ZwiftHacks, but it definitely was per the route description. ZwiftHacks might not classify it as a race because no sane limits are being enforced in the results on ZwiftPower. And that’s probably the right way to look at it.
This isn’t the first time I’ve done a Zwift HQ-run “race” which doesn’t actually enforce category limits. I’m pretty sure this is because Zwift isn’t checking the right options on ZwiftPower. I really hope this doesn’t mean that will become the status quo for _all_ race results going forward on ZwiftPower, unless Zwift decides to actually roll out their real-time category enforcements (cone of shame, etc).
And look, I get that the w/kg categories are completely arbitrary, somewhat stupid, and favor heavier rides for a given w/kg limit. But if you’re going to attempt to split up the field using an arbitrary measure why not actually do that instead of pretending to? It didn’t bother me too much for today’s race because I knew what to expect, but there were several new riders today for whom it must have been a pretty disheartening experience.
You won’t find the ZA races under the “race” selection on the companion app, they are listed as “group rides”. It’s all very odd and really shows a lack of consistency with big events these days.
Yeah, it’s annoying that ZwiftPower is awarding points/places for a non-race race. Grumble grumble.
As person who races CX who just started zwift in the last few months with classic cyclops Fluid 2 trainer mainly to get fitness lost in the pandemic, fire smoke, and many heat waves. Held off on zwift for a couple years preferring to ride outside till I could not in the current situation. I am trying ZA for fitness reasons alone. In my 30s and do no care about the pro contract just getting a workout in and improving myself. Due to I cannot afford a smart trainer now. I am on zpower with duel recording HR and speed/cad which I always when riding out the road. I am looking for a smart trainer used in good shape with my limited price range or saving to buy from LBS. I understand the zpower situation with computer adjusted power output based on speed/cad/ HR which I use all three. The complaints have merit but not all new riders on zwift have access to smart trainer due to money or availability to get them in stores wher they live. With the massive increase in zwift riders there is going to be some amount time for every one to get a smart trainer. The second wave will come soon as north hemisphere winter comes as numbers of new riders go up. If I do race or events after ZA I will just sign for the lowest group (D) as that is fair based on my w/kg and on zpower. I have no companion app as no smart phone either. I am suggesting a race group of zpower racers only to help solve the problem if the numbers justify it for the event/race. If pre-pandemic people on zwift have the money and the availability to get a smart trainer they do not then something is wrong.
Nice! I started on a Fluid 2 as well and moved to a smart trainer. That is a pretty solid unit, Zpower will overreport until the fluid warms up and then is mostly accurate unless you do a lot of interval work. Any extended time above ~300w, or sprint work past 600+w, and the unit can’t dissipate heat quickly enough at which point it will underreport so that you feel like you’re riding through mud. Sticking a fan on the resistance unit helps a bit for that.
As for races on the Fluid 2, I don’t think anyone cares too much as long as you stay within your w/kg limits and your HR generally correlates with the effort you’re putting out. It’s the riders who are averaging 350+w with a heart rate of 120bpm in lower categories (B/C/D) that are the ones who blow up races and draw the sandbagging complaints. Those are the Zpower Rangers that Eric mentions in his articles.
If you get more serious into racing you might consider looking for a power meter, something like the stages single-sided crank or Favero Assioma. Cheaper than a wheel-off smart trainer and something you can use outside (well, maybe not the pedals depending on how rough your XC routes are).
But really, if Zwift just put all Zpower riders in their own category or categories, that would go a LONG way to addressing most of the issues people have with including them in races. Or, you know, just have Zwift actually enforce the category limits they advertise for races.
Thanks for the info on how the fluid 2 works in zpower. Always had reservations on accurate it was in zwift. Just finished CA challenge and starting Italy. Holding off on Everest/Tron for big climb days. Doing ZA to challenge myself and felt the muddiness in the sprint workout. Thanks for the advice on the power meter. My curent road bike only take 700X23-25 tire in back depending on the brand is my zwift bike, done for road riding. Removed the caliper brakes and put on the older road frame the brakes came on. Prefer wider tires on my local rough roads so will be using my CX bike with cantis as my every day bike and event bike due it can do the wider tires. Change tires as needed. I am solid zwift cat D for now. Wish zwift would enforce some guidelines in racing with cats. Local CX races can be in pain in that regards so I understand situation.
Are the ZA races each only available for a set time or will they be run throughout until the end of ZA after their initial start dates?
They are each only available for a set amount of time. The first ZA races are Th-Su this week and that’s it. Make sure you do one today or tomorrow.
any confirmation of this, that Race 1 won’t come back at the end of Nov?
It looks like maybe they’re just having the races on Thursday-Sunday each week? I see race #1 is scheduled for those days for the coming week….
Not really sure what they’re doing, but my guess is race #1 will be available on Thurs-Sun for the first half of ZA, then race #2 for the second half.
I was definitely wrong about this. The ZA requirements interface last week only gave me options for Race #1 for Oct 8-11 but today that same place gives me scheduling options for Oct 15-18.
Nice work Eric, I was also in that race. A momentary lapse of concentration (and leg power) got me dropped at the end of lap 1. A tough old race for sure, roll on Tuesday!
When is Zwift gonna dedicate some resources to finally end the fucking sandbagging? It’s a fucking joke.
When you listen to Min’s pod cast it really seems like racing doesn’t mean much to them. They make it very clear that racers are a minority. Perhaps one day an alternative will appear and Zwift will remembered like Nokia or Blackberry?
https://zwiftcast.podbean.com/e/episode-90-zwift-ceo-eric-min-discusses-2020-and-zwifts-new-thinking/
One could argue that the Zwift Racing League’s use of the new anti sandbagging is Zwift doing exactly that. The league is being funded by Zwift, after all. Certainly if the anti sandbagging tools work well for ZRL, we’ll see them used elsewhere.
Surely, and the way I’d code it, would be for all zPower riders to ‘see’ the race (so think they are in it) but for everyone else they are ‘invisible’, so they don’t affect the race dynamic. Everybody is then happy and no paying customers get pis*ed off. Simple, non?
Works for me.
Exactly, I bet even I could code that feature. ha ha
I believe this system is already in place for some public accounts in gyms where you can join races but don’t affect the other riders at all.
Just finished ZA Race Cat B. All B Riders, no sandbaggers, no ZPower rangers… Nice ride, 7th place, lost podium in the final sprint.
Couldn’t agree more with your takeaways for Zwift. Unfortunately, they never listen to their customers. Can you write about the highly unusual distribution of A+ riders in races? I’ve done and seen so many races where the bulk is cat. B and C., as expected, but then you have an equal number of A+ racers as A racers. Far from being a normal distribution!
How have people managed to get in to a ZA race already? I don’t have any new ZA activities availably again until Thursday.
They were scheduled for last Thursday thru Sunday. Appears they may do the same thing each week.
Or how about Scottie Weiss showing up in the Sunday ZA A race and blowing the field of A+ riders up on the second lap 😅😅😅
I finished third but man he blew the field to bits. No one could race after a lap of trying to bring him in. We all whimpered across the line having burned all our matches on lap 2 of 4.
Hi Eric, I assume ZwiftPower just eliminates anyone like A.Courts the zPower ranger? Am I right?
Correct! I finished 7th on Zwift, but 6th on ZwiftPower for that reason.