This application uses two key metrics to quantify training load: Effort and Stress. These metrics help runners understand the intensity of individual workouts and the cumulative fatigue from recent training.
The chapters build on each other. Chapter 1 explains Effort, how hard a single run was, and chapter 2 the conditions that raise it. Chapter 3 turns Effort into Stress, the load that builds up over three weeks. Chapter 4 describes how plan templates lay out a training block, and chapter 5 how fitness is read from your runs, including their pace in ideal conditions.
Turn pages with the arrows below each page, the arrow keys, or a swipe on your phone. The contents and the index at the back link straight to every section.
Principles
Personal. Effort is anchored on your own threshold pace, plans on your own volume and training days, fitness on your own earlier weeks. Nothing compares you with other runners.
Transparent. Every number can be traced: tap Effort or Stress in the app to see its calculation, and this book explains the rest.
Conservative. Where the evidence is uncertain the models lean cautious: load is counted generously, fitness is credited sparingly, and plans grow slowly.
Live. The figures and tables in this book are computed as you read, by the same functions that run your log.
Notation
Paces are minutes and seconds per kilometre (4:20/km); a difference in pace is in seconds per kilometre.
E is Effort, S is Stress and T the threshold pace. Distances are in kilometres unless marked m.
Numbers are rounded the way the app shows them, so a calculation by hand may differ in the last digit.
Every model in this book is a simplification. They are meant to make training easier to read and to plan, not to replace how a run felt, or the advice of a coach or a doctor.
Chapter 1
Effort
Physiological Background
Effort quantifies the metabolic cost of running at different intensities. The relationship between pace and physiological strain is non-linear: running slightly faster requires disproportionately more energy due to increased oxygen consumption, lactate accumulation, and neuromuscular fatigue.
At easy paces (Zone 1-2), the body primarily uses aerobic metabolism, efficiently burning fat and carbohydrates with minimal lactate buildup. As pace increases into threshold and VO2max territories (Zone 4-5), anaerobic contribution rises sharply, glycogen depletion accelerates, and recovery time extends significantly. [4]
The Effort value captures this non-linear relationship. The exact multipliers depend on your personal Lactate Threshold pace configured in Settings, which anchors the entire pace-effort curve to your fitness level.
Effort as a function of pace for a Lactate Threshold pace of 3:42/km. Slower than LT, effort decays gradually; faster than LT (shaded), it grows exponentially at 1.5 times that rate, so the curve bends upward at LT and every extra second faster costs more than the last. Dots mark the 10-second steps of the generated pace-effort table, between which the app interpolates linearly.
Formula: Quality Days (Intervals/Tempo)
For workouts with quality distance (intervals, tempo runs), effort is calculated as a weighted average of the hard and easy portions:
E = Eh · Q + Ee · (1 − Q)
Where:
E
Total Effort for the workout
Eh
Hard effort (from interval pace)
Ee
Easy effort (from easy pace, or default Z2 pace)
Q
Quality ratio (quality distance / total distance)
Example:
15km run with 8km of tempo at 3:30/km (Eh=3.51), easy pace 5:10/km (Ee=1.04)(effort values assume Lactate Threshold pace of 3:42/km)
Q = 8000 m / 15000 m = 0.533 E = 3.51 × 0.533 + 1.04 × 0.467 = 1.87 + 0.49 = 2.36
Formula: Easy Days (Pace-based)
For easy runs without quality distance, effort is derived directly from pace using linear interpolation on a personalized reference table:
E = interpolate(pace, LT)
LT = Lactate Threshold pace (configured in Settings)
Lactate Threshold & Table Generation
The pace-effort relationship is anchored to your Lactate Threshold (LT) pace. LT is the intensity at which lactate begins accumulating faster than it can be cleared - the boundary between sustainable aerobic effort and unsustainable anaerobic work.
At LT pace, effort is defined as 2.85. The table is then generated using exponential functions that model the physiological reality:
Above LT (Faster).Effort increases exponentially. Each second faster requires disproportionately more energy due to rising anaerobic contribution, lactate accumulation, and glycogen depletion.
E = 2.85 · e0.01725·Δt
Below LT (Slower).Effort decreases gradually. The body efficiently uses aerobic metabolism, burning fat with minimal lactate buildup. Recovery between efforts is quick.
E = 2.85 · e−0.0115·Δt
Where Δt = difference in seconds from LT pace.
Example: LT pace = 3:42/km (222 seconds)
At 3:22/km (20s faster): E = 2.85 · e0.345 = 4.02
At 3:42/km (LT pace): E = 2.85
At 4:12/km (30s slower): E = 2.85 · e−0.345 = 2.02
At 5:05/km (83s slower): E = 2.85 · e−0.955 = 1.10
Reading the Effort scale
Effort has no unit: it multiplies distance. Its anchor is the threshold, where a kilometre counts 2.85. From there, every 10 seconds per kilometre slower lowers Effort by about 11%, and every 10 seconds faster raises it by about 19%. At the default paces (threshold 4:00, easy 5:10), a kilometre a minute faster than threshold counts as much as 6.3 easy kilometres.
Effort at paces relative to the threshold, and those paces for a 4:00/km threshold.
Relative to threshold
At a 4:00 threshold
Effort
60 s faster
3:00/km
8.02
30 s faster
3:30/km
4.78
20 s faster
3:40/km
4.02
10 s faster
3:50/km
3.39
at threshold
4:00/km
2.85
10 s slower
4:10/km
2.54
20 s slower
4:20/km
2.26
30 s slower
4:30/km
2.02
60 s slower
5:00/km
1.43
90 s slower
5:30/km
1.01
The ends of the table
The pace-effort table runs from 60 seconds faster than your threshold (never faster than 2:30/km) to 90 seconds slower, in steps of 10 seconds. Between steps Effort is interpolated in a straight line, which sits a hair above the curve. Beyond the ends it keeps the end value: anything more than 90 seconds slower than threshold counts 1.01, anything more than 60 seconds faster counts 8.02. Very slow running and walking still count as load, just never less than that.
Per-Workout LT Storage
Each workout stores its own Lactate Threshold value at the time it was recorded. This ensures that effort calculations remain stable over time - even if you update your LT in settings later, historical workouts will continue using their original LT for calculations.
This is important because:
Your LT improves with training - a 5:00/km run today represents different effort than the same pace 6 months ago
Historical trends remain meaningful and comparable
You can see how your fitness has progressed relative to your LT at each point in time
When viewing a workout's effort tooltip, you'll see which LT was used for the calculation (e.g., "LT: 3:42" or "LT: settings" if no specific LT was stored).
Updating LT for Workouts
In Settings, when you change your Lactate Threshold pace, you have control over which workouts receive the new value:
Apply from date: Choose a specific date - the new LT will be applied to that date and all future workouts
Apply to all workouts: Enable this toggle to update your entire training history with the new LT
If you don't specify a date, the new LT applies from today onwards by default.
Use cases:
New user: Enable "Apply to all workouts" to set your LT across your entire history
Fitness improvement: Set a new LT from today - past workouts keep their original LT, reflecting your fitness at that time
Correcting a mistake: Use "Apply from date" to fix LT from when you made an error
Why Lactate Threshold Matters
Different runners have vastly different LT paces based on training history, genetics, and current fitness:
Elite marathoner: LT around 3:00-3:15/km
Competitive club runner: LT around 3:30-4:00/km
Recreational runner: LT around 4:30-5:30/km
Beginner: LT around 6:00-7:00/km or slower
By setting your personal LT pace in Settings, the effort calculations become meaningful for your fitness level. A 5:00/km pace might be easy recovery for an elite but threshold work for a beginner - the personalized table captures this difference.
Pace-effort curves for three runners with Lactate Threshold paces of 3:15, 4:00 and 5:00/km (open circles). The same 5:00/km (dashed line) is easy running for the first (E = 1.07), steady running for the second (E = 1.43) and threshold work for the third (E = 2.85). Each table covers 60 seconds faster to 90 seconds slower than LT; outside it, the app uses the value at the nearest end (dashed segments).
Special cases
A quality session without an interval pace counts its hard part at Effort 3, just faster than threshold.
Without an easy pace, the easy part of a quality session runs at the default Z2 pace from Settings.
A planned run without a pace counts at the default Z2 pace, so the weeks ahead already show in Stress.
An Effort you enter yourself replaces the whole calculation, conditions included.
Rest days have no Effort. Strength work adds to Stress through its secondary distance (chapter 3).
Why pace, not heart rate
Effort comes from pace because pace is known before a run (a planned session has one) and means the same thing every day. Heart rate at a given pace rises with heat, humidity, dehydration, caffeine, poor sleep, illness and simply time on your feet (cardiac drift), so the same session can read very differently. Instead of letting those swings blur the load, the conditions that make a pace harder are counted one by one (chapter 2).
Heart rate is used where it carries a clear signal: speed per heartbeat on easy runs, and pace for the heart rate on tempo runs, as measures of fitness (chapter 5).
Chapter 2
Environmental Adjustments
The base effort assumes a flat, paved route in calm, mild weather. Five factors correct it for the conditions of the day. Each factor is 1 when its condition does not apply and grows with the extra cost; all of them can be tuned in Settings.
These adjustments raise Effort, with the effort model in Settings. The pace in ideal conditions and the fitness scores use separate, physically based costs: see chapter 5.
Wind Adjustment
Running against wind increases energy expenditure without a corresponding increase in pace. The wind adjustment compensates for this:
fwind = 1 + (p/100) · (w − t)
Where:
w
Wind speed (km/h)
t
Threshold (default: 5 km/h)
p
Percent increase per km/h (default: 1%)
Only applied when wind speed exceeds the threshold. Based on research showing approximately 4-8% increase in oxygen consumption per 10 km/h headwind. [3]
Elevation Gain Adjustment
Running uphill increases energy expenditure significantly. The elevation adjustment accounts for the additional effort required when a run has meaningful elevation gain:
felev = 1 + (p/100) · (gain / dist)
Where:
gain
Total elevation gain (meters)
dist
Distance (km)
gain / dist
Elevation per km (m/km)
p
Percent increase per m/km (default: 1%)
Only applied when total elevation gain exceeds a threshold (default: 50m). The adjustment is proportional to elevation per km, meaning the same elevation gain over a shorter distance produces a higher adjustment.
Examples (with default 1%/m/km):
100m gain over 10km = 10 m/km → 10% effort increase
100m gain over 5km = 20 m/km → 20% effort increase
200m gain over 15km = 13.3 m/km → 13.3% effort increase
30m gain over 10km → No adjustment (below 50m threshold)
Unpaved Terrain Adjustment
Trails, gravel and grass absorb part of every push-off and demand more stabilization than asphalt, so the same pace costs more energy. The share of the run on unpaved ground scales the adjustment linearly:
funpaved = 1 + (p/100) · (u/100)
Where:
u
Share of the run on unpaved terrain (0-100%)
p
Percent increase for a fully unpaved run (default: 10%)
Examples (with default 10%):
Road run, 0% unpaved → No adjustment
Park loop, 50% unpaved → 5% effort increase
Trail run, 100% unpaved → 10% effort increase
A run can also be marked rough (technical trail, roots, rocks, sand or mud). A fully unpaved rough run adds 25% by default instead of 10%, and its pace in ideal conditions gets more credit too.
Rain & Snow Adjustment
When the first weather icon is 🌧️, calculated effort increases by 5% by default. When it is ❄️, the default increase is 10%. Later icons do not trigger this adjustment: 🌧️💨 gets the rain increase, while ☀️🌧️ gets none.
frain/snow = 1 + p/100
These are adjustable model defaults. Change either percentage in Settings, or set it to 0 to disable it. This factor multiplies with the other environmental adjustments and also applies to weekly fitness scores. Manually entered effort takes precedence.
Temperature Adjustment
Running in extreme temperatures (hot or cold) increases physiological strain. The comfortable range is 5-22°C by default. Outside this range, effort is adjusted upward:
ftemp = 1 + (p/100) · |t − range|
Where:
t
Temperature (°C)
range
Comfortable range (default: 5-22°C)
p
Percent increase per °C outside range (default: 1%)
If temperature is within the comfortable range, no adjustment is applied. Below the low threshold, the distance below is used. Above the high threshold, the distance above is used.
Examples (with default 1%/°C, range 5-22°C):
30°C → 8°C above range → 8% effort increase
-2°C → 7°C below range → 7% effort increase
15°C → within range → No adjustment
Temperature factor with the default settings: no adjustment inside the comfortable range of 5-22°C (shaded), then 1% more effort for every degree below or above it.
Combined Effort
The five factors are independent and multiply with the base effort, so a hilly trail run on a hot, windy day accumulates every correction:
Ebase comes from the quality-day formula or the pace table. Planned future days without a pace use your default Z2 pace from Settings, so upcoming training already counts toward projected stress.
A manual effort wins: if you enter an effort yourself, it replaces the whole calculation, adjustments included.
A factor without data (no wind recorded, no elevation) is 1 and leaves the effort unchanged.
Example:
Base effort 1.20; wind 18 km/h (×1.13); 150 m gain over 12 km (×1.125); 40% unpaved (×1.04); 27°C (×1.05); first weather icon 🌧️ (×1.05): E = 1.20 × 1.13 × 1.125 × 1.04 × 1.05 × 1.05 = 1.75
Where the Conditions Come From
The adjustments are only as good as the data behind them. For runs synced from Strava , most of it is filled in automatically:
Elevation gain comes from Strava, as recorded by your watch or phone.
Wind speed and temperature come from Open-Meteo: the hourly values at the run's start point, for the middle hour of the run.
Weather icons and unpaved terrain are not part of Strava's data; add them when you edit the workout.
Runs without GPS (treadmill, manual entries) get no weather lookup, so wind and temperature stay empty unless you enter them.
Every value can be corrected in the workout. When you edit the run on Strava later, distance, pace, heart rate and elevation are updated, but wind and temperature keep their first imported (or corrected) values.
Why these defaults
Wind, nothing up to 5 km/h, then 1% per km/h. On a loop or an out-and-back a light breeze gives back on one side most of what it takes on the other; a stronger wind costs more against you than it returns behind you.
Elevation, from 50 m of climbing, 1% per metre per km. The threshold ignores the small rises every route has and the noise in GPS altitude; a route climbing 10 m every kilometre costs about 10% more.
Unpaved terrain, 10% for a fully unpaved run. Grass, gravel and forest paths absorb part of every stride and ask more of the ankles; sand costs far more, firm dirt less. 10% is a middle value for park and trail running.
Rain and snow, 5% and 10%. Wet clothes and shoes weigh more, footing is less sure and strides shorten; snow adds a soft, uneven surface.
Temperature, nothing from 5 to 22 °C, then 1% per degree. Endurance is best in cool weather, around 10 °C for a marathon, and falls off on both sides: in the heat blood goes to the skin to shed heat and the heart rate drifts up; in the cold muscles are stiffer and clothing heavier.
Every threshold and percentage can be changed in Settings. A runner used to the heat can raise the upper temperature or lower its percentage; a confident trail runner can lower the unpaved percentage; a percentage of 0 switches a factor off.
Conditions are stored with each run and Effort is computed when it is shown, so a change in Settings applies to every run, past ones included. The threshold is the exception: each run keeps its own (chapter 1).
Two ways of counting conditions
This chapter counts conditions generously, because Effort measures load: how hard the day was on the body, and erring high keeps Stress on the cautious side. The pace in ideal conditions (chapter 5) counts them sparingly, because it credits fitness, and erring low keeps the fitness scores honest.
Example:
A run at 5:00/km, 28 °C, with 20 km/h of wind: with your Settings its Effort rises by 22%, while the pace in ideal conditions credits 4.5%, 4:47/km instead of 5:00. Both are right for what they measure.
Chapter 3
Stress (Training Load)
Physiological Background
Training stress accumulates over time and dissipates through recovery. This follows the fitness-fatigue model (Banister, 1975), where each workout adds to both fitness and fatigue, but fatigue decays faster than fitness gains.[1]
The Stress metric represents accumulated fatigue from recent training, with more recent workouts contributing more heavily. This helps identify:
Overreaching risk - when stress climbs too high
Taper effectiveness - stress should drop before races
Training consistency - stable stress indicates regular training
Recovery status - how much fatigue remains from recent work
Formula
Stress is calculated as the weighted sum of training load over the past 21 days, with exponentially decaying weights: [2]
S = (1/1000) · Σi=020 (di · Ei + si) · Di
Where:
di
Distance in meters on day i
Ei
Effort value on day i
si
Secondary distance (strength work) on day i
Di
Decay factor for day i
Decay Factors
The decay factors model how fatigue dissipates over time. As in the fitness-fatigue model, fatigue fades exponentially: every day a workout keeps the same share (87%) of the weight it had the day before. Today's workout has full impact (1.0), while a workout from 20 days ago contributes only about 7% of its original load: [1]
Di = e−0.135·i
Where:
i
Days ago (0 = today, up to 20)
0.135
Decay rate per day: a time constant of about 7.4 days, so a workout's weight halves roughly every 5 days
Decay factor D by days ago. Today's workout counts in full; after 5 days about half of its load remains, after 20 days about 7%, and from day 21 it no longer counts toward stress. The shaded area shows how one workout's load is spread over three weeks.
The decay curve follows research on glycogen replenishment, muscle repair, and neuromuscular recovery. Most acute fatigue clears within 7 days, but residual effects persist for 2-3 weeks.
A rule of thumb
If every day were the same, Stress would settle at one day's load times the sum of the 21 decay factors, 7.46. A day's load is its kilometres times its Effort, so with the week spread evenly:
S ≈ 1.07 · kmweek · Eavg
The Stress a week settles into, by weekly volume and average Effort.
Weekly km
E = 1.2
E = 1.4
E = 1.6
30
38
45
51
50
64
75
85
70
89
104
119
90
115
134
153
Real weeks are not even: a long run yesterday weighs more than one six days ago, so daily Stress swings around this level (figure 3.2). Still, it says what a week of training settles into.
How fast Stress responds
After a lasting change in training, Stress covers about 65% of the way to its new level in one week, 90% in two and all of it in three, when the oldest days leave the window. The other way round, a week off takes away about 65% of it. That is why a taper of two or three weeks lowers Stress clearly, while fitness, built over months, holds.
What counts
Runs: distance in metres times Effort.
Strength and other training: its secondary distance in metres, added as it is, so 1,000 m of secondary distance weighs like a kilometre at Effort 1.0.
Planned runs: at their planned pace, or the default Z2 pace without one, so you see where a plan takes your Stress before you run it.
Several workouts on one day: all of them.
When Stress is shown
Stress needs an entry on each of the last 15 days: a run, other training or a rest day. With gaps the app shows nothing rather than a number that would read too low, since a missing day may be a run that was never logged. Log rest days as workouts in the Rest category; plan templates do it for you. Stress is rounded to whole numbers.
Interpreting Stress Values
Guideline ranges for the stress value S.
S
Load
Meaning
< 30
Low Load
Recovery phase, detraining risk if prolonged
30–50
Moderate Load
Maintenance training, good for base building
50–70
High Load
Peak training, monitor for overreaching
> 70
Very High Load
Risk of overtraining, consider recovery
Note: These ranges are individual. Athletes with years of training may handle higher stress, while beginners should stay conservative. Track your personal patterns over time.
Using Stress for Race Preparation
These metrics help you plan training load during peak phases leading up to a race. The key principle: avoid exceeding stress levels significantly higher than your previous training peaks.
When building toward a goal race:
Review your stress values from previous successful training blocks
Use those peaks as a ceiling - don't exceed them by more than 10-15%
Build gradually toward that ceiling over several weeks
Allow stress to drop during taper (typically 30-50% reduction)
Daily stress of the sample runner from the home page demo through a half-marathon build, computed with the app's own formulas. Stress climbs to a peak of 104, falls by 46% during the three-week taper (shaded) to 56 the day before the race, and keeps dropping in the recovery weeks after it.
Pushing stress far beyond what your body has previously handled increases injury risk and often leads to arriving at race day fatigued rather than fresh. Progressive overload means small, sustainable increases - not dramatic jumps that overwhelm your recovery capacity.
Chapter 4
Planning a training block
Plan templates turn a goal, a race date and how you train today into a block where every session is planned. The rules are deterministic: the same inputs always give the same plan, and the tables and the figure in this chapter come from the code that builds it.
Starting from current fitness
Everything is anchored on a threshold pace T: the pace of a race lasting about 55 minutes. It comes from, in order: the threshold you set in Settings; your most recent race in the log (3–25 km, in the last 14 weeks, never a marathon); the current race pace you enter for the goal (not for the marathon, whose pace is no proxy for threshold); or a conservative estimate. The target pace is never used: training follows the fitness you have, and the target stays the race goal. When the threshold is estimated from a performance, adding the plan saves it in Settings.
t(d) = 3300 · (d / dT)1.06
Where:
t(d)
race time (s) over a distance d in km
dT
the distance covered in 55 minutes (3300 s) at threshold pace
1.06
Riegel's fatigue exponent: going twice as far takes a little more than twice as long
Every training pace follows from T by the same model: 3K, 5K, 10K, half-marathon and marathon pace, the marathon a further 2% slower since few runners hold the predicted pace that long. From a 4:00/km threshold: 3K 3:39, 5K 3:46, 10K 3:55, half marathon 4:06, marathon 4:22. Easy pace is the one in Settings and never speeds up because the goal is faster. [5][6]
Example:
A 22:30 5K (4:30/km) implies a threshold of about 4:44/km, well slower than 5K pace. A 40:00 10K implies about 4:04, and a 1:30 half marathon about 4:09, a little faster than its race pace.
Fitness may improve during the block, but conservatively: about 0.3% of T per build week, at most 4%, and never past the target. A target further away is noted as ambitious; the workouts stay realistic and the race itself is planned at the target.
Periods and recovery weeks
A block runs through Base (aerobic development), Build (threshold work), Specific (race-specific work) and a Taper, in proportions that depend on the goal: the marathon gives more weeks to base and specific work, the 10K more to building threshold. Base building is all base, without a taper.
Usual block length and the share of the weeks before the taper given to each period.
Goal
Weeks
Base · Build · Specific
Taper
5K
8
30 · 35 · 35%
1 week
10K
10
25 · 40 · 35%
1 week
Half marathon
12
30 · 35 · 35%
2 weeks
Marathon
16
35 · 25 · 40%
3 weeks
Base building
8
100 · 0 · 0%
–
After two or three loading weeks comes a lighter week (every two for runners under 30 km a week), never in the first three weeks or just before the taper. It runs at 80–90% of the level it interrupts, and its key session is about 30% smaller too. A race closer than the usual block gets a shorter one (at least four weeks); a race further away a longer, gentler one.
Weekly volume
Week one is your current volume. Each loading week adds a modest step that gets smaller as volume grows: 6% below 25 km a week, 5% up to 50 km, 4% up to 80 km and 3% above, never more than 10%. A block stretched over more weeks spreads the same growth more gently.
Peak volume has two ceilings, never targets: 1.25 to 1.45 times the starting volume depending on the goal, and about 18 km per training day plus 10 (20 for the marathon), so six days with a rest day hold around 118 km. The days are always yours to choose; picking more than you have been running holds the volume for two weeks per added day, so frequency and volume don't rise together.
Planned weekly volume of a 12-week half-marathon block from 40 km a week on four days: modest steps with lighter weeks, a peak of 54 km, then a two-week taper.
Long runs
The long run is sized by you, not by the race distance: a share of the week that falls as training days rise (35% at three days to 26% at seven) and eases off above 60 km a week. That gives roughly 9–10 km at 30 km a week, 15 km at 50, 18–19 km at 70 and 22 km at 90, for a 5K runner as much as for a marathoner; the marathon adds 4 points of the week and the half marathon 2.
It starts from your longest run of the last four weeks and grows by about 10% a loading week (1–2 km, 2.5 for the marathon), never jumping to meet the share. It never takes more than 40% of the week, or longer than 2:30 at long-run pace (2:45 for the marathon). In marathon-specific weeks every other long run finishes at marathon pace, from 4 km growing to 12; late in a half-marathon block some carry 3–6 km at half-marathon pace. 5K, 10K and base long runs stay aerobic.
Key sessions
Each goal has a small library of sessions per period, rotated week by week instead of one session repeated with more reps. 5K: hills, threshold cruise intervals and controlled 400s, then 600–800 m at 5K pace, then 1000 m reps, 400 m at 3K effort and a 1200-1000-800-600 ladder. 10K: tempo and threshold cruise intervals, then 1–2 km reps at 10K pace. Half marathon: threshold, then blocks at half-marathon pace. Marathon: threshold, then marathon-pace blocks and continuous marathon pace.
The hard part of a session scales with your weekly volume, within limits per effort. Warm-up and cool-down add 2–5 km, and recoveries suit the session: short jogs between threshold reps, longer ones between 5K reps.
Hard volume per session: a share of the week, within a minimum and a maximum (higher from 70 km a week).
Effort
Share of the week
At least
At most
From 70 km/week
3K effort
6%
2 km
3.5 km
4.5 km
5K pace
8%
2.4 km
5 km
6 km
10K pace
10%
3 km
6 km
8 km
threshold
11%
3.5 km
7 km
9 km
half-marathon pace
12%
4 km
10 km
12 km
marathon pace
16%
6 km
14 km
16 km
A second key session is planned only at six or seven training days and at least 50 km a week, on a day at least two days from both the main session and the long run, and only when neither carries big race-pace work. Together the two stay within 16% of the week.
The session library
These are the sessions each goal rotates through, period by period. The table shows their shape; the number of repetitions and the length of continuous runs follow from your weekly volume (table 4.2).
Key sessions per goal and period: repetition length, effort and recovery.
Goal
Period
Session
5K
Base
60 s hills1000 m at threshold, 60 s400 m at 5K pace, 75 s
Build
600 m at 5K pace, 90 s1200 m at threshold, 60 s400 m at 3K effort, 90 s800 m at 5K pace, 120 s
Specific
1000 m at 5K pace, 120 s400 m at 3K effort, 60 s1200-1000-800-600 m at 5K pace800 m at 5K pace, 90 s
10K
Base
continuous at threshold75 s hills1600 m at threshold, 60 s
Build
2000 m at threshold, 90 s800 m at 5K pace, 90 scontinuous at threshold1000 m at 10K pace, 75 s
Specific
1000 m at 10K pace, 75 s1600 m at 10K pace, 90 s2000 m at 10K pace, 120 s3000 m at threshold, 120 s
Half marathon
Base
1000 m at threshold, 60 scontinuous at steady pace60 s hills
Build
2000 m at threshold, 90 scontinuous at threshold3000 m at threshold, 120 s
Specific
5000 m at half-marathon pace, 180 s2000 m at threshold, 75 s3000 m at half-marathon pace, 120 s
Marathon
Base
1000 m at threshold, 60 scontinuous at steady pace60 s hills
Build
2000 m at threshold, 90 s4000 m at marathon pace, 120 s3000 m at threshold, 120 s
Specific
5000 m at marathon pace, 180 scontinuous at marathon pace2000 m at threshold, 75 s
Base building
Base
60 s hills1000 m at threshold, 60 scontinuous at steady pace
The week, and rest days
Sessions go on your training days by priority: the long run on Sunday (else Saturday, else your last training day), the main session at least two days from it (Tuesday first), easy runs on the other days, a recovery run right after a hard day from five days a week, and strides (short, relaxed accelerations) on one easy run from four days a week. A final check keeps hard sessions at least 48 hours apart and at most two a week. The rest days you choose are logged as rest.
A week from the sample block
Week 7 of the sample block in figure 4.1 is a Specific week of 51.1 km on four days; its race week follows. Each session's pace is its average, warm-up and cool-down included; the description names the hard part.
Week 7 and race week of the sample half-marathon block (threshold 4:20/km, easy 5:30/km).
Day
Session
km
Pace
Monday
Rest
Tuesday
2 × 3 km at half-marathon pace
9.5
4:51/km
Wednesday
Rest
Thursday
Easy
12
5:30/km
Friday
Rest
Saturday
Easy + 6 × 20 s strides
12
5:30/km
Sunday
Long Run
17.5
5:35/km
Race week
Monday
Rest
Tuesday
2 × 1600 m at half-marathon pace
5.5
4:54/km
Wednesday
Rest
Thursday
Easy
7
5:30/km
Friday
Rest
Saturday
Rest
Sunday
Race: Half marathon
21.1
4:28/km
Taper and race week
The taper is distance-specific: the race week for 5K and 10K, two weeks for the half marathon (85%, then 50% of the peak) and three for the marathon (80%, 65%, 35%). Intensity stays: race week keeps a short sharpener at race rhythm (4 × 400 m at 5K pace, 4 × 600 m at 10K pace, 2 × 1600 m at half-marathon pace, or 3 km at marathon pace), at least three days before the race, and nothing the day before.
Notes, never blocks
A plan is always generated; what deserves a second look is noted: a target faster than one block can bring, volume or training days low for the goal, a long run over 40% of its week, a week rising more than 12%, long daily runs on few days (with a suggestion of one more day, never more than six), and a threshold that was estimated rather than set.
From template to log
Every session becomes a planned workout in your log, with its distance, paces, zones and a title, and counts toward Effort and Stress like any planned run.
The other days are logged as rest days, so Stress keeps its history (chapter 3).
Days already gone this week are left alone. Planned workouts that are not done yet are replaced, unless you choose to keep them alongside; completed runs and runs from Strava are never replaced.
Each session stores the threshold it was planned with, so its Effort stays put if your threshold changes later.
Everything stays editable: move, change or delete sessions like any other workout.
Chapter 5
Fitness scores and ideal conditions
Effort and Stress measure load: how hard a run was, and how much has built up. The fitness scores measure something else: what a run says about how fit you are. Two runs can carry the same load while one shows better fitness, so fitness is computed separately, with conditions credited as realistically as possible.
Pace in ideal conditions
A run's pace can be converted to flat, paved, windless, mild and dry conditions. Each condition adds a small, conservative cost c to the time; the speed in ideal conditions is the speed times all of them. The same costs credit conditions in the fitness scores and in the line added to Strava descriptions, while Effort keeps the effort model of chapter 2.
videal = v · Π (1 + ck)
The cost of each condition, as a share of the time.
Condition
Cost
wind
quadratic in wind ÷ speed (below): air resistance is about 4% of the energy of running, and forecast wind × 0.65 is the wind at a runner's height; only the wind above the Effort wind limit counts (Settings → Effort, 5 km/h by default)
hills
0.16% per metre of climb per km: a route is taken as a loop, and descending gives back less than climbing costs; from the Effort climb limit (50 m by default)
terrain
3% for a fully unpaved run, 8% when it is rough, in proportion
temperature
0.3% per °C above 22 °C; 0.2% per °C below 5 °C (the Effort temperature limits, these by default)
rain or snow
1% in rain, 4% in snow
cwind = 0.04 · (0.65 · w / v)2
Where:
w
wind speed from the weather forecast (m/s)
v
running speed (m/s)
0.04
the share of running's energy that goes into air resistance
Not counted: humidity, altitude, the wind's direction relative to the route, and point-to-point routes that drop more than they climb. [3][7][8]
The three fitness scores
Each week has three scores, shown in its summary with their trend:
Aerobic score. speed per heartbeat on easy and long runs in zone 2, weighted by distance and credited for conditions. Faster at the same heart rate, or as fast at a lower one, scores higher.
A = v / HR · 1000 · fcond
Interval score. quality distance times the effort at interval pace, credited for conditions and for the session's structure (rep length, and how dense the reps are). It does not use heart rate: a session's average mixes warm-up, reps and recoveries.
Tempo score. how close the pace was to world-record pace for that distance, credited for conditions and squared. Tempo runs are also scaled by (165 / HR)², because the same pace at a lower heart rate is the fitness signal. Races count the result only, run at near-maximal heart rate anyway.
S = (tWR(d) / t · fcond)2 · 100 · (165 / HR)2
Weekly scores are shown as an index to the first scored week of the chosen window, so fixed references such as 165 bpm cancel out.
The aerobic score in detail
Runs that count: easy and long runs logged in zone 2, with no secondary zone, a pace and an average heart rate. Each scores its speed per heartbeat, credited for conditions, and the week takes the average weighted by distance, so a long run counts more than a short one.
Example:
An easy run at 5:30/km and 140 bpm in ideal conditions: speed 3.03 m/s, so A = 3.03 / 140 · 1000 = 21.6. The same run at 135 bpm scores 22.4.
The interval score in detail
A session scores its quality distance times the Effort at its interval pace, credited for conditions, times a structure factor: longer repetitions and shorter recoveries are harder at the same pace.
fs = √(r / 400) · ρ / 0.5, 0.5 ≤ fs ≤ 2
Where:
r
repetition length (m)
ρ
time running fast ÷ (time running fast + recovery time)
The factor is 1 for 400 m repetitions with as much recovery as running, and is held between 0.5 and 2, so no structure more than doubles or halves a session. The week takes the average of its sessions.
The structure factor of some common sessions.
Session
Density
Structure factor
10 × 400 m at 3:40/km, 60 s recovery
0.59
1.19
6 × 800 m at 3:45/km, 90 s recovery
0.67
1.89
5 × 1000 m at 3:50/km, 90 s recovery
0.72
2.00
3 × 2000 m at 4:00/km, 120 s recovery
0.80
2.00
2 × 5000 m at 4:15/km, 180 s recovery
0.88
2.00
The tempo score in detail
Tempo runs and races are compared with the men's world-record curve, which already holds how pace slows with distance. The record time for the run's distance is interpolated on a log–log scale between the points below; intensity is that time divided by yours.
The world-record reference behind the tempo score.
Distance
Time
400 m
0:43
800 m
1:40
1500 m
3:26
3 km
7:20
5 km
12:35
10 km
26:11
16.09 km
44:23
21.1 km
58:01
42.2 km
2:01:39
Example:
A 10 km race in 45:00: intensity = 1571 / 2700 = 0.582, so S = 0.582² · 100 = 33.9 before conditions. A tempo run is also scaled by (165 / HR)².
An example
Two near-identical 10 km tempo runs, a week apart on the same loop:
Two tempo runs, as the app scores them.
Sep 26
Oct 3
Distance and pace
10 km · 4:01/km
10.03 km · 3:59/km
Average heart rate
167 bpm
164 bpm
Climb, unpaved, temperature, wind
77 m · 17% · 14 °C · 7.5 km/h
76 m · 17% · 13 °C · 3 km/h
Pace in ideal conditions
3:57/km
3:55/km
Tempo score
43
45.3
Both carry the same Effort: the second run was faster, with less wind. Its tempo score is 5.4% higher, in line with its better speed per heartbeat (faster at 3 bpm lower), and only a little of that is explained by the calmer day.
Weeks, indexes and trends
Each week's scores average its sessions; filler runs are left out, and a week without a session of a kind has no score for it: a gap, not a zero. The trend chart shows every week as an index, the first scored week of the chosen window being 100, and the week summary compares the week with the average of the three before it.
What the scores cannot see
Heart-rate errors: an optical sensor at the wrist can lock onto your cadence or lag at the start.
Runs logged in the wrong zone or category, which then count where they should not.
Treadmill paces, and GPS paces among tall buildings or under trees.
Humidity, altitude, illness, accumulated fatigue and the menstrual cycle, none of which is in the data.
Read the scores as trends over several weeks, not as a verdict on a single run.
Appendix A
Default settings and constants
The values the app starts with. The first table can be changed in Settings; the second is fixed in the code.
The effort model in Settings, with its defaults.
Setting
Default
Lactate threshold pace
4:00/km
Default Z2 (easy) pace
5:10/km
Wind: no adjustment up to
5 km/h
Wind: for each km/h above that
1%
Elevation: adjusted from a gain of
50 m
Elevation: per metre of gain per km
1%
Unpaved terrain: a fully unpaved run
10%
Rough terrain: a fully rough run
25%
Rain
5%
Snow
10%
Temperature: comfortable range
5–22 °C
Temperature: per °C outside it
1%
Fixed constants of the models.
Constant
Value
Effort at threshold
2.85
Effort, per second slower than threshold
× e^−0.0115 per second
Effort, per second faster than threshold
× e^0.01725 per second
Pace-effort table
60 s faster to 90 s slower, every 10 s
Stress window
21 days
Stress decay rate
0.135 per day
Days with an entry needed for Stress
15 days
Tempo score reference heart rate
165 bpm
Threshold: a race lasting
55 min
Race equivalence exponent (Riegel)
1.06
Extra slowdown for the marathon
2%
Fitness gain per build week
0.3%, 4% in all
Weekly volume steps
6% below 25 km, 5% to 50 km, 4% to 80 km, 3% above
Long run, share of the week (3 to 7 days)
35% · 32% · 30% · 28% · 26%
Long run, at most
40% of the week, 150 min (165 min for the marathon)
Second key session from
6 days and 50 km a week
Appendix B
Glossary
Terms as this book uses them.
Aerobic score
Speed per heartbeat on easy and long runs in zone 2, credited for conditions (chapter 5).
Base period
The first period of a block: aerobic development, hills and short threshold work.
Build period
Threshold work and, for the shorter races, faster repetitions.
Cardiac drift
The slow rise of heart rate at a steady pace over a long or hot run.
Cutback week
A lighter week, at 80–90% of the level it interrupts, that lets training sink in.
Easy pace (Z2)
Comfortable, conversational running: the default Z2 pace in Settings.
Effort (E)
How hard a kilometre was, from its pace relative to your threshold and the conditions; 2.85 at threshold.
Ideal conditions
Flat, paved, windless, mild and dry. A run's pace converted to them credits fitness.
Interval score
Quality distance times the Effort at interval pace, with conditions and a structure factor.
Key session
The week's main quality workout.
Lactate threshold (LT)
The fastest pace at which lactate is still cleared as fast as it is produced, close to the pace of a one-hour race.
Long run
The week's longest run, sized from your volume and training days.
Quality distance
The part of a session run at its hard pace.
Race equivalence
One race time predicted from another: time grows with distance to the power 1.06 (Riegel).
Specific period
Work at and around race pace for the goal.
Stress (S)
Load from the last 21 days, each day weighted by how recent it is.
Strides
Short, relaxed accelerations of about 20 seconds at the end of an easy run.
Taper
The last one to three weeks before a race: less volume, intensity kept.
Tempo score
How close a tempo run or race came to world-record pace for its distance, squared.
Threshold pace (T)
In plans, the pace of a race lasting about 55 minutes: the anchor of every training pace.
Training block
The weeks of training planned toward one goal.
Zones (Z1–Z5)
Intensity bands, from very easy (Z1) to very hard (Z5).
Foster, C. et al. (2001). A new approach to monitoring exercise training. Journal of Strength and Conditioning Research.
Pugh, L.G. (1971). The influence of wind resistance in running and walking. Journal of Physiology.
Seiler, S. & Kjerland, G.O. (2006). Quantifying training intensity distribution in elite endurance athletes. International Journal of Sports Physiology and Performance.
Riegel, P.S. (1981). Athletic records and human endurance. American Scientist.
Daniels, J. (2014). Daniels' Running Formula (3rd ed.). Human Kinetics.
Minetti, A.E. et al. (2002). Energy cost of walking and running at extreme uphill and downhill slopes. Journal of Applied Physiology.
Ely, M.R. et al. (2007). Impact of weather on marathon-running performance. Medicine & Science in Sports & Exercise.
Running Browser is a training log and planner for runners: plan your weeks, run them, and see how they add up. It turns every run into Effort and Stress, credits the conditions it was run in, and builds training blocks from plan templates around your goal and your week.
It is made in the Netherlands, by a runner, for runners who want to know what their training is doing. Runs can be synced from Strava, and everything in this book is how the app works today.
This book is set in a serif typeface for reading and laid out live in your browser, one column per page. The equations, tables and figures are drawn by the same code that runs the app.
It is updated with the app: when a model changes, the book changes with it.