TSS (Training Stress Score)
Also known as: Training Stress Score, Coggan TSS, hrTSS, rTSS, pTSS
An intensity-weighted load metric for a single session, scaled so that one hour at your functional threshold equals exactly 100 points. TSS was developed for cycling power-meter data (Coggan 2003) and has since been adapted for running pace (rTSS), heart rate (hrTSS), and swim pace (sTSS). It's the endurance counterpart to TRIMP and sits alongside Afitpilot's AU as one of the three dominant internal-load models in modern coaching.
Formula
TSS = (session_duration_s × NormalizedPower × IntensityFactor) ÷ (FTP × 3600) × 100
where:
NormalizedPower (NP) = 4th-root mean of 30-second rolling-average power
IntensityFactor (IF) = NP ÷ FTP
FTP = Functional Threshold Power, the highest power sustainable for ~1 hour
For non-power sports the same shape applies with substitutions:
rTSS uses Normalized Graded Pace ÷ threshold pace
hrTSS uses time spent in HR zones weighted by their intensity factor
sTSS uses pace ÷ threshold swim pace
Quick reference: 1 hour @ FTP = 100 TSS exactly; 1 hour @ 80% FTP ≈ 64 TSS; 30 min @ 110% FTP ≈ 60 TSS.Example
Cyclist with FTP 280 W rides 2 hours at average NP 224 W. IF = 224 ÷ 280 = 0.80. TSS = (7200 × 224 × 0.80) ÷ (280 × 3600) × 100 = 128 TSS. Compare to the same athlete doing a 1-hour threshold session at NP 280 W: IF 1.00, TSS exactly 100. Compare to a 90-min easy spin at NP 168 W: IF 0.60, TSS = (5400 × 168 × 0.60) ÷ (280 × 3600) × 100 = 54 TSS. Same time on the bike can produce wildly different TSS values depending on intensity distribution.
How Afitpilot Uses This
Afitpilot's primary internal-load metric is AU (sRPE × duration in minutes — the Foster method), not TSS. AU is modality-agnostic and works without any threshold testing, which makes it the right default for a self-coached app spanning strength, hybrid, and endurance. TSS is on the roadmap as an optional overlay for athletes who already train with a power meter or GPS pace and have an FTP set — once ingested, TSS would coexist with AU rather than replace it, the same way HRV would coexist with the subjective Hooper Index. The tss-trimp improvement item on the lexicon improvements page tracks this work. For now, endurance athletes can convert mentally: 100 TSS corresponds roughly to a hard sRPE 7-8 hour, or ~420-480 AU.
TSS ranges in practice
| Who / Context | Value | Note |
|---|---|---|
| Easy Zone 2 / recovery session | 30-60 TSS per hour | IF 0.55-0.75; high frequency-tolerable load |
| Endurance / tempo session | 60-90 TSS per hour | IF 0.75-0.95; the polarized-training middle the polarized model deliberately avoids |
| Threshold session | ~100 TSS per hour (definitionally) | IF 1.00 at the prescribed FTP; the unit calibration point |
| Race-pace effort (Olympic distance / 40 km TT) | ~110-140 TSS for ~60-75 minutes | Sustainable supra-threshold; 24-48h recovery |
| Long ride / 5-6 hour endurance | 200-350 TSS | Where most of a season's chronic-load (CTL) accumulation happens |
| Weekly TSS — recreational endurance | 300-600 TSS/week sustained | Productive range for working-age amateurs |
| Weekly TSS — elite endurance | 1,000-1,800 TSS/week in build blocks | WorldTour cycling and elite triathlon during accumulation phases |
Known Limitations
- •TSS requires a calibrated threshold (FTP, threshold pace, threshold HR). Without it, every TSS calculation is anchored to a guess, and a 10% misestimate of FTP propagates to a ~20% misestimate of TSS at threshold intensities. FTP itself drifts with fitness; stale FTP means stale TSS.
- •TSS captures average intensity-weighted load over the session, but compresses pacing detail. Two rides with identical TSS — one a steady tempo, one with all-out intervals on top of easy spinning — produce different physiological stimuli and different recovery costs.
- •Cross-modality TSS comparisons are unreliable. A 100-TSS cycling session and a 100-TSS running session do not produce equivalent mechanical or systemic load — running's eccentric component shifts the equation. Most coaches treat the per-modality TSS as the comparable unit, not the cross-modality total.
- •TSS was designed for steady-state aerobic work and degrades for very short, very high-intensity sessions (sprint repeats), very long ultra-distance sessions (where pacing strategies break the model's assumptions), and any sport with significant skill or strength components.
- •Several proprietary variants exist (TrainingPeaks Coggan TSS, Strava Suffer Score, Intervals.icu Polar Load, Garmin Training Load) which compute slightly different numbers from similar inputs. A TSS figure is only comparable within a single platform.
Science Context
TSS was introduced by Andy Coggan and Hunter Allen in the early 2000s (formalised in 'Training and Racing with a Power Meter', 2010) as a power-meter-native load metric, building on Banister's earlier TRIMP framework but anchored to a directly measurable mechanical threshold (FTP) rather than a heart-rate-based one. The mathematical core — exponentiating power to amplify high-intensity contributions — sits inside the Normalized Power calculation; the wrapping into a duration-normalised score relative to FTP is what makes a number comparable across sessions and athletes. Modern training-monitoring platforms (TrainingPeaks, Intervals.icu, WKO5) compute long-term metrics (CTL / chronic training load, ATL / acute training load, TSB / training stress balance) directly from cumulated TSS, and the same pattern underlies the EWMA chronic/acute split used by Afitpilot's load-trend chart. Validity studies (Manunzio et al. 2016 on cycling; Skiba 2019 on running and the modified W' framework) support TSS as a reasonable session-load summary for steady aerobic work in trained athletes, with the standard caveat that it does not predict individual injury risk and should be read as a descriptive accumulation metric, not a diagnostic one.