The trainer told me forty-two revolutions per minute
Indoor cycling apps are full of fixed numbers chosen by someone who did not know who would be pedalling. On a beginner, a fixed number is not imprecise: it is wrong, and sometimes it hurts.
Late August, a session in Zone mode. It works like this: you pick a band, say power zone 4, and the app adjusts the trainer's gradient so you stay inside it. If your watts drop, the road goes up. If they rise, the road flattens.
After a minute the gradient was at 10.7%. Soon after it was oscillating between 11 and 12%, and there it stayed. My legs were turning slower and slower, until I stopped wondering whether I was doing the exercise right and started wondering whether the app was doing its job right. I wrote myself a note: “Zone training pushes me straight to a 12% gradient, is that normal?”
It wasn't normal. But to understand why, I had to do the maths.
The maths
My functional threshold, my FTP, is 128 watts. I weigh 62.4 kilos, the bike another 8. The ceiling of zone 4 is 105% of threshold, so 134 watts. The easiest gear I have is a 34×32, which moves the bike forward 2.24 metres with every turn of the pedals.
With these numbers, physics leaves no room. To hold 134 watts on a climb you have to go at a certain speed, and that speed, divided by the metres covered by one pedal revolution, is a cadence:
| gradient | cadence to hold 134 W |
|---|---|
| 8% | 59 rpm |
| 10% | 48 rpm |
| 12% | 41 rpm |
Forty-one revolutions per minute. That's not a rhythm: it's a fight with the pedals.
The software had no calculation error. It was doing exactly what it had been asked to do: keep the power in the band by moving the gradient between −5% and +12%. The 12% was a safety limit, a number chosen once and put in a constant. Nobody had chosen it with me in mind.

What happens at forty-one revolutions
I went looking for what the literature says about that cadence, and the answer isn't about breathing.
Professionals, on climbs, pedal at around 71 revolutions per minute. Lucía, Hoyos and Chicharro measured it in 2001, on seven riders in a race: 71 uphill, 89 on the flat, 92 in time trials. These aren't numbers to imitate, but they say one thing: even those with legs we don't have, when the road goes up, shift down a gear instead of grinding to a halt.
Then there's the knee. A study of twelve competitive cyclists estimated the forces inside the joint with a model: at the same intensity, the force between kneecap and femur is 29% lower at 90 revolutions than at 70 (Bini and Hume, 2013). Another measured it directly, with knee implants that transmit their data, in nine people after knee replacement: at 40 revolutions, with just 60 watts, the peak reaches 119% of body weight, and higher cadences bring the forces down (Kutzner and colleagues, 2012).
That 12%, then, wasn't asking me for more aerobic work. It was shifting the load from the heart to the knee. And for someone who has just started and doesn't yet know when to stop, that's the kind of mistake that really hurts.
The number was right, for someone else
The article could end here, with “we lowered the limit”. It would have been the quickest fix: a 6% in place of the 12%. And it would have been wrong in the same way, just from the other side.
Take another rider: same weight, FTP 214 watts, which is 3.4 watts per kilo. For him 12% is a hard but rideable climb, and with an easy gear he fits inside it at a reasonable cadence. A 6% ceiling would take away precisely the climbs he bought the trainer for.
The 12% wasn't wrong in absolute terms. It was right for a 3.4 W/kg rider. It was wrong as a constant.
From constant to function
The fix was to stop choosing a number and start calculating it. The gradient ceiling now comes from the same physics that Grade uses for speed, the 1998 model by Martin and colleagues, and answers a precise question: what is the steepest climb on which this person, at this power and with their easiest gear, still pedals at their own cadence?
The answer is found by bisection: the app tries a gradient, works out the resulting cadence, and halves the interval until it finds the boundary. Twenty-four steps are enough, and the result is rounded down to the tenth.
And which cadence? There was a second trap here. The right cadence isn't the professionals': it's that of the person pedalling. The app measures it, as the average of the last six weeks, counting only the stretches where you're really pushing, because on descents you spin freely and the average would lie. Until there are enough rides to measure it, it uses the value from the literature, around seventy revolutions.
For a 62.4 kg rider with no history yet, at the literature's cadence, the ceiling becomes:
| FTP | W/kg | gradient ceiling |
|---|---|---|
| 110 W | 1.76 | 5.8% |
| 128 W | 2.05 | 6.8% |
| 175 W | 2.80 | 9.7% |
| 214 W | 3.43 | 12.0% |
The last row is the old 12%. The number that sat in a constant was the right answer for one person only.

The same trap, two days earlier
It wasn't the first time. Two days earlier I had found the same error somewhere else in the app.
In ERG mode the trainer holds the watts constant whatever you do, and if your cadence collapses the resistance becomes a wall. Grade has a system that notices this and eases the load. Its thresholds were two constants: alarm below 50 revolutions, all fine above 70.
My median cadence, measured, is 64 revolutions. With those thresholds 58.8% of my session fell between the two numbers, in the band where the system doesn't know whether to step in. It was making decisions about a rider who doesn't exist. There too the fix was the same: the thresholds are now a fraction of the rider's habitual cadence, not two numbers written in the code.
What I take away
Every constant in a training app describes someone. When you write it, it usually describes you, or the athlete from the paper you read that week. The problem isn't the number: it's that it stops being visible. It becomes a limit, a default, a threshold, and nobody asks any more who it was chosen for.
On a trained rider a wrong constant is an imprecision. On a beginner it's an error, and sometimes a knee that hurts.
That's why, today, when I find a fixed number in Grade's code, the question I ask myself is no longer whether it's right. It's for whom it's right.
Grade is a GPX route simulator for smart trainers. You import the track of a real ride, and the trainer gives you its climbs, gradient by gradient, metre by metre. iPhone, iPad, Mac.


