The FIETS index: the Dutch climb-difficulty formula, explained
A climb category tells you which of five buckets a climb falls in. The FIETS index gives it a continuous number instead — and it punishes steepness far harder than length, which is why a short wall can outscore a long drag. Here is the formula, a worked example, and an honest account of what it gets wrong.
The formula
FIETS comes from the Dutch cycling magazine Fiets. It takes three inputs, all of which a GPX file already contains:
FIETS = H² / (D × 10) + max(0, (T − 1000) / 1000)
H = elevation gain (m)
D = climb length (m)
T = summit altitude (m)
The first term is the climb itself. Because gain is squared while length is only linear, the index is dominated by average steepness: double a climb's gain over the same distance and its score quadruples.
The second term is an altitude penalty for thin air, and it is exactly zero below 1,000 m of summit altitude. Above that it adds one point per 1,000 m — so a 2,000 m summit carries +1.0, and a 1,500 m summit +0.5.
Worked example: Alpe d'Huez
The calibration point usually quoted for the index: Alpe d'Huez, 13.9 km long, about 1,071 m of gain, summit 1,850 m.
- Climb term: 1,071² ÷ (13,900 × 10) ≈ 8.25
- Altitude term: (1,850 − 1,000) ÷ 1,000 = 0.85
- FIETS ≈ 9
That value is worth remembering, because it is the only anchor the index really has.
What a FIETS score means — and why nobody can tell you precisely
There is no published scale that divides FIETS into named difficulty tiers. Alpe d'Huez ≈ 9 is the anchor; everything else is inference. tracé does bin the score into five plain-language bands, at 2, 4, 6 and 9 —
| FIETS | Band shown |
|---|---|
| 0 – 2 | gentle |
| 2 – 4 | moderate |
| 4 – 6 | hard |
| 6 – 9 | very hard |
| 9 and above | extreme |
Those band edges are ours, not an industry scale. They are arranged around the Alpe d'Huez anchor — 9 opens the top band — because a bare "9.1" tells a reader nothing on its own. Treat them as a presentation choice, not as evidence. If you see the same five labels elsewhere with different edges, neither version is the standard, because there isn't one.
The two real criticisms of FIETS
Both come from PJAMM Cycling, who built a competing index partly to address them:
- It uses net elevation difference, not total gain. Feed it a climb with dips in it and the dips vanish — H is just summit minus foot, so the metres you climbed twice are uncounted, and the climb scores lower than it rides.
- It gives zero credit for flat-terrain effort. A 200 km flat day scores nothing at all, because there is no H.
In tracé both criticisms are softened rather than solved. FIETS is computed per detected climb, and a detected climb is already trimmed to its ascent, so its net gain is close to its gross gain — the dips mostly fall outside the climb boundaries rather than inside them. The route-level FIETS is then the sum over those climbs. That still leaves the second criticism standing: route FIETS ignores everything that is not a categorized climb, flat kilometres included.
Two indices that answer the same question differently
Cotacol / ClimbFinder points
Derived from the 1980s Belgian Encyclopedia Cotacol, this scheme deliberately does not use average gradient at all. It splits the climb into 100 m sections and scores each one, with steeper sections scoring exponentially more. The consequence is the interesting part: two climbs with identical total gain can score very differently, because a steady 6% earns fewer points than a 4% average that hides 15% ramps. FIETS and the category score both blur exactly that distinction. ClimbFinder does not publish its exponent, so the scheme cannot be reproduced exactly from the outside.
The PJAMM Difficulty Index
PDI models work rather than shape:
PDI = (Work × elevation factor × surface factor) / 100
Work sums flat-travel effort plus climbing effort, minus a credit for descents, standardized on a fixed 75 kg rider-plus-bike at 5 m/s (18 km/h), which takes 43 W to hold on flat ground. Because it credits flat effort and uses total work, it fixes both of FIETS's weaknesses — at the cost of needing surface data that a GPX file does not contain.
tracé implements the surface-factor-free variant as its overall route difficulty score, alongside FIETS. The physics is the published power-versus-speed model; the parameter values are ours, and the app discloses them: 75 kg rider plus bike, 5 m/s, drivetrain efficiency 0.97, rolling-resistance coefficient 0.005, drag area 0.30 m², air density 1.225 kg/m³ (sea level; altitude ignored). Each segment's work is floored at zero, so a coasting descent is free and can never refund an earlier climb — a deliberately transparent simplification of PDI's capped descent credit. The final score is total work in joules ÷ 100,000, a presentation constant chosen so that real routes land in a roughly 20–260 range. It is comparable between routes and means nothing against any external population norm.
Which number should you actually read?
| Index | Separates steep ramps | Credits flat effort | Formula published |
|---|---|---|---|
| Category score (length × grade) | No | No | Yes |
| FIETS | No | No | Yes |
| Cotacol / ClimbFinder | Yes | No | Approximate only |
| PJAMM PDI | Yes, via work | Yes | Yes |
For a single climb, FIETS is the most useful published number you can compute from a GPX file alone: one figure, no rider inputs, and it responds sharply to the steepness that actually hurts. For comparing a flat century against an alpine loop, it is the wrong tool — that is what a work-based score is for.
Sources
FIETS formula and the Alpe d'Huez calibration: epictrain.me. Criticisms of FIETS, and the PDI formula and its standardized parameters: PJAMM Difficulty Index. Cotacol / 100 m exponential sectioning: ClimbFinder difficulty points. The power-versus-speed model behind the work-based score: gribble.org.
Get a FIETS score for every climb on your own route — the file never leaves your browser.
Open tracé