Guide · TSS
Training Stress Score.
The idea, in one sentence
1 hour at your threshold = 100 TSS. Everything scales around that. A 30-minute easy spin might be 25 TSS. A 3-hour hilly ride at upper-Z2 could be 220. A race-pace half-marathon lands around 150.
The point is to compare a 90-minute ride to a 45-minute run to a 3 km swim on one axis — “how much did my body get worked” — instead of three separate scales.
Cycling TSS — Coggan (power-based)
Andy Coggan’s formula, published in Training and Racing with a Power Meter:
Formula
TSS = (duration_seconds × NP × IF) / (FTP × 3600) × 100
where:
- NP (Normalized Power) — variability-weighted power. Not the arithmetic average. Strava computes this.
- IF (Intensity Factor) — NP divided by FTP. Your 20-minute flat-out is IF ≈ 1.05; your easy ride is IF ≈ 0.65.
- FTP — your threshold power, roughly what you can hold for 1 hour all-out.
Quick check
1 hour at FTP (IF=1): TSS = 1 × 3600 × FTP × 1.0 / (FTP × 3600) × 100 = 100. Exactly as the definition requires.
No power meter?
Fall back to HR-based TRIMP — a simpler formula that uses HR ratio squared. Less accurate (HR drifts with heat, sleep, hydration) but directionally correct.
Running TSS — Friel rTSS (pace-based)
Joe Friel adapted the concept for running. Same 100-at-threshold anchor, but intensity comes from pace.
Formula
rTSS = (duration_hours × IF²) × 100
where IF = threshold_pace / actual_pace (faster pace = higher IF).
Example
If your threshold pace is 4:00 min/km and you run 5 km at 4:12 pace (21 min total):
- IF = 240 / 252 = 0.952
- Duration = 21/60 = 0.35 hours
- rTSS = 0.35 × 0.952² × 100 ≈ 31.7
Short, intense effort = modest rTSS. A 90-minute easy run at 5:00 pace (IF = 0.80) is rTSS ≈ 96 — nearly 3× the stress of the 5 km even at much lower intensity. Duration matters.
Swim TSS — sTSS
Swim stress uses a cubic of pace ratio because water drag grows cubically with speed. Anchor still stays at 100 per threshold hour.
sTSS = duration_hours × (threshold_100_pace / actual_100_pace)³ × 100
If you don’t have a threshold swim pace set, we can’t compute sTSS. Strava swim entries with distance but no stroke-rate detail still give us enough to estimate pace.
Why it matters
TSS alone is just a number. Its value comes from what you do with it:
- CTL (fitness) is the 42-day exponentially weighted average of daily TSS.
- ATL (fatigue) is the 7-day exponentially weighted average.
- TSB (form) is CTL − ATL.
Once you have TSS, you have the whole model. Without it you just have distance and duration — numbers that can’t distinguish a recovery spin from threshold intervals of the same length.
Keep reading
CTL, ATL, TSB explained→
What the three letters actually mean and how to use them.
Training monotony→
When consistent TSS becomes a problem instead of progress.
Training readiness→
Our daily 0–100 score built from TSS and fatigue.
Weekly review→
How we turn TSS into a plan every Sunday.
For cyclists→
Cycling-specific coaching with power-based TSS.
For runners→
Running-specific coaching with Friel rTSS.
See your own TSS.
Connect Strava and we'll show you TSS for every activity in the last 60 days.