Skip to content

Stress Points

Stress Points (SP) is PeakLine's training-load metric. It answers a single question: how hard was that, and how much will it cost me to recover?

It's modeled on TSS (Training Stress Score) from TrainingPeaks, but with two important differences:

  1. SP works without a power meter — it gracefully falls back to HR, then pace, then speed.
  2. SP applies activity-type coefficients and intensity-zone multipliers, so a 1-hour Z2 spin and a 1-hour Z5 interval session don't get the same number.

The formula

SP = (duration_hours × intensity_factor²) × 100 × zone_multiplier

The interesting work happens in intensity_factor and zone_multiplier.

Intensity factor

The intensity factor (IF) is computed using the best available data, in this order:

  1. Power-based IF = NP / FTP. The gold standard. Requires a power meter and your FTP in settings.
  2. HR-based IF = avg_hr / threshold_hr. Used when no power is available. Reasonably accurate if your LTHR is set.
  3. Pace-based IF (running only) = threshold_pace / avg_pace. Used for runs without HR or power.
  4. Speed-based estimate — last resort. Compares avg speed to a sport-specific reference.

The lower in the list you fall, the wider the error bars. A 90-minute ride with power gives a tight SP estimate; the same ride logged manually as "duration only" gives a rough estimate.

Zone multipliers

The intensity zone the workout falls into amplifies SP, because the metabolic cost is non-linear:

Zone Multiplier What it looks like
Recovery 0.7 Z1 spin, very easy
Endurance 1.0 Long Z2, conversation pace
Tempo 1.5 Z3, sweet-spot
Threshold 2.0 Z4, race pace
VO2max 2.5 Z5, 3–5 min intervals
Anaerobic 3.0 Z6, 30s–2min hard
Maximal 4.0 Z7, all-out sprints

So a 1-hour easy ride and a 1-hour interval session can differ by 4x in Stress Points — which matches what they actually cost you.

Training load categories

Single-session SP rolls up into named buckets so you can sanity-check what you just did:

SP Category
< 30 Very Light
30–60 Light
60–100 Moderate
100–150 Hard
150–250 Very Hard
250+ Extreme

A weekly SP total of 400–600 is a normal training week for a fit recreational athlete. 700+ is heavy training. 1000+ is a race or training-camp week.

Why not just use TSS?

TSS is a great metric if you have power. If you don't, TSS-equivalents from HR (hrTSS) tend to under-count high-intensity work and over-count zone 2 drift, because HR lags load and decouples with fatigue.

Stress Points addresses that by:

  • Picking the best available intensity proxy per workout, not a fixed one.
  • Applying explicit zone multipliers, so a 30-minute VO2 session gets credit even if the average HR looks low.
  • Capping at SP = 2000 for ultra-long efforts (rather than letting a 12-hour gravel race produce a meaningless five-figure number).

If you do have power on every ride, SP will track very closely to TSS in practice — they should agree within 5% on most workouts.

What SP is good for

  • Spotting overtraining. A rolling 7-day SP that's way above your usual is a warning sign. PeakLine surfaces this on the dashboard.
  • Planning a hard week. If you target ~600 SP this week and you're at 200 by Wednesday, the math says: two more moderate days or one hard day, not both.
  • Comparing weeks across the year. Even if your power numbers drift up over a season, SP stays comparable.

What SP is not good for

  • Replacing CTL/ATL/TSB. SP per activity is the input; a proper training-load curve is built by summing SP over time with exponential decay. PeakLine displays a rolling 7-day and 28-day SP but doesn't implement the full Banister model.
  • Comparing across athletes. Your SP is calibrated to your FTP / LTHR. Comparing absolute SP numbers between users is meaningless.

See also