CRIS GROSSMANN LET'S BUILD →
AI Race Engineering · Head Coach

It missed my race
by two minutes.
It called the split
that mattered to 4 seconds.

An AI head coach built on fourteen years of my own telemetry — every ride, run, swim and night of sleep since 2012. It plans my races leg by leg, seals the prediction before the gun, and audits itself after. This is what two races in seven days taught it — and me.

01 — The sealed prediction

Publish the number before you know the answer

Three weeks before race one, the system predicted my splits from FTP tests, sleep data, a GPX recon of the course and three years of my age group's results. I published it before the start. That's the method: a forecast you can't quietly edit afterwards.

And this is what the coach saw at 6 a.m. on race morning — a taper landing exactly where it was aimed:

53 msHRV overnight · balanced
43 bpmResting HR · season low
92Sleep score · 7h27
+8Form (TSB) · sprint-optimal
SEALED
24·07·26
Tägi Sprint · 16 AugPredictedActualΔ
Swim8:259:28+63s
Bike30:5030:54+4s
Run14:5515:35+40s
Transitions4:104:17+7s
Total58:201:00:13+1:53

Outside its own range. But the bike — the split it had named three weeks earlier as the one costing me the podium, quantified at 1:05 short — came in 1:09 short. Wrong about the race. Right about the problem.

A prediction that can't be wrong in public is a demo.

02 — Seven days later

Fix two things. Only two.

Race two was seven days out. The data said dozens of things; the system prescribed exactly two: race the swim (I'd left my heart rate 7 beats below my own 2023 self) and pedal to the dismount line (I'd shut off 500 m early and gifted 8 seconds).

Both executed. And the watch carried a power script — four segments by distance, each with a target range and a cue written by the coach:

3 / 4Segments in range
241 WHeld · target was 235–245
1.13 → 1.10Variability index, race over race
3:54Final km — fastest of the day

Result: 1:06:00.8 — 5th of 95 in my age group, 22nd of 351 overall. Top 5%. And the number that actually matters:

2023 · Tägi
−4:34
Aug 16 · Tägi
−1:34
Aug 23 · Uster
−1:11

GAP TO THE PODIUM · THREE MINUTES CLOSED

03 — What the watch saw

Effort was never the problem

1.85 → 1.57 metres per stroke · pool vs lake, no wetsuit

I fixed the swim effort — heart rate up 4 beats, pushed from the first stroke — and went 16 seconds per 100 m slower. The watch explained it: stroke length collapsed 15% without buoyancy, covered up by 19 extra strokes. That's not a fitness gap. It's a technique gap, measured — and it just became a named project with a swim coach.

162 → 175 Heart rate arc across the run · ascending

The run opened 10 seconds slower than goal pace — by prescription. Every kilometre after was faster than the last, closing at 3:54 with heart rate climbing 162→175. Same speed as race one over 1.1 km more, at 3 beats lower cost. The slowest first kilometre bought the fastest finish.

04 — The ten-week block

What ten weeks of AI coaching bought

The race block ran ten weeks, W24 to W34 — Norwegian sub-threshold method, scaled to 7–9 hours a week around a family of five. Start to finish, measured:

Start · W24End · W34
Bike FTP237 W (test)241 W held 31 min in race
Swim CSS~1:50 /100m1:44 long-course
Run threshold3:56 /km fresh4:10 /km off the bike, at 30°C, negative split
Tägi vs my 20231:00:34 · 4/281:00:13 · 6/42 — same percentile, field +50%
Uster5/95 · top 5.3%
Body weight~72.8 kg~72.2 kg
Gap to the podium4:34 (2023)1:11

The clock says 21 seconds in three years. The podium gap says 3:23 in ten weeks. Pick your metric carefully — it decides what you train next. I picked the gap.

05 — The rules that survived

Two races distilled to five rules

After both races the system audits itself — prediction vs actual, leg by leg, in a document it can't edit later. These five survived contact with reality and are now standing orders:

1 · Power scripts live on the watch, by distance

Four segments, each with a wattage range and a one-line cue. Segments advance by kilometre, not by button press.

Evidence: 3 of 4 segments in range · VI 1.13 → 1.10 race over race

2 · First kilometre: 10 seconds slower than goal. Always.

Restraint is a purchase, not a loss. Racing the first km cost a mid-race collapse in race one; banking it bought a full negative split in race two.

Evidence: 4:22 opener → every km faster · final km 3:54

3 · Between close races, fix exactly two things

The data offers twenty fixes. Two get through. Both were executed on race day — because two is a plan and twenty is noise.

Evidence: swim HR +4 · pedalled to the line, both delivered

4 · Recon the course at gun hour

Swim the actual lake at the actual start time, days before. Same sun angle for sighting, same water, same no-wetsuit feel. Fear becomes a number.

Evidence: recon pace 1:47–1:49/100m → race plan built on it

5 · The prescription arrives in the morning brief

Full session table — doses, targets, an abort rule — written into the daily brief before I wake. No app-hopping, no recomputing, no ambiguity at 6 a.m.

Evidence: read every morning of race week, on a phone, with coffee
06 — Under the hood

What it's made of

The corpus is the coach

3,772 activities, 8,586 nights of sleep and HRV, 74 races since 2012 — in a Postgres database I own. The coach doesn't guess my zones; it reads them. When it says "your bike is 92 seconds short of the podium," that's a query, not a vibe.

The coach is prose

Its behaviour is a markdown file in my notes. When it got a race distance wrong, the fix was editing a sentence — on my phone. Every rule on this page is literally a paragraph in that file now. It runs every morning as part of a twelve-agent system that also handles my money, my inbox and my week.

07 — Build yours

Got a race, a body, and years of data no app has ever read together?

This isn't a product. It's a way of building — and the corpus you already have (Garmin, Strava, a drawer of results) is worth more than any plan you can buy. If you want one of these for your own season, tell me where you're stuck.

TELL ME YOUR RACE → Easiest way in: just email me at cris@grossmann.ai. I read every one myself.