Archive / Bakken Phases / Implementation Notes

Implementation Notes

L2 design doc. Every Bakken-stated parameter is named with units and source citation. Comparison to what tren does today. Open questions for the engine-implementation plan to pick up. No code references — those belong in plans/.

Dev & Sport ScienceUpdated 2026-05-15

Section 0Executive Summary — What Would Change

Tren’s planner today uses Jack Daniels VDOT-derived pace zones and a 5-phase race-block periodization model (speed → extend → race_specific → long_runs → simulation) computed by tren_plan_engine_v2/src/periodization.py. Bakken’s model differs in three fundamental ways:

DimensionTren todayBakken modelDelta
Intensity prescriptionPace-based (Daniels VDOT paces)Lactate-based (mmol/L targets per session)Gap — no mmol/L layer in engine
Threshold target~4.0 mmol/L implied (LT2 pace)2.0–3.0 mmol/L (lower, higher volume)Gap — tren LT2 pace is Bakken Z3/Z4 boundary
Session structureSingle sessions; no AM/PM splitsDouble-threshold days (AM + PM), 2×/wkGap — no double-session concept in data model
Year structureRace-block phases backward from A-raceFlat weekly template + altitude-anchored variationPartial — seasonal context missing; race block present
Race build phases5 phases: speed, extend, race_specific, long_runs, simulation4 phases: Intro, Development, Core, TaperPartial — tren has a race block but phase content differs
Microcycle blocksWeekly J-H-R-Ret volume cycle10–14 day intensive blocks + 7-day lighterGap — tren cycles are weekly, not 10-14 day
Career maturityAerobic maturity score scales Q_pct 0.15→0.55Maturity determines whether volume or quality is primary driverPartially implemented — aerobic_maturity_design.md
→ For comparison — Bu & Ingebrigtsen

Bu’s athletes (active pro racers) run 4+ threshold sessions/wk and 20+ h/wk Z1–Z2, resulting in the same emergent 80/20 ratio but through higher absolute volume. Ingebrigtsen uses the same double-threshold structure as Bakken but at 160–200 km/wk with altitude camps as the primary periodization tool. Both are consistent with Bakken’s core framework; they differ only in total training load and competitive-season demands.

Section 1Lactate Zones — Bakken vs. Daniels (tren today)

ZoneBakken lactate (mmol/L)Bakken %VO₂maxBakken intentDaniels equiv. (tren today)Source
Z1 Easy< 1.5 mmol/L59–74%Recovery; capillary + mitochondrial density over yearsEasy (E) pace: 59–74% VO₂maxmariusbakken.com — Kenyan Training; bakken-research.md
Z2 Aerobic1.5–2.0 mmol/L75–82%Aerobic endurance; used as float recovery between threshold repsModerate / sub-threshold (“M” pace)mariusbakken.com — Kenyan Training
Z3 Threshold (LT)2.0–3.0 mmol/L83–88%Primary training zone. All double-threshold sessions target here. Steady-state below 3.0.Threshold (T) pace: 83–88% VO₂max / ~4 mmol/L impliedmariusbakken.com — Norwegian Model; Running Writings 2024
Z4 Track3.0–8.0 mmol/L95–100%Race-specific intervals; VO₂max work; “X element” (1×/wk max)Interval (I) pace: 95–100% VO₂maxmariusbakken.com — Kenyan Training; Norwegian Model
Z5 Lactic> 8.0 mmol/L> 100%Very occasional; pure lactic; race-specific onlyRepetition (R) pace: 105–120% VO₂maxmariusbakken.com — Kenyan Training
Worked Example — Preben (VDOT 59, established tier, ~40 km/wk, 10K focus)

Preben VDOT 59 → Daniels T pace ≈ 4:07/km (tren’s current LT2 target). In Bakken’s model, this pace corresponds to approximately 3.5–4.5 mmol/L — above Z3 into Z4. Preben’s Bakken Z3 threshold would be closer to 4:20–4:30/km (2.0–2.5 mmol/L). The Bakken prescription is slower but allows 2× the volume at that intensity. His current 42% threshold ratio at ~40 km/wk is consistent with an established-maturity athlete applying Bakken’s philosophy.

Critical implementation note: tren currently has no field for lactate-mmol/L targets. Pace zones are derived from VDOT. Implementing Bakken’s Z3 prescription requires either (a) a lactate-to-pace conversion that accounts for individual threshold lactate level (VDOT + lab test result), or (b) accepting that tren’s T pace ≈ Bakken Z3/Z4 boundary and communicating this to users. Option (b) is a safer first step; option (a) is the physiologically correct implementation.

Section 2Year (A) — Seasonal Periodization, Formalized

Bakken’s year is not a sequential 4-phase mesocycle. It is a flat weekly template where the intensity mix and volume shift by season, anchored by altitude blocks. The following table formalizes the primary-source parameters.

SeasonDurationWeekly kmThreshold sessions/wkIntensity characterTransition trigger
Winter / Base~26 wk (Nov–Apr)160–230 (optimal ~180)4 (2× double-threshold) + 1× X elementMaximize threshold volume; all Z3 with one Z4 session/wkDate-driven (spring race season starts). No physiological threshold.
Spring / Build~13 wk (Apr–Jun)~160–1803–4 (mix of double and single)Introduce 300–400m track at Z4 (6–8 mmol/L); maintain Z3 baseFirst competition period beginning; track season approach.
Summer / Competition~10 wk (Jul–Sep)~160 (reduced)1–2 single threshold sessions“Much more pure sessions, either a pure session in relation to 5000 or 3000 pace” (Running Writings, 2024)Major race schedule dictates. Reduce doubles; preserve speed.
Taper~2 wk−50% vs competition1–2 (shortened)Intensity preserved; volume halved. Standardized threshold 2d pre-race.A-race date − 14 days.
Worked Example — Preben (VDOT 59, established tier, ~40 km/wk, 10K focus)

Preben (10K focus, ~40 km/wk) maps to established tier. In a Bakken-informed year, his Winter/Base would maintain 2 threshold sessions/wk (not full double-threshold — established tier, not pro). Spring/Build adds one 5K/10K pace session. Summer/Competition reduces to 1 threshold + 1 race-specific session per week. Taper: 1 short threshold (3×6min) 2 days before race. Altitude is optional — the flat weekly template at his volume level doesn’t require it.

→ For comparison

Tren’s current periodization maps phases backward from the A-race, producingspeed → extend → race_specific → long_runs → simulation. This is closer to Lydiard/Pfitzinger periodization than Bakken. Adding a “seasonal context” layer above the race-block phases (so Winter/Base influences Q_pct, and Summer/Competition signals fewer doubles and more race-specific work) would be the minimal-diff Bakken integration.

Section 3Race Build (B) — 100-Day Marathon Plan, Formalized

Four explicit phases (the plan preamble says “5 distinct phases” but enumerates 4; we adopt 4 as canonical). Total duration: 15 weeks / ~105 days. Plan is flexible 60–150 days without losing structural integrity. Source: 100daymarathon.com.

PhaseWeeksVolume vs peakDominant sessionsMarker workoutsExit criteria
1. Introduction1–2~60%45/15 intervals (neuromuscular priming)8–10 × 45s hard, 15s easy. Z4 single reps (1 min hard, 30s).Time-based (2 weeks)
2. Development3–6~75–85%VO₂max work (5K/10K pace) progressng to threshold (HM pace)5×1000m @ 5K pace (Z4); 4×8 min @ HM effort (Z3); progressive runs.Time-based (4 weeks)
3. Specifics — The Core7–13~90–100%Long runs with marathon-pace segments + extended threshold sessions16–20 km long run with 8–10 km @ marathon pace (2.0–2.5 mmol/L); 5×5 min threshold with 2-min float.Time-based (7 weeks)
4. Taper & Race14–15~50%Reduced volume; intensity unchangedDay −4: 4×1000m diagnostic @ race pace (reads readiness). Day −2: standardized 2×8 min threshold.Race day
Worked Example — Preben (VDOT 59, established tier, ~40 km/wk, 10K focus)

Preben targeting a 10K in 15 weeks (from today, 2026-05-15, A-race ~2026-08-30): Phase 1 through May 29; Phase 2 through June 26; Phase 3 through August 14; Phase 4 through race day. His marker workouts: Phase 3 long run with marathon-pace segments replaced by 10K-pace segments (he is not a marathoner) — e.g. 10 km easy + 3 km @ 3:55/km (his 10K race pace at VDOT 59). Phase 4 diagnostic: 4×1000m targeting 3:55/km — if lactate stays below 3.5 mmol, race-day pacing plan is on track.

→ For comparison

Tren’s current 5-phase race block maps closest to Bakken Phase 2 (speed ≈ Development) and Phase 3 (race_specific + long_runs ≈ Core). The Bakken “Introduction” phase (neuromuscular priming) has no equivalent in tren today. The Bakken Taper (with the 1000m diagnostic) is more prescriptive than tren’s current simulation phase.

Section 4Microcycle Blocks (D) — Block Math

Bakken structures intensive training into blocks. There are two documented models:

ModelBlock lengthRecovery periodSession mapWhen to apply
Altitude (short)7–14 days at altitude~7 days easy on returnThreshold on days 1, 3, 5, 7 (of altitude trip). Rest/easy other days.Athletes with altitude access. Bakken’s preferred model: “I wasn’t after hemoglobin — it was the training effect.”
Non-altitude block10–14 days intensive7 days lighter2× double-threshold days per week within the block. Standard flat-week template.Athletes without altitude access. Bakken suggests this as the “10–14 days on and 7 days off” substitute.

Post-altitude peaking windows (Bakken’s personal response curve, consistent race-after-race per Running Writings 2024 interview):

Days post-altitudeExpected performance
1Poor
5–7Low point (notable dip)
10–11, 14Peak window — race here
17–20Secondary peak

Race week template (within peak window): Day −6/−7 threshold session; day −4 diagnostic 1000m repeats at race pace (readiness predictor); day −2 standardized short threshold; race day.

Worked Example — Preben (VDOT 59, established tier, ~40 km/wk, 10K focus)

Preben does not use altitude. For him, the non-altitude block model applies: 10–14 days of full training (2 threshold sessions/wk at his established-tier volume), then a 7-day lighter week. This maps to tren’s current J-H-R-Ret 4-week cycle (Jump → Hold × 1 → Reduce → Return) — the reduction week approximates the 7-day lighter period, and the jump week approximates the transition into the next block. The main difference is duration: Bakken’s block is 10–14 days, tren’s is 28 days (4-week). This is an open design question.

Section 5Career Maturity (C) — What's Already in Tren vs Bakken's Prescription

Tren already implements aerobic maturity via aerobic_maturity_design.md and the aerobic_maturity field in plan_states.state. The maturity score scales Q_pct (quality proportion ceiling) from 0.15 to 0.55. Bakken’s model adds specificity to what that maturity means at session level.

Maturity tierBakken prescriptionTren todayGap
New runnerEasy volume primary. Single threshold sessions only. Z1/Z2 builds structural base (bone, tendon).Q_pct ceiling 0.15. Low threshold volume.Aligned
Developing2 threshold sessions/wk introduced. No double-threshold days yet.Q_pct ceiling ~0.25.Partial — no rule preventing double-threshold for developing tier
EstablishedDouble-threshold days appropriate. Easy volume can be selectively reduced. Quality proportion 25–40%.Q_pct ceiling ~0.40.Partial — Q_pct right; double-threshold structure not yet in data model
Mature / Quality-dominant3 quality sessions/wk. Easy volume near-zero (for deeply established athletes). Threshold is full driver.Q_pct ceiling 0.55. aerobic_maturity ≥ 0.60.Mostly aligned — threshold-as-driver logic in aerobic_maturity_design.md
Worked Example — Preben (VDOT 59, established tier, ~40 km/wk, 10K focus)

Preben: established tier, aerobic_maturity ≈ 0.55–0.65 (7.5 years running, thousands of cumulative km). Q_pct ceiling 0.40–0.45. His current 42% threshold at ~40 km/wk is consistent with mature-established behavior — not a distribution problem, per Bakken’s philosophy. Double-threshold days are appropriate for him at his volume level; the engine does not currently prescribe them (they would be 2 sessions in one day, ~8–10 km total, twice a week at his volume). This is the largest structural gap for Preben.

Section 6Tren Today vs Bakken — Full Mapping Table

ConceptTren todayBakken modelDelta
Intensity modelDaniels VDOT pace zones (E, M, T, I, R)Lactate mmol/L zones (Z1–Z5, 1.5 / 2.0 / 3.0 / 8.0 thresholds)Gap — no mmol/L layer
Threshold target lactate~4.0 mmol/L implied (Daniels T)2.0–3.0 mmol/LGap — Bakken threshold is lower and wider
Session structureSingle sessions; AM/PM splits undefinedDouble-threshold days (AM long intervals + PM short intervals)Gap — data model has no AM/PM split concept
Year periodizationRace-block phases backward from A-race onlyFlat weekly template + seasonal intensity-mix shiftsGap — no seasonal layer above race block
Race build phasesspeed → extend → race_specific → long_runs → simulationIntroduction → Development → Core → TaperPartial — structure present; Bakken phase content differs
Volume cycle (microcycle)4-week J-H-R-Ret (Jump +5–10% → Hold → Reduce −25% → Return 90%)10–14 day intensive + 7-day lighter (non-altitude); 7-14d altitude trip + 7d recoveryPartial — reduction logic present; block length and altitude-peaking absent
Taper protocolPhase: simulation (Mujika-inspired −50% volume, intensity maintained)2 weeks: standardized threshold D−2; 1000m diagnostic D−4; volume −50%Mostly aligned — diagnostic session not present
X element / VO₂max sessionPrescribed per aerobic_maturity and VO₂max tier (Z4 format)1×/wk; hill sprints or 10×200m in Winter; race-specific Z4 in SummerMostly aligned
Career maturityaerobic_maturity score → Q_pct 0.15–0.55Maturity = permission to reduce easy volume + raise quality proportionMostly aligned — aerobic_maturity_design.md
Long run philosophylong_runs phase prescribes long runs as a training stimulusLong run is a race rehearsal, not a training stimulus (fueling, pacing, time on feet). Cap at 16–18 km for 5K/10K athletes.Partial — marathon athletes get long runs; 5K/10K athletes could benefit from Bakken’s cap

Section 7Open Design Questions

These are the unresolved tradeoffs the engine-implementation plan will need to decide:

#QuestionOptionsBakken’s answer
OQ1How do we prescribe Bakken Z3 (2.0–3.0 mmol/L) when we don’t have lactate data for most users?(a) Use VDOT-derived sub-threshold pace as proxy (~Z3 lower bound). (b) Collect lactate via lab test (onboarding step physiology). (c) Use HR: target 80–87% HRmax.Lactate testing is the ground truth. HR is a reasonable proxy if "the heart rate at lactate threshold rises with fitness" (Running Writings 2024).
OQ2Should the engine prescribe double-threshold days (AM + PM sessions on same day)?(a) Yes, for established/mature athletes with ≥35 km/wk. (b) No — current tren data model only supports 1 session per day. Implement single extended threshold sessions instead.Double-threshold requires ≥35 km/wk and established+ tier. Below that, single sessions are the right prescription.
OQ3Should the volume cycle shift from 4-week J-H-R-Ret to Bakken’s 10–14 day blocks?(a) Keep 4-week cycle (matches tren’s current MSK/bone remodeling rationale). (b) Move to 10–14 day. (c) Make configurable per tier.10–14 day block with 7-day lighter. But his rationale is altitude-anchored; without altitude, the 4-week cycle may be physiologically justified (MSK remodeling takes 3–4 weeks).
OQ4Should tren add a seasonal periodization layer above the race-block phases?(a) Yes — add Winter/Spring/Summer/Taper layer; let it influence Q_pct and session composition. (b) No — race-block phases are sufficient; seasonal color is educational only.Bakken’s year is fundamentally flat; the seasonal shifts are modest. The race-block model may be a better practical fit for tren’s goal-based architecture.
OQ5Should tren add the 1000m diagnostic session to the taper phase?(a) Yes — prescribe a race-specific diagnostic 4 days before A-race. (b) No — readiness is covered by ACWR and the planner; adding a diagnostic prescription is over-engineering for recreational athletes.Bakken considers this non-negotiable for knowing readiness. But he was a pro with a lab; recreational athletes may find it confusing.
OQ6How should the Intro phase (neuromuscular priming) be added to tren’s race build?(a) Prepend a 1–2 week “activation” block before the current speed phase. (b) Merge neuromuscular work into the speed phase (already has strides/X-element). (c) Make it conditional on maturity tier (only new/developing athletes need it).Short fast work (45/15s, strides) as phase entry is appropriate at all levels but especially for athletes coming off easy base training.
Sources
Bakken, M. — The Norwegian Model. mariusbakken.com (primary source — phase parameters, zone numerics, altitude integration).
Bakken, M. — Norwegian Model Revisited. mariusbakken.com (primary source — pro-era weekly template, flat-week philosophy, retirement template).
Bakken, M. — Kenyan Training: A Practical Guide. mariusbakken.com (primary source — formal 5-zone table, Z1–Z5 mmol/L thresholds).
Running Writings — Marius Bakken on Double Threshold Training (interview), Sept 2024. runningwritings.com (primary source — altitude peaking windows, block structure, career maturity evolution, HR at threshold).
100daymarathon.com — 100-Day Marathon Plan. 2024 (primary source — 4-phase race-build structure, 8 difficulty levels, Kenyan-Italian framing).
Mujika, I. (2010) — Intense Training: The Key to Optimal Performance Before and During the Taper. Scand J Med Sci Sports. (cited by Bakken: taper volume −50%, intensity preserved).
Hickson, R.C. et al. (1985) — Reduced Training Intensities and Loss of Aerobic Power. J Appl Physiol 58(2):492. (cited by Bakken: intensity preservation during reduction weeks).
tren codebase — research/aerobic_maturity_design.md, research/bu-research.md, tren_plan_engine_v2/src/periodization.py, tren_domain/src/tren_domain/planner/volume_cycle.py.