I knew what I was getting myself into. Sort of.
By my count I’ve ridden around 60 laps of Richmond’s 2015 UCI Worlds course in my storied Zwift racing B-cat career. It’s a route I know like the back of my hand, and one I love to race.
But it’s also a brutal course for me. Libby Hill puts me on the rivet. 23rd Street burns another match. Then the long slog up Governor Street drains whatever I’ve got left.
And this was the third week of Zwift Racing League – but really the first week, because the first two weeks had been used as qualifying heats to place us in competitive divisions heading into this third race. My team had done well in the qualifying heats, placing first in our division – so we got placed in one of the top divisions (EMEA E2 B1). Scouting the other teams, it was clear we were up against stronger riders than the previous weeks.
This was always going to hurt. I just didn’t realize how much.
Warmup
Our race kicked off at 11:20am, so I ate a good breakfast (oatmeal with blueberries), got a few hours of work done, then turned my attention to race prep.
Three pieces of caffeine gum got 300mg of elixir in my veins. PR lotion on the legs got the bicarb into the system. And I even drank a terrible cup of beet juice from a can of powder I found sitting around. Why not?
Then it was off to Tempus Fugit for a warmup. Where I ran into a bit of a hitch – the built-in Bluetooth on my Zwifting PC wasn’t working! I could connect up via ANT+, but I knew from past experience this was a bad idea – I’m pretty sure a nearby neighbor has their WiFi on a channel that interferes with ANT+.
So I rebooted. Viola! Bluetooth was back. Assioma Duo pedals connected via Bluetooth, along with heart rate and my KICKR 5 via ANT+. I clicked to join the event early, saving my spot near the front of the line. (It’s like a virtual call up, except you qualify by clicking fast instead of being fast.) Then I left the event and rode for a while, putting in a few short efforts to get my heart rate up. Soon enough, it was time to join the pens for real. Let’s race!
The Start

Knowing we had a lot of strong riders in our group of 137 Bs, I stayed very alert near the front of the pack as the race began. I didn’t want to miss the big move if a strong team decided to force a split early.
But that didn’t happen. Not even close, in fact. I averaged just 318W in the first 2 minutes in order to stay near the front – lower than most races.
Through the first sprint, then the second, the pace picked up a bit – but not enough to make it a sufferfest. Clearly, riders were keeping their powder dry, waiting for the climbs on the back half of the first lap. The punchy climbers wanted to put in big digs on the climbs in order to drop the sprinters. And the sprinters (like myself) were trying to conserve as much as possible, know we’d need every bit of power we could muster in order to hang onto the front of the race.
The First Climbs
As we neared Libby’s cobbles, riders began to push for a position near the front of the pack. I slid into ~50th place, then activated my feather powerup (along with half the peloton) as we hit the cobbles:

I hadn’t even reached the final turn when KOM times began popping up… 1:13. 1:14.
This was not a good sign. My previous best up Libby Hill was 1:27.
I kept hammering, knowing this was the move. Came over the top in 39th place, with riders strung out up the road. No powerup. %&#! I pushed the grab the wheels ahead, but I could see a front pack coalescing 10 seconds up the road. Hammer the descent. Sprint up 23rd Street, channeling my inner Sagan. The front group was just 3-4 seconds ahead, so close!
Then they crested the hill and flew away, and my heart and lungs gave up. That was it. I’d lost the front. I’d lost the race.
The Chase
Within a minute or two, a chase group of ~20 riders had formed behind the front pack of ~25. I couldn’t get a precise count, but I knew the front group didn’t quite have 30 riders in it, which meant a handful of riders from this chase group could still get extra points. (Zwift Racing League is entirely points-based, and you are awarded extra points for 1st through 30th place across the finish line. 31st and slower all receive just 1 point.)
It would have been easy to just say “I probably won’t finish higher than 30th. I’ll just sit in and get my extra point.” (And honestly, this is something I’d like to see changed in the way ZRL points are structured – awarding extra points down to 50 or more places might make things more interesting for riders who aren’t in the front group.) But I resolved myself to go all in and do everything I could to get extra points – to finish in the top 30.
First order of business… recover. On the flat half of the second lap, I took it easy. We all did, I think! I averaged just 258 watts for this portion. A welcome respite.

The Finish
Heading into the second Libby climb, DIRT teammate Tim Hanson (who was riding for a separate DIRT team in this race) messaged me: would I want to follow his wheel as he put in a suicide attack heading into the climb?
Tim is a strong racer, but was convinced he didn’t have the legs to hang with our group over the final climbs of the race. So he wanted to put in a final dig to help a teammate.
At first I declined – I wasn’t sure how strong I’d be on these climbs, so putting in an extra attack seemed a bit foolish. But then I remembered that, when I get dropped from the front of B races, I’m typically able to finish at or near the front of my chase group. Maybe I was one of the stronger riders in this bunch, and a quick dig would thin out the pack?
I messaged Tim and told him I was in. Nothing ventured nothing gained, right?
Soon enough, he messaged “Go” and it was on! I activated my aero powerup, got on his wheel, and jumped away from the pack before the Libby KOM line began. The front pack was just 15 seconds ahead… so close, yet so far away. And my chase group was just 2 seconds behind, but closing fast.

Tim dropped off, and I was in no-man’s land, in 24th place. As I hit the cobbles, the front of my chase group came around me. “Don’t get dropped now!” I told myself. My attack hadn’t shed a single rider, but it had certainly made them work harder heading into this tough climb. If I could keep pushing and hang with the front of my chase group, I would have a reduced pack to contend with for extra points in the final minutes.
Over the top of Libby we were strung out, with the front of my pack a few seconds ahead. Those were the extra points. If I didn’t catch them now, all the hard work would have been for nothing – I would earn just one team point, the same as if I’d finished in last place. I pushed hard, activating a draft boost to help me get back in touch. “YOU GOT THIS!!” Tim messaged from 17 seconds back. That’s a solid teammate right there, folks. “Don’t let Tim die in vain!” I told myself.
Up 23rd street, I was back in the group, which had been reduced to only 12 riders. Much better odds.
I used my last powerup, a feather, as we turned the steep right on Governor Street. Riders began to hammer off the front, but I knew we had a long way to the line. We turned left onto the finishing straight, and I was in 30th place, with other riders nearby. Extra points. So close…
I shifted down and stood up to hammer the final stretch, but I was so gassed that my form was terrible. I sat back down. Shift up. Tighten the core. High cadence. All in to the finish.
29th place. 28th. 27th. 26th. I was in a dark place, emptying the tank and then some. How was I still pedaling? Monica was yelling and jumping around, “Go go go! You’ve got this!” My 17-year-old daughter was watching from the doorway, no doubt horrified, wondering how anyone could work this hard at a video game.
Watching the video replay, I almost caught the next guy up the road… but just missed doing so as a rider from behind pipped me at the line. 27th place.

See my ride on Zwift.com >
See my activity on Strava >
See race results on ZwiftPower >
Watch the video
Team Result
The race results are still being finalized by WTRL, but ZwiftPower currently shows me in 22nd place, with my teammate Scott Olsen finishing in the front pack in 17th place. We are the only two from our team of six who got extra points, which probably places us somewhere near the bottom of the top 1/3 for this race.
One of our strongest riders encountered a weird Zwift mechanical – he wasn’t getting any draft effect! He got spat out the back quite quickly. Bummer.
Takeaways
I’m not sure I could have played this race differently for a better result. That front group of riders was simply too strong for me to hang with, so it was really a question of who I could beat in our chase group. Did Tim’s kamikaze attack help me? I think it probably did, but it’s hard to say for sure – perhaps sitting in and conserving would have left me with a bit more in the finish.
That was the hardest final minute race minute of my life. I gave it all I had, and I’m still feeling the effort 2 days later! Looking at my power curve in Strava, the final 7-8 minutes of this race were a new power PB for me in 2020. 351W for 8 minutes – happy with that.
The more I race against top Bs on Zwift, the more I’m convinced that 1-3 minute power is the trick to doing well in most Zwift races. Sure, a high FTP is important, and you’ve got to have a decent sprint if you’re doing flatter races. But it’s that 1-3 minute power that lets you hang in on the short climbs that break up the pack and force the key selections. I’m going to do more training in that time window, since 1-3 minute power is not my strength.
Your Thoughts
Did you race on Tuesday? How’d it go? Share your story below!
Awesome write up … I was yelling “Go go go!” while reading. 🙂
An, thanks man! I could have used you hear in the pain cave! 😁
Completely agree on the 1-3 or maybe 1-5min power being key to most Zwift races; along with the ability to recover from them and repeat as quick and often as required…… then have as much left for the sprint as possible! Great read as ever; I can fully understand the bemused teenager look….. 🤪
Eric – As a pretty new B (and nowhere close to as near the front as you), I completely agree on the 1-3min and sprint meaning more than FTP in most races – it all depends on what the racecourse is though – completely different people win up the Alpe and La Reine. A big reason why I love series, including the ZRL, is that it forces me onto courses that are NOT suited to me. I love Richmond as a racecourse, even if it doesn’t suit me – I don’t have the sustained power for Governor St. 23rd is ENTIRELY in my wheelhouse as a 30-45sec effort, Libby is kind of too long or just a little too short for me. Great race report, and it makes me happy I’m in Americas West B2…….
Emea W 1b, the flat to the first climb, was the fastest I have ever experienced. it didn’t let up from around 330-350W to be anywhere near the front. Absolutely crazy fast, had nothing left the climbs. Be interested to see the final results, once wtrl do their magic.
It’s possible that I might have done better if we’d started with a pace like that. Tucker out some of the climbers, perhaps.
But it’s also possible it would have destroyed me and made me even slower on the climbs!
It definitely helped further define the selection on Libby Hill, two of our best climbers got ejected from the front group before we got there
I was with you all the way on Tuesday, Eric. Fabulous description of your experience. I think riders generally perceive their most recent zwift race as always the hardest effort they have ever made. Funny that you have expressed exactly that!
There’s some truth to that, for sure. The memory of the pain fades with time, but the glory remains forever! 😀
On this finish in particular, though, I remember a thought going through my mind as I went to the dark side in the final 30 seconds. It was something like, “Can I keep pushing this hard? I’ve never done this. Will it kill me?”
Always interesting to read your race analysis. It clearly shows that ZP categories only based on the 20″ perf isn’t relevant. I am in the cat A, but when the “young” A+ are pushing hard for 2-3 min, I can’t do anything (I’m over 50s, with a good FTP, but too old for those brutal acceleration, whatever I can do to improve this…). ZP cat should be based on a mix of 15″, 1′, 5′ and 20′ perf…
Great write up – I raced in EMEA W B2. We managed I think 5th, 8th and me in 15th, plus the guy in 8th took an intermediate (and 2 other finishers). Super happy with it.
I know my short power is really poor, and I also know that on Richmond short power is critical… So I was kinda worried going iron! On race 1 I got dropped at the steep kicker top of Volcano for the same reason. Based on my experience in that race, my goal was to try and stay in touch until the second time up the climbs, then rather than blow myself out trying to hold the group on the climb I would just try to hold a steady high wattage to the line. The only uncertainty I had was the change in field from the first race – would I still be able to hang with the front group that long?
That ended up working pretty well, I gave it everything to stay in touch first time up 23rd Street (so much so my wife came in to ask what on earth was going on!), I actually got tailed slightly at the crest and had to really push to get back on, giving me a max HR I haven’t seen since maybe 2014…… On the second lap I worked to control the front of the group and set up my teammates for the sprint, which also worked well – seems people like to do 5-6 wkg on the short climbs, but are happy to drop to 3.5 on the flats… I can’t hang with that on the climbs but I know I can do 4+ for a 45 minute race, so I was able to keep the pace in the front group nice and high to stop anyone getting back on.
Then second time up the climbs I was tailed as predicted on Libby Hill, coming over the top around 20th. So I tried to hold “300w” (as close as I could manage…) to the finish – which ended up with me passing a few people on the way to the finish, leading to 15th place – a 5 place improvement on race 1!
Disappointingly, Zwiftpower now says “Almost A” next to my category… obviously it’s good that I got better but I really don’t want to be bumped to A… I can see my 20 minute power is top end of B, but as above my short power is puny and my sprint even worse – hence why 2 of my teammates (who don’t have “almost A”) finished above me as they stuck the group over the final climbs while I got dropped. As you say it’s short power not FTP that wins races (in general).
Looking forward to the next TTT! Much more to my strengths…
Also thanks for all you do on Zwift Insider – the route previews and everything else are invaluable.
Well done, Graham!
Tremendous tale! Well told. Almost suspiciously good writing; suspect doping.
Ha! Thanks man.
So I raced twice this week (APAC and America’s West) in the B’s
APAC I went for the first two primes and rolled it in and ended up with 4 points for 10 minutes work.
Americas West I went for first prime (2 points) and then tried to hang on in but ended up getting shelled with 1km to go for 32nd. So 4 x the suffering for one less point 🙁
agree with points to 50 would be a good difference. Basically if you missed the top 30 it is groupetto time.
also think the early sprints before the climbs (or the first prime) should be worth more to encourage more folks to go for he move. Primes near the end just add more points to the front group.
agree on the power profile – I feel relatable 2 to 3 min power seems to be what is needed. Along with some aerobic base to execute the repeatability this is what i am
going to focus on.
In hindsight, going after the early sprint primes would have been a great strategy for a couple of my teammates! Maybe next time.
Great race breakdown! I got popped on the first time up Libby hill also, but the lead group was smaller than in your race. I was able to stay in the front of the chase group for 15th overall.
Richmond has to be one of the best race courses!! I raced in the B’s in Tuesday but in a different division.
i
I found myself attacking on the first rep of Libby Hill, I crossed the KoM line 5th and decided to ease off/rest to surf the wheels in the bunch behind but 10 seconds later (once the blood came back to my brain) realised I should have pushed on and tried to place well on 23rd street, oh well lesson learnt for next time!
That final assent of Governor Street certainly makes you empty an already empty tank. Looking forward to seeing the results and the rest of the season.
As well as the last race always being the hardest isn’t it also funny how, once you watch a live stream of yourself racing you feel you should have been able to go faster/pass another rider. I just watch my attack on Libby Hill and I’m sure I should have pushed harder!!! https://youtu.be/8EtldCRwFYk?t=1077
Oh, for sure!
Is it right to say that 30th gets the same points as last? Don’t you get 2 points, a point for coming 30th and a point for finishing?
3 points for 28, 2 points for 29, 1 point for 30 ….All Community League Riders will then receive 1 point for finishing
Yeah, so 30th gets 2 points total right? In the same way that the winner would get 41 points total? Not that 1 point is going to make the world of difference though!
I originally read it like John explained below, but I think you’re right, Duncan. EVERYONE gets 1 point for finishing. Then the top 30 get extra points. I’ll update the post.
Great report! I’m also a DIRT member on the might Americas East D1 DIRTy Drafters team. Our race being only one lap turned into a drag race from the go. Like you, my teammates and I stayed near the front just in case of an attack. But, the swift pace only lent itself to small bursts at the sprints and then be swallowed back up.
First sprint, I was in a bad spot, and didn’t feel confident in trying to contend, so I sat back in the pack. Second sprint, I waited too long and two guys were too far down the road, but no one else moved, so I figured I’d grab a point if I could and jumped. Luckily, so did another rider who was kind enough to unintentionally give me a beautiful lead out and I got a point without too much effort for this chubby sprinter.
We rolled that way to Libby, and my lack of confidence in climbing made me timid early. I went from 5th to 23rd in 10 seconds and was losing ground fast. Around the first cobbled corner I got in gear and passed several riders. On the downhill to 23rd, I tried to recover some, but the top top 10 were right in front, so I couldn’t let off much.
At 23rd I got a great jump and kept it in the big ring and it “looked” like I’d bridge to my two other teammates in the top 10. But, alas it was a mirage and I started slowing just enough to miss them before my match blew out.On the descent, I was in no mans land with a slight lead over two other riders for 12th. As spent as I felt, I decided to recover and let them catch and try to make as much ground as I could up Governors possibly catching my teammates in 10th and 11tth.
Up Governors. I felt better. Myself, and the two other riders kept trying to lose each other on the initial climb. Eventually, I decided to attack thinking they were probably tired and if I could separate, they would concede.However, they both stayed steady and eventually passed my flailing avatar. I was losing ground and was now 4 seconds down to them at the last turn.
Somehow, I rallied and decided to just give it everything I had to the line. I was in the red, max heart rate, making unnatural grunts while telling myself it would be over soon. My effort was not totally in vain as I nipped one rider for 13th at the line and was only a second from 12th,
I was happy with the effort, but even though it felt like a PR lap, I was actually 20 seconds slower than the effort I had done over the weekend in a 2 lap race…….. Richmond definitely confounds me, but I love racing it.
Spectacular write-up, Eric! That was quite a ride, and it was thrilling to read.
Kudos on a job well done, on a race in which you gave it everything, and on an excellent result.
The no draft thing I’m sure happened to me, I’ve never had to work so hard in a pack before! 110% of FTP in a pack of 80!