The science
What the engine actually does.
Stryde’s plans come out of a training engine that is about sixty thousand lines of TypeScript with more test code than source. Below is what it actually implements, where those models come from, and how we check that what it produces is any good.
It refuses rather than guesses.
There are a number of places where showing you a plausible number would have been easier than showing you nothing. In each of them the engine shows you nothing.
Every one of these is a deliberate refusal with a reason behind it, and each is pinned by a test so it cannot quietly erode.
- Readiness under seven daysNo score at all below a week of data, and a band without a number below two weeks. A readiness figure built on four nights is not a readiness figure.
- A critical-power fit that does not holdThe model returns nothing unless the fit clears a strict quality threshold inside a fixed range of effort durations — because the estimate moves depending on which durations you choose.
- Comparing across test protocolsA threshold derived from a ramp test and one derived from a twenty-minute test are different quantities. The engine will not compare them, and will not tell you that you improved because you changed test.
- Load across two different measuresIt will not compute a load ratio across a switch from power to heart rate, because the ratio would be meaningless rather than merely imprecise.
- Fuelling without the inputsMissing date of birth, sex, mass or height produces a refusal, never a default.
Evidence is graded, never asserted.
Athlete-facing claims carry an evidence tier and a named source. Constants that are engineering judgement rather than findings are marked as such, and a test asserts in both directions — every citation resolves to a real registry entry, and every entry is actually cited somewhere.
This rule exists because of what an audit found. A review of the swimming claims returned none that were strongly evidenced, and a verification pass over the cycling citations found several DOIs that were simply wrong and more with incorrect metadata. Failed lookups are recorded in the code rather than tidied away, and the standing rule since has been that copy is graded, never "research shows".
Nothing is applied without you.
Adaptation produces proposals with plain-English reasoning and a visible effect on the weeks ahead. You accept or decline. Declining one suppresses that kind of proposal from recurring.
When a change is applied, the words in the session are rewritten alongside the numbers, so a description can never contradict the prescription it sits next to.
The models, by sport
Running
- VDOTOne fitness number from a race or a hard effort, from which every training pace and a race prediction at any distance are derived. Ten pace zones, banded by percentage of maximal oxygen uptake.
- Heart-rate zonesCalculated from heart-rate reserve using your resting rate, anchored to your lactate-threshold heart rate where you have measured it.
- Intensity distributionRoughly four-fifths of volume held easy in every non-taper week, with per-session caps on how much of the week any single hard session may be.
- TaperBoth volume and session count come down, on the reasoning that a volume-only taper leaves fatigue behind. Your preferred long-run day survives the cut.
Strength
- Volume landmarksPer muscle group, the least volume that produces growth up to the most you can recover from, scaled by training age, with minimum recovery windows between sessions that hit the same muscle.
- Effort to loadA reps-in-reserve table converts a target effort and rep count into a percentage of your one-rep max, with beginners capped at a lower effort than advanced lifters.
- ProgressionLinear, double, wave and effort-based progression, selected by the exercise’s role and your experience.
- Exercise selectionFiltered by equipment, injury history and movement pattern, then ranked by stimulus relative to the fatigue it costs.
HYROX
- Compromised runningYour fresh kilometre pace is corrected for running on legs that have just done stations, then varied across the eight race runs — the row acts as relative leg recovery, and the final segments get harder.
- Station substitutionEach station has a ranked ladder of alternatives with a specificity score, so training without the kit still trains the right quality.
- Brick-aware spacingSessions combining a run and a station are treated as costing more than either alone, and spaced accordingly.
Swimming
- Critical swim speedA paired time trial sets your threshold, and every pace target in the pool is anchored to it.
- Shoulder load capPaddle, pull-buoy and butterfly metres are capped as a fraction of session volume, and the cap is re-applied after any plan edit so it cannot be lost to a later change.
Load, risk and recovery
Training load is estimated from whatever your data actually supports, in order of preference: a power- or pace-derived score, then a heart-rate-derived one, then session effort, and only as a last resort your compliance alone. Where the estimate is weak, the proposals that depend on it are suppressed.
Load is tracked per sport rather than pooled. That is a deliberate refusal: no trial establishes that a load unit means the same thing across modalities, and the validity of session-effort scoring is strong for aerobic work but weak for resistance training. A single combined figure would look authoritative and mean very little.
Sources
- Gabbett (2016) — the acute:chronic workload ratio.
- Banister — the fitness-fatigue model and TRIMP.
- Haddad et al. (2017) — validity of the session-RPE method.
How we check
We grade our own plans, and publish the spread.
Generated plans are scored out of a hundred against versioned rubrics that cite the coaching literature — periodisation, intensity distribution, long-run progression, race specificity and recovery each carry their own weighting and their own numeric anchors.
Each plan is judged by three independent blind judges. They never see the engine version, the commit, the previous score, or what changed. The reported score is the median of the three. Fewer than three verdicts and the result is not recorded at all.
If the judges disagree by more than ten points, the result is flagged untrusted and the rubric gets a finding raised against it — we fix the rubric rather than the engine, because a judgeable-two-ways rubric is the defect.
Ship decisions use blind comparisons on the plans that actually changed. An absolute score going up never gates a release on its own.
Current medians
68
Swimming median
range 49–91
65.5
HYROX median
range 62–76
These are not marketing numbers. They are an append-only ledger in the repository, and we are still climbing it.
Limits
What Stryde does not do
A page about rigour that only lists strengths is a page about marketing. These are real limits, stated plainly.
- It does not model the interference effectThe idea that endurance work blunts strength adaptation is real and well studied. Stryde does not implement a model of it, does not attenuate anything because of it, and does not claim to.
- It does not arbitrate hard days across sportsHard-session spacing is enforced within each discipline. Placing a hard run and a heavy lift on different days is something you control through your day assignments, not something the engine resolves for you. The one cross-sport placement rule it does have is keeping leg work away from your long run.
- It does not pool recovery across sportsThere is no single cross-discipline load or recovery budget, for the reason given above. Fuelling is the one thing that genuinely sums across everything you do.
- Its sports do not share one periodisation clockEach discipline runs its own phases. The coupling that exists is real but specific: strength backs off through a running or HYROX taper and clears out of race week.