← All metrics

Competitive load

Power/run/HR/subjective TSS, TRIMP, and WHO intensity minutes — the paywalled load numbers, reimplemented from the published formulas.

Illustrative weekly TSS load over a training block Illustrative example — not a real athlete
Illustrative weekly TSS load over a training block
Wk 1Wk 2Wk 3Wk 4Wk 5

TSS/week

Training Stress Score (power)

A single number summarizing how stressful a ride was, scaled so one hour right at your threshold power counts as exactly 100.

Worked example Verified real-world example
  1. A 1-hour ride held exactly at FTP: Intensity Factor (IF) = Normalized Power / FTP = 1.0.
  2. TSS = (duration_s / 3600) × IF² × 100 = (3600/3600) × 1.0² × 100 = 100.

Matches Friel’s own published heuristic verbatim: “100 TSS is about an hour done as hard as you can do it.”

Source: Joe Friel’s published TSS heuristics

Formula, provenance & citation
Formula
TSS = (duration_s / 3600) × IF² × 100, where IF = NP / FTP
Inputs
duration_s, np_w (Normalized Power), ftp_w (athlete’s configured/estimated FTP).
Provenance
computed
Unit
TSS
Method
Coggan power Training Stress Score
Citation
Allen H., Coggan A., McGregor S. — Training and Racing with a Power Meter, 2nd ed. (2010), ch. 7.
Licensing note
"TSS" is a TrainingPeaks/Peaksware trademark for this Coggan/Allen formula; the math itself is public domain — user-facing copy attributes it to Coggan/Allen, not to a TrainingPeaks integration.
Implementation pointer
api/backend/backend/pipeline/metrics/load.py:111 (normalized_power), load.py:185 (compute_power_load). Tests: api/backend/tests/pipeline/test_metrics_load.py.

WHO intensity minutes

The same "intensity minutes" concept Garmin/Fitbit show you, tracked against the World Health Organization’s published weekly activity guideline.

Worked example Verified real-world example
  1. A 40-minute moderate-zone run contributes 40 minutes (1× weight).
  2. A 20-minute vigorous-zone interval session contributes 20 × 2 = 40 minutes (2× weight).
  3. One day’s total: 40 + 40 = 80 intensity minutes.

Tracked against the WHO’s own published target of 150 moderate-equivalent minutes/week — 80 in one day is already over half the weekly guideline.

Source: WHO (2020) Guidelines on physical activity and sedentary behaviour

Formula, provenance & citation
Formula
minutes = moderate_minutes × 1 + vigorous_minutes × 2 (light contributes 0)
Inputs
HR-zone time; zone_band mapping, vigorous_multiplier=2 (config).
Provenance
computed
Unit
min
Method
WHO 2020 intensity minutes
Citation
WHO (2020) — Guidelines on physical activity and sedentary behaviour.
Licensing note
A WHO public-health guideline, not a vendor metric.
Implementation pointer
api/backend/backend/pipeline/metrics/load.py:620 (who_intensity_minutes), load.py:648 (compute_who_intensity_minutes). Tests: api/backend/tests/pipeline/test_metrics_load.py.

Banister exponential TRIMP

A single-number training impulse from heart rate that weights hard efforts exponentially more than easy ones, unlike a simple linear zone sum.

Worked example Illustrative example — not a real athlete
  1. 60-minute session, average HR 150 bpm, resting HR 50, max HR 190.
  2. HRR = (150 − 50) / (190 − 50) = 0.714
  3. TRIMP = 60 × 0.714 × 0.64 × e^(1.92 × 0.714) ≈ 108

A TRIMP of ~108 for a moderately hard hour — the exponential term means a harder effort at the same duration climbs much faster.

Formula, provenance & citation
Formula
HRR = (HRavg − HRrest) / (HRmax − HRrest); TRIMP = duration_min × HRR × scale × e^(exponent × HRR)
Inputs
duration_s, avg_hr, resting_hr, max_hr, sex (sex-specific scale/exponent weights, config).
Provenance
computed
Unit
TRIMP
Method
Banister exponential TRIMP
Citation
Banister E.W. (1991); Morton R.H., Fitz-Clarke J.R., Banister E.W. (1990), J Appl Physiol.
Licensing note
No trademarked vendor term.
Implementation pointer
api/backend/backend/pipeline/metrics/load.py:460 (banister_trimp), load.py:484 (compute_banister_trimp). Tests: api/backend/tests/pipeline/test_metrics_load.py.
← Back to mythreshold.ai