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.
Worked example — one week of a real amateur triathlete
Meet an age-group triathlete training for a 70.3 in August. FTP is 240 W, run threshold pace is 4:15 min/km, swim threshold 100-pace is 1:35. Here’s a mid-block week in March:
Monday — Rest
No activity. TSS = 0. Real zero matters — it pulls monotony denominator up later in the week.
Tuesday — 45-min run, 8 × 400 m at 5 km pace
Avg pace 4:45, warmup+cooldown at 5:30. Duration 0.75 h, average IF ≈ 0.89. rTSS ≈ 59.
Wednesday — 90-min endurance ride at IF 0.68
NP 163 W, duration 1.5 h. TSS = 1.5 × 0.68² × 100 ≈ 69.
Thursday — 3 km swim, mixed intervals
Average 100-pace 1:42, 58 min total. sTSS ≈ 0.97 × (1.35 / 1.70)³ × 100 ≈ 49.
Friday — Easy 30-min spin
NP 130 W, IF 0.54. 0.5 × 0.54² × 100 ≈ 15.
Saturday — 3-hour ride with 2 × 20 min at FTP
Overall NP 210 W, IF 0.875. 3 × 0.875² × 100 ≈ 230. The long day dominates the week.
Sunday — 14 km long run at 5:00 pace
IF ≈ 0.85, duration 1.17 h. rTSS ≈ 84.
Weekly totals
- Total TSS: 0 + 59 + 69 + 49 + 15 + 230 + 84 = 506
- Mean daily TSS: 72
- Daily stdev: ~78 (big gap between 0 and 230)
- Monotony: 72 / 78 ≈ 0.92 — healthy
- Strain: 506 × 0.92 ≈ 465 — manageable
This week looks busy but the variation is honest — two real quality days, two low days, a rest day. The numbers agree with how the week felt: productive, not crushing. That agreement is the whole point of TSS.
Common mistakes
- Using HR-based TSS for a power-based workout and expecting agreement. HR drifts with heat, dehydration, sleep, caffeine. A threshold interval session can score 20–30% lower on HR-TSS than on power-TSS on a bad day. Pick one source of truth per sport — ideally power for cycling, pace for running — and stay consistent.
- Treating rTSS from a capped treadmill as comparable to road rTSS.If your treadmill tops out at 17 km/h and your threshold pace is faster, your IF is artificially clipped and rTSS understates the session. Flag treadmill sessions in Strava and don’t compare them to outdoor rTSS at the same perceived effort.
- Adding swim TSS and cycling TSS as if they’re the same unit.The 100-at-threshold anchor is the same, but the strain on tissue, tendons, and the cardiovascular system isn’t interchangeable. Adding sTSS + TSS gives you a combined load number that matters for CTL and monotony — but don’t expect 50 sTSS to feel the same as 50 cycling TSS.
- Chasing a weekly TSS target regardless of context. “I need to hit 500 TSS this week” is the wrong framing. You need to build CTL at a safe ramp, with appropriate monotony. Some weeks that’s 600 TSS, some weeks it’s 300. Let the plan prescribe the number.
- Ignoring TSS after strength or cross-training. A hard gym session leaves cardiovascular capacity intact but the legs heavy. CTL won’t reflect that, so you can show up for Tuesday intervals feeling wrecked. TSS-based readiness is a useful signal, not a complete one — listen to your legs too.
- Re-testing FTP only when it goes up. FTP falls in the off-season and during injury blocks. Refusing to lower it keeps TSS numbers looking impressive while your training quality silently drops. Re-test every 6–8 weeks in build phases; re-estimate after any 3+ week break.
Related metrics
CTL, ATL, and TSB
TSS is the daily brick. CTL, ATL, and TSB are what you build with it. CTL is your 42-day EWMA of daily TSS — fitness. ATL is the 7-day version — fatigue. TSB is the gap — form. If TSS is the raw input, these are the curves you actually act on. See the CTL, ATL, TSB guide for bands and ramp rates.
Monotony and strain
TSS totals can be honest or sneaky. 500 TSS over a week with two big days and two rest days is very different from 500 TSS spread 71-71-71-71-71-71-74 — same total, but the second version has monotony above 3.0 and a real illness risk. Foster monotony and strain catch this, and they’re built from the same daily TSS numbers. See training monotony for the math.
Training readiness
Our 0–100 daily score combines TSB, monotony, and recovery since last quality. TSS doesn’t appear directly — but everything downstream of it does. When readiness drops below 50, the answer is almost always visible in the previous seven days of TSS. See the readiness guide.
Common questions
FAQIs TSS the same as calories burned?
No. Calories capture energy expenditure; TSS captures training stress. A 3-hour easy ride can burn 2,000 calories and score 150 TSS; a 30-minute threshold interval session can burn 400 calories and score 55 TSS. The two diverge because intensity matters disproportionately to adaptation, not to energy output.
Can I compare my TSS to a pro's?
Only to understand scale, not to benchmark yourself. A pro cyclist holding CTL 130 is training 25–30 hours a week; comparing your 50 TSS day to theirs is meaningless because the context (FTP, recovery resources, life stress) differs entirely. Treat TSS as a personal metric. Your trend matters; other people's absolute numbers don't.
Why does Strava show 'Relative Effort' instead of TSS?
Strava's Relative Effort is their proprietary version of a HR-based load score — similar family as TRIMP, different scaling. It's not directly comparable to Coggan TSS. If you want true power-based or pace-based TSS, you need a tool (ZoneTwo, Intervals.icu, TrainingPeaks) that runs the actual Coggan/Friel math on the underlying data.
Does TSS work for strength training?
Not well. Strength work produces fatigue that matters for endurance but doesn't fit the threshold-based TSS model cleanly. Most platforms assign a rough TSS (30–50 for a heavy session) as a placeholder. ZoneTwo treats strength as load in the weekly review narrative but doesn't fold it into CTL to avoid contaminating the cardiovascular fitness signal.
My FTP is wrong — does TSS become useless?
It becomes miscalibrated, not useless. If your FTP is set 10% low, every ride scores 20–30% higher TSS than it should — your CTL will look inflated but the trend is still valid. What matters is keeping your FTP current (re-test every 6–8 weeks in build phases) so absolute TSS numbers stay honest. Relative comparisons week-over-week work even with an outdated FTP.
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.