As I started putting together this week’s Tiny Race post (congratulating last week’s winners and announcing this week’s routes), I wrote up a section discussing the new Anti-Sniping rules and various challenges I’ve had trying to roll them out.
That section kept growing, until I realized it had taken over the post, making it rather long and awkward for all the racers who just wanted to learn about this week’s routes.
So I’m doing a separate post instead, a sort of brain dump full of notes explaining what I’ve learned and am learning about race management via ZwiftPower. Buckle up. Let’s go!
Anti-Sniping: How Did It Go?
As you may recall, we implemented a “no sniping” rule for the first time in October 15th’s races. Specifically, if you don’t finish all four Tiny Races in the timezone you race, you’ll be disqualified from ZwiftPower results for whatever races you did finish. Because it’s not sporting to hop into a race with fresh legs when other riders are coming in with tired legs after finishing earlier races.
So how did the new rule work out? Pretty well. Or pretty badly, depending on how you look at it. Here are the numbers of race results (riders crossing the finish line) vs sniping DQs for each time zone:
Results | Sniping DQs | DQ Rate | |
Zone 1 | 1353 | 273 | 20% |
Zone 2 | 1546 | 300 | 19% |
Zone 3 | 475 | 112 | 24% |
Do I like the fact that 1 in 5 riders who crossed the finish line got removed from the final results? Of course not. But do I think it’s fairer to remove those riders, so only riders finishing all 4 races are in the final results? Yes.
In a glorious stroke of irony, I got to DQ myself as a sniper, thanks to a Zwift bug that caused my finishes in race 2 and 3 go unrecorded by Zwift or ZwiftPower. You can see my full 4-race series below… and yes, I’ve reached out to Zwift to see if I can help them track down this bug.
My guess is the “sniper rate” will drop over the next few weeks as riders figure out what’s going on. Or maybe it won’t decrease at all. Here’s why…
ZwiftPower Ranking Madness
I confirmed this weekend that even when you DQ a rider from a race in ZwiftPower, they still “earn” ZwiftPower ranking points. The way it works is so goofy it has to be a bug, not a feature.
When the rider is DQ, their result for the race shows no points. All good. But if you look in their profile, if their race result in that DQ race was good enough to be in their top 5 results and thus boost their overall ranking, you’ll see the DQ race points in that list.
One particular rider from this weekend is a perfect example of how this bug works. The rider finished the first three races, but not the fourth, so they were disqualified from those three races. But if you look at his top 5 points results, 3 of the results are from the Tiny Races he was disqualified from!
I’ve reached out to Zwift, posted a forum question, and posted in the Zwift Racers Facebook group, all to ask if anyone knows of a disqualification code or some other trick I could use to truly remove ranking points from results. We’ll see what I uncover…
Editing Race Results on ZwiftPower
I’ve never seen this documented, so I’ll explain it here in case it helps some other race organizer in the future. Let’s open the ZwiftPower kimono just a bit!
ZwiftPower gives organizers the ability to edit race results in very specific ways. It starts by clicking “Edit Results” from the options menu at the top-right:
From there you’ll see a comma-delimited list of all the results, grouped by category and ordered by finishing order. Each result looks like this:
B, ua, 3, 2707, Eric Schlange [ZwftInsdr], 58160, 3397809063136107568, 0.000,
Those data fields are Category, country, PowerType, Team ID, Name, Zwift ID, Result ID, Penalty (seconds), Notes
There’s a second tab titled “Copy rider to apply edit”. This is where the magic happens. If you copy one of the results from the “All Riders” tab into “Copy rider to apply edit”, you can change the data. For instance, my result in Race 4 was changed from what you see above to this:
DQ, ua, 3, 2707, Eric Schlange [ZwftInsdr], 58160, 3397809063136107568, 0.000, Only finished 2 of required 4 races.
(Note: I added the explanatory note to all DQs, but I can’t see any place it actually shows up in ZwiftPower.)
So edit the results, then click “Update Results” and viola, the results list is changed! (Sometimes it takes a minute or so for the results to be regenerated.)
Changing a rider’s category to another code like “DQ” or “1R” or whatever will remove them from the results. They’ll be visible in the “Unfiltered” tab of the race results, along with the DQ code you gave them.
It’s important to note what you can’t change in the results. You can’t remove a rider completely – you can only edit their record. And crucially, as explained above, you can’t change the points result they earned – all you can do is hide that result. But it will still show up in their Best 5 scores, if the result was good enough.
Time Penalties? Nope.
In what I thought was a stroke of genius, I realized that adding a time penalty might solve my problems. “Perfect!” I thought. “I can add 5 minutes to a sniper’s finishing time and they’ll move to the bottom of the results and not get a points boost.”
Wrong. ZwiftPower still calculates the ranking result based on the initial finishing order. The time penalty changes how they’re displayed, but doesn’t change the points.
DQ Code Minutiae
A variety of codes have been used over the years to flag ZwiftPower results. These codes are poorly documented, and in fact race organizers can put in whatever code they’d like. But rumor has it, some codes behave in special ways.
Early feedback from some of the “snipers” was that they didn’t like the “DQ” tag next to their name in ZwiftPower, so I changed that to 1R, 2R, or 3R, depending on how many races the rider had completed.
But as I pored over the data, I realized that my custom 1R, etc codes weren’t behaving in the same way that a DQ code behaves. To be specific (and I know we’re getting into the tall weeds here), a DQ code takes the rider out of the Race Quality calculation, which in turn modifies the overall ranking points for the race (read how ZwiftPower ranking points are calculated).
But even if the rider’s ranking was taken out of the Race Quality calculation (meaning they finished in the top 10 of the race) they still get their ranking points added to their “Best 5” results, boosting their score. Which is a serious bug, because the rider is now gaining a ranking boost, without “contributing” their own high ranking to the Race Quality score.
Best 5 Score Calculation
Adding to my frustration, ZwiftPower only re-calculates riders’ Best 5 results on a nightly basis. I’m not sure when it happens, but I would guess between 9pm-midnight Pacific time.
So as I’m messing around with various DQ codes, I can’t tell if any of them remove results from the Best 5 list until the next day. Hmph.
Shrinkage Rates
Along with all the silliness above, I’ve also been pondering race shrinkage this week. Specifically, how the rider counts shrink throughout the Tiny Race process.
For example, this is what Zone 2’s B category numbers looked like this week:
- Signups: 193
- Starters: 167
- Finishers: 151
- ZwiftPower-Registered Finishers: 148 (if you aren’t on ZP, you’re not in the final results)
- Final Finisher Count after DQ: 123 (24 riders DQ for racing less than 4 races, 1 rider DQ for no HR)
So that’s interesting – actually a very low rate of post-race shrinkage (final finisher count is just 2.6% reduced from in-game finisher count) if you remove the “sniping” DQs. With the sniping DQs the final results list was 18.5% reduced from the finishers list that pops up in Zwift at the end of the race.
But the story is very different in lower categories. Glancing at the numbers, it appears that shrinkage increases as categories get lower, which isn’t surprising. Look at the D race in Zone 2, for example:
- Signups: 79
- Starters: (unknown)
- Finishers: 62
- ZwiftPower-Registered Finishers: 49
- Final Finisher Count after DQ: 17 (28 riders DQ for racing less than 4 races, 2 rider DQ for no HR, 2 rider DQ for using ZPower)
Without the sniping DQs, that’s still a shrinkage rate of 43.5% (62 finishers, but only 35 would show up in ZwiftPower after HR and ZPower DQs)! Add in the sniping DQs and the final results list is 72.5% smaller than the original finishers list!
Why is this? Multiple factors, really. While some D racers are serious, dedicated racers, many are newer riders who don’t know how Zwift works. So you get a lot more Ds who aren’t even on ZwiftPower, for example. And more Ds who don’t read the event description or follow Zwift Insider and read up on route and rule details. You’ll also see more ZPower-using riders in D than you will in B. And lastly, D racers are by definition not as strong as higher-category racers, so there’s more of a chance they may blow up and not finish all 4 races.
These shrinkage rates bug me, and here’s why: it’s (nearly) 100% preventable. Consider this:
- Some riders are removed from results because they aren’t signed up for ZwiftPower. Surely Zwift knows the ZP registration status of every user at this point. Why not let event organizers require ZwiftPower registration before you can join the event?
- Sniping DQs: these could be greatly reduced if Zwift allowed event signups to “stack” – that is, you sign up for one event, it also signs you up for the others in the set. Alternatively, I think these numbers will decrease as riders learn the rules, and perhaps if I can communicate them more clearly.
- HR and ZPower DQs: these are a smaller problem than the others above, and Zwift has actually just enabled a solution in the past week or so, allowing event organizers to prevent ZPower riders or riders without HR from joining their event.
Wrapping It Up
I’m not going to lie: I’ve asked myself, “Is all this hassle worth it?” I can definitely see why some race organizers just “set it and forget it”, creating simple races that work within Zwift+ZwiftPower’s abilities and require zero upkeep.
But I’m also not interested in hosting “just another Zwift race”. If I’m going to put Zwift Insider’s name on it, I want it to be special.
On top of that, I’m interested in learning how ZwiftPower works from a race organizer’s point of view, so all of this has been rather interesting to me. In that way, this post is just a continuation of what I’ve always done with Zwift: dig deep and figure out how it works. Then share that information with others.
If you made it this far, chapeau! You have a bright future ahead as a Zwift race organizer. Ride on.
Your Thoughts
Share below!