This week. the first round of Zwift Racing League 2025/26 kicked off with a team time trial on Watopia’s new Southern Coast Cruise route. I knew the rolling roads would present a challenge, and I was also riding with a new squad. Read on to learn how our race unfolded!
On Joining a New Team
Before getting into the story of the race, I want to unpack my experience moving to a new team for this season of ZRL, as there are useful takeaways here for both Zwift HQ and the Zwift community.
I’ve ridden with DIRT since the beginning of ZRL back in October 2020, and this season I was just looking for something… different. Nothing against DIRT, of course. They’re a huge team full of great people who will always have the best acronym-based team name (Dads Inside Riding Trainers). I was just looking to ride with a fresh bunch of folks and experience how other teams work.
Finding a Team
So I put my name out there on the WTRL Zwift Racing League Facebook page, and lots of teams reached out. (Apparently, mid-cat B riders who can’t climb are in high demand these days!) I ended up going with The Coalition because I already knew lots of folks on the team, I like their ethos of fair racing, and they seem very well-organized.
As instructed by their helpful website, I joined the Coalition Discord server and started working through the steps to fully join the team. Honestly, it was a bit overwhelming. There are several things that need to happen in order to get the team kit, join a ZRL team, and actually get to race. But their website and team leaders were very helpful and on the ball, and soon enough I’d submitted my weigh-in and height verification videos, been assigned to a ZRL team, and unlocked the kit.
Development Division
My new ZRL team is Coalition Delusion, and we’re racing in the Lime B1 Open Development league. The “development” divisions are a new feature introduced this round with a lower zFTP cap enforced within each category (e.g., B category zFTP max = 3.79 W/kg). According to WTRL “This ensures a fairer and more supportive racing environment for improving athletes.” But in practice, I think it really means low and mid-cat B riders have a place in ZRL where they can enjoy team racing again, instead of going into the meatgrinder that is B1! (I’ve talked about this at length before, so I’ll spare you the details.)
This Could Be Better
Props to Coalition for running a tight yet welcoming ship. But let’s be clear: Coalition, and all other Zwift teams, are forced to do the work because there’s no other alternative. And that’s just silly, given that Zwift is almost 11 years old, and we’re in our 16th ZRL round.
Zwift should have built teams into the platform from day one, making it easy to connect with others and enabling native team functionality in races. It would have removed barriers to entry and made team organizing and racing even cooler. (And it still would.)
And after 15 rounds of racing, there should be an easy way to find a ZRL team that doesn’t involve posting a message on a Facebook group. That just doesn’t scale when you’re dealing with thousands of riders, and it’s not a user-friendly experience for new riders.
With that vent finished, let’s get on with the race.
Planning + Warmup
While I’ll occasionally skimp on completing a full warmup before a one-off scratch race, I’m always careful to warm up thoroughly before important races like ZRL.
I was already one dirty chai and a few pieces of Neuro caffeine gum into my day by the time I got on the bike at 9:30am, so I was nicely caffeinated. I’d also applied some PR Lotion to my legs (don’t knock it ’til you’ve tried it), then I rode a 30-minute warmup, keeping the effort mostly zone 2, with a few spinups to get my heart rate up in zone 4.
As often happens in TTTs, a teammate had to drop out at the last minute, which meant we scrambled to find a sub. We finally found Adrian, captain of another Coalition team, who was kind (and crazy) enough to join us even though he’d be racing with another team earlier that day.
Teammate Chris M wasn’t able to race, so he volunteered to DS for this TTT. It’s always nice having a DS on Discord who isn’t riding in the race, as they can calmly direct the team, leaving the riders to focus on their efforts.
While warming up, I looked at our team’s final “pull sheet.” This document, put together by our Captain Neil, listed the order we would take our pulls, plus our target pull length and wattage. I noted I was the last rider in the list, so I added a “6” at the start of my name in game. I’d be targeting 350W 60-second pulls, and the wheel I’d be sitting on otherwise was Andrew’s. Simple enough.
After signing into Discord and getting my OBS recording started, it was time to enter the pens. Let’s race!
The Race
This being our first-ever TTT together, I think we were all curious about how well we’d work together. TTTs can get messy real quick if you aren’t organized beforehand or have just one or two inexperienced riders.
But we fell into order quickly right out of the gate, sliding into that uber-efficient single-file formation that TTT riders strive for. Our line looked so good, in fact, that I tried to snap some good pics. Problem was, every time I changed to the drone camera, I would get out of position myself! (Sorry, guys…)
We cycled through our turns on the front, calling out our target time when we hit the front “Eric on until 12:30” and calling out when we had 10 then 5 seconds left on our pulls.
The team was working well together, and Chris was doing a great of DSing, but there were two things I was seeing:
- Our gap to the team ahead (BZR) was over a minute, meaning they were faster so far
- Adrian, our last-minute sub, was struggling to take pulls
You can’t panic in a TTT, though. Plan your race, then race your plan. We had known Adrian might struggle in his second race of the day, so when he decided to drop off around the LAX roundabout, we smoothly transitioned into rotating as a unit of 5.
I wasn’t sure how 1-minute pulls would feel, as I’d always been the guy doing 30-second pulls in the past, usually on teams where most of the riders were stronger than me! But I was feeling good as we kept chugging along. Captain Neil and I were probably the worst offenders when it came to overlapping wheels. I blame it on my lack of recent TTT experience. And I’ll let Neil make up his own excuse…
With 10.9km to go, teammate Rob fell off the back – I’m still not sure what happened, but it sounded on Discord like he said he had to hop off the bike! He went to zero watts for 15 seconds, which would normally be a death sentence in a Zwift race. But he had hopped off on the downhill heading into the Woodside Sprint, which kept his avatar moving faster than if he’d hopped off on a flat or climb.
We eased a bit, and he pushed hard, and we were back together just 40 seconds later. These kinds of events happen often in TTTs and can really slow a team if handled incorrectly. So kudos to Rob for the impressive push to rejoin, and good job to the team overall for easing without easing too much.
We exited the Summit City Velodrome turnaround with 2.7km to go, and up the road I saw we were in a dead heat with the BZR squad, having brought back a few seconds in the last few minutes. This was going to be close!
We held formation until there were just 800 meters to go. Then I decided to power up and go all-in for the final 30-45 seconds, since I had more gas in the tank and could lend a helpful draft to anyone behind. All in to the line!
I averaged 470W for the final 60 seconds, finishing just behind Andrew as the second rider in my team. Our final time, taken off our fourth rider, would be 36:07.609.
Watch the Video
Results and Takeaways
If you’ve ever raced in ZRL, you know what comes next after crossing the finish line: the agonizing wait for the results to show up on the WTRL website!
Usually they show up within 15-30 minutes, but for this, the first race of Round 1, we kept waiting… and waiting…
It wasn’t until Thursday morning, almost 48 hours after our race, that the results table was populated. Apparently WTRL and Zwift were making lots of changes to backend systems and websites in the past few weeks, and those changes, coupled with lots of last-minute team registrations and changes, meant WTRL was scrambling to get results processed and displayed quickly. In fact, some teams got their race passes late, and weren’t even able to race. Ouch.
Read more in this Facebook post from WTRL >
I feel bad for Martin and his team at WTRL, who have been putting in long hours to get ZRL Round 1 launched. I know they’ve been working crazy hard.
But at the same time, it has to be said: this is the 16th round of Zwift’s flagship team race series. The experience should be better. Zwift and WTRL can do better.
Here are the results from our race:
A bit confusing, right? So, Team Ukraine Mariupol turned in the fastest time on the day, and my team (Coalition Delusion) was second-fastest. But (and this is important) one rider on Team Ukraine received a Code 7.
What is a code 7? Well, I searched WTRL’s rulebook and website for a definition, and couldn’t find one. But I did find this in the rulebook:
5.2.7: Racers found to be exceeding the limits in any race and receive a Code 7 or 8 disqualification will be removed from that team and will not be permitted to race with that team for the remainder of the Round. Racers receiving a Code 7 or 8 are encouraged to consider riding for a team in a higher division or category.
Poking around various forum and Facebook comments, Code 7 seems to be defined as “Rider has exceeded Division Power Limits”. Makes sense, as the rider in question averaged 4.681 W/kg for the race, when the zFTP limit for B Development divisions is 3.79 W/kg!
Receiving a Code 7 in a TTT is especially problematic, because in theory, an overpowered rider could tow his team to the line. How can that situation be handled fairly? WTRL’s rulebook says:
4.3.3 C: If a team fields an ineligible racer in a Team Time Trial, the team will be awarded 50% of the League points they would otherwise have earned.
So it seems we both won and lost our TTT. Team Ukraine was faster, but their points were cut in half (and rounded up?) due to the Code 7. In the end, since we received the highest number of points. I’ll consider it a win.
On a pacing note, I think my team did a great job of not going too hard out of the gate, so we had gas in the tank to finish strong. We probably started a bit too slowly, in fact, but this sort of “negative split” pacing seems to be really effective in team time trialing. Well done all, and kudos to Captain Neil, DS Chris M, and Andrew, Chris F, Rob, and Adrian for strong planning and execution.
Personally, this was one of the easier TTTs I’ve raced. That’s not to say it was easy, of course: I was bang on my best power for 2025 in the 32-35 minutes window. But I wasn’t struggling to hold on, and I had a bit more punch left at the end than most TTTs I’ve endured. So that was nice.
At the end of the race, as Adrian was finishing up his ride, we took a Discord snapshot:
See you all next week!
Your Thoughts
How did your first race of round 1 go? Share below…