Brick workouts feel hardcore. Long ride immediately followed by a run. The legs go from spinning to pounding without a break. You learn what your body does in the first ten minutes of an Ironman marathon. They're a triathlon-specific session that no other sport has, which is part of why early-stage triathletes love them.

Brick workouts are also, statistically, one of the fastest ways for an age-grouper to tear a calf or strain an Achilles in the first month of an Ironman build.

The early version of Rift's plan generator did what most generic plans do: it scheduled bricks early and often. "Build the transition fitness from day one" is the reasoning. It sounds smart. It is not smart for the population the app is built for.

What changed my mind

I'd been working through Coach Rob Wilby's published methodology for the locked-in principles file that informs Rift's plan generation. Rob has put more than a thousand first-time Ironman finishers across the line through Team Oxygen Addict. He doesn't program early bricks. He doesn't program any bricks for most of the build.

The reasoning is sharp:

"If we have to have them both at the weekend, we're going to have the long run first and then the long ride on the Sunday. We really want to protect you from picking up any kind of injuries or niggles."

The principle compresses to: tired-leg cycling trains you. Tired-leg running injures you. Specifically the calf and Achilles. Specifically in the first six weeks of a build when the body hasn't adapted to the volume yet. Specifically for athletes over thirty, which is most of the addressable market.

Pros can program bricks early because pros have recovered for ten years from injuries that age-groupers get when they imitate pros. Pros also have two days to recover from a hard brick. The age-grouper in our target market has a 9 a.m. meeting on Monday and a wedding on Saturday.

Once I read enough of this from enough sources — Wilby, Joe Friel, Scientific Triathlon, the IRONMAN coaching guides — the early-brick design started looking like a hand grenade I'd accidentally added to the plan generator.

The rule Rift enforces

Rift's plan generator now has a hard rule: no brick workouts before week 6 of an Ironman build. No brick workouts before week 4 of a 70.3 build. Sprint and Olympic plans get bricks earlier (the volumes are low enough that the injury risk isn't there).

Even once bricks become eligible, they're rate-limited. Most weeks during the build still don't have one. The standard Wilby pattern is to use bricks sparingly — as transition-specific rehearsal sessions, not as weekly fitness builders. Two race-simulation weekends — one five weeks out, one two weeks out — are when the long-ride-into-run gets its real workout.

Until then, Rift schedules the long run mid-week on fresh legs. Long ride on Sunday. Three full days of separation between them. The way coaches who know what they're doing schedule it.

The code that enforces it

The actual rule lives inside the session-emission pass of the plan generator. Simplified:

// Inside session emission for IM/70.3 build
function canEmitBrick(week, planType, athleteProfile) {
  const MIN_WEEK_FOR_BRICK = {
    "ironman": 6,
    "70.3":    4,
    "olympic": 1,
    "sprint":  1,
  };
  const minWeek = MIN_WEEK_FOR_BRICK[planType] ?? 6;
  if (week.weekIndex < minWeek) return false;

  // Even past the minimum, only allow if no brick this month
  // and athlete isn't in a recovery week
  if (week.isRecoveryWeek) return false;
  if (week.bricksThisMonth >= 1) return false;

  // Age-group injury history is a hard veto
  if (athleteProfile.injuryHistory.includes("calf")) return false;
  if (athleteProfile.injuryHistory.includes("achilles")) return false;

  return true;
}

It's three conditions and a couple of guards. Most of the logic isn't clever. It's restraint encoded in a function.

What you give up by not shipping early bricks

Honest answer: a little bit of transition-specific fitness in the first six weeks, that you'd build anyway in weeks 7 through 24 of a proper build.

What you don't give up: anything that affects race-day performance. The transition fitness that matters comes from the two race-sim weekends late in the build. The early bricks were vanity work that felt productive and quietly raised the injury risk.

Some athletes will be disappointed when they look at week 2 of their plan and don't see a brick on the calendar. That's a feature. We're saying — quietly, through the absence of a session — that brick training has a time and that time is later.

The general principle this comes from

Sometimes the right feature is the one you don't ship.

Most "AI training apps" want to look impressive on the calendar. More sessions, more variety, more intensity, more apparent personalization. Rift's design instinct goes the other way. The fewer sessions on the calendar, the easier it is for the athlete to actually do the ones that matter. Empty space in a week is not a bug. It's the absorption room where the fitness actually compounds.

Brick workouts in week 1 are a Pareto-optimal example of this principle. They look productive. They feel productive. They're not productive, and they're actively risky for the population this app is built for. So they don't ship in week 1.

That's the kind of decision you only make if you've talked to the coaches who have done the work. It's also the kind of decision a generic plan generator built by people who haven't won't ever make.

— Eli