Z/2ZoneTwo

Guide · TSS

Training Stress Score.

A single number that captures how hard a workout was. The building block behind fitness (CTL), fatigue (ATL), and form (TSB). Here’s how it works — across cycling, running, and swimming — without the textbook.

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

See your own TSS.

Connect Strava and we'll show you TSS for every activity in the last 60 days.

Free during beta · No credit card

By connecting, you agree to our Terms of Use and Privacy Policy.