How Flow Momentum Calculates Your Numbers
All notes
Performance Health
training-load
tss
ctl-atl-tsb
ftp

How Flow Momentum Calculates Your Numbers

Every training and recovery value, with its original formula and the publication that defined it.

Hartmut Hübner, PhD
22 October 202610 min read

In short: Flow Momentum calculates training load, thresholds, HRV status and sleep regularity with the original formulas from the original publications. Estimates carry an "estimate" label. Garmin values carry the Garmin name. Without enough data, a value is "insufficient", never invented.

A number is only useful when you know where it comes from.

We did not build our own versions of established metrics. For each value, we went back to the publication that first defined it. We use that formula with its original constants. We then checked each method against later research. Examples are the HRV studies of Plews and Buchheit and the sleep studies of Phillips.

Where we simplify a formula or adapt it, the note says so. Where no published formula exists, the value is an estimate, and we label it as one.

Below you find every value with its formula, its inputs and its source. All sources are linked at the end.

Three kinds of values

Every value in Flow Momentum has one of three labels.

  • Computed (open formula). We calculate it from your raw data with a published formula. You can check it yourself.
  • Estimate. We calculate it with a rule of thumb or a model that is not fully validated. We show it as an estimate. A value you enter or test always replaces it.
  • Manufacturer value. Your device calculates it with a closed algorithm (for example the Garmin sleep score). We show it with the manufacturer's name. It never drives a decision on its own.

When there is not enough data, the value is "insufficient". We do not invent a number to fill the gap.

Training load

Training load starts with the Training Stress Score (TSS). One hour at threshold gives 100 TSS.

  • Cycling with power: TSS = (duration in seconds × NP × IF) / (FTP × 3600) × 100. NP is Normalized Power and IF = NP / FTP (Allen and Coggan, Training and Racing with a Power Meter).
  • Running with pace: IF = threshold pace / average pace, and rTSS = hours × IF² × 100 (TrainingPeaks). There is no grade adjustment yet.
  • Heart rate only: hours × (average HR / threshold HR)² × 100. This is a simplified estimate, and we label it as such.
  • Duration only: a fixed intensity per sport (for example 0.72 for a run). This is the most conservative fallback.

From the daily TSS we calculate the Performance Manager values. They come from the impulse-response model of Calvert, Banister and colleagues (1976; Banister, 1991):

  • Fitness (CTL): an exponentially weighted average with a 42-day time constant.
  • Fatigue (ATL): the same calculation with a 7-day time constant.
  • Form (TSB): CTL minus ATL of the previous day.

Rest days count as TSS 0, so fitness decays when you do not train. That is intentional.

We read form in bands:

Form (TSB) Band
above 15 fresh
5 to 15 optimal
-10 to 5 grey zone
-30 to -10 fatigued
below -30 overreached

The bands follow the TrainingPeaks convention. They are a product interpretation, not a law of physiology.

We also calculate the ramp rate (change of CTL per day over 7 days). Training monotony and strain follow Foster (1998). Foster used session-RPE load; we apply his formula to TSS.

Thresholds

  • FTP from a test: 20-minute test × 0.95 (Allen and Coggan). A 60-minute effort counts as it is (Friel). Ramp test: 0.75 × the best minute, a common industry convention without one original study. A value you type in is labelled "entered", not "tested".
  • FTP from 5-minute power: 5-minute power × 0.85. This is a rule of thumb without a validated source, so it is only a fallback estimate.
  • Critical Power and W': the model P(t) = CP + W'/t (Monod and Scherrer, 1965). It uses your maximal efforts of 3 to 20 minutes.
  • Threshold heart rate: 20-minute test average × 0.95, or the last 20 minutes of a 30-minute time trial (Friel).
  • Maximal heart rate: 208 − 0.7 × age (Tanaka et al., 2001). A measured maximum always wins.
  • Running threshold pace and swim critical speed: estimates from your best sustained efforts (Wakayoshi et al., 1992, for swimming). An entered value wins.

Training zones use the seven power zones of Allen and Coggan and the seven heart-rate zones of Friel.

Recovery: the open HRV status

Garmin shows its own HRV status. We also calculate an open version from the same nightly RMSSD values (Plews et al., 2012 and 2013; Buchheit, 2014):

  1. We take the natural log of each night's RMSSD.
  2. Your current value is the mean of the last 7 nights (at least 4 valid nights).
  3. Your baseline is the mean and standard deviation of the 53 nights before that (at least 14 valid nights).
  4. The z-score is (current − baseline) / baseline SD.
z-score HRV status
above +1 above baseline
−1 to +1 within baseline
−2 to −1 below baseline
under −2 well below baseline

We also report the night-to-night variation (lnRMSSD CV) when there are at least 5 nights.

The current week is not part of its own baseline. A constant baseline gives no status, because there is no spread to compare against.

Sleep

We use two values that wearables measure reasonably well.

  • Sleep duration: the mean over the last 7 nights (at least 4). Adults need at least 7 hours on a regular basis (Watson et al., 2015).
  • Bedtime regularity: the spread of your local sleep-onset time over the same nights. We use a circular standard deviation (Mardia and Jupp, 2000), because 23:30 and 00:30 are one hour apart, not 23. Up to 30 minutes counts as regular (Phillips et al., 2017).

Sleep stages from a wrist device are rough estimates. We do not base decisions on them. The Garmin sleep score is shown as a Garmin value.

Readiness

The Flow Momentum readiness combines personal-baseline scores with these weights:

Input Weight
HRV 25 %
Resting heart rate 20 %
Sleep duration 15 %
Garmin sleep score 10 %
Your check-in 10 %
Form (TSB) 10 %
Garmin Body Battery 10 %

Missing parts are left out, and the other weights are scaled up.

This is a product estimate, not a validated medical score. It needs 21 days of baseline. At the moment it runs in shadow mode while we calibrate it.

How the AI coach uses these numbers

Every day Flow Momentum builds a state card for you. It contains your current values, with their labels, dates and sources. It also lists what is missing.

The coach must take personal numbers from this card. Before you see an answer, a server check compares each personal number with the card. If a number does not match, the answer is not shown in that form. When a value is missing, the coach asks you instead of guessing.

At midnight in your time zone we store the card of the past day. If something important changed, a short entry goes into your personal wiki. You can turn this off in Settings, under Privacy.

What Flow Momentum is not

Flow Momentum is a performance and wellness product. It does not diagnose illness or injury and does not replace a doctor, physiotherapist or dietitian. See our Performance Health approach.

Sources

Frequently asked questions

Get the next Note

Practical ideas on performance, recovery, AI and better work — straight to your inbox.