← All posts

The best training program is the one you're still doing in March

Program design gets all the attention and adherence decides the outcome. What the consistency research says, and how to build a streak that survives a bad week.

Ask a room of lifters what matters most and you will get periodisation, volume landmarks, exercise selection and bar speed. Ask them what actually went wrong last year and the answer is almost always the same: they stopped.

Adherence is the variable with the largest effect size and the least attention.

Consistency beats optimisation, and it is not close

Consider two people over a year.

The first runs a perfectly periodised program, trains four days a week for seven weeks, gets busy, and stops. Total: 28 sessions.

The second runs something mediocre off the internet, trains three days a week, misses roughly one week in five to travel, illness and life, and never stops. Total: about 125 sessions.

The second person is not 4x better trained — training is not linear like that — but they are not close to each other either, and no amount of program quality closes a gap that size. The optimal program you abandon in February loses to the average program you are still running in November.

This is why “what split should I run” is usually the wrong first question. The right one is “what will I still be doing when I am tired, busy and unmotivated?”

Why streaks work, and where they break

Streak mechanics — the Duolingo model — work because they change what you are protecting. You stop deciding “do I feel like training today” and start protecting an asset you have already built. Behavioural research on this is fairly consistent: an unbroken run creates a real reluctance to break it, and that reluctance does a lot of the work motivation was supposed to do.

They also have a well-known failure mode, and it is severe.

The all-or-nothing collapse. A streak that resets to zero on one missed day punishes an inevitable event with the destruction of everything you have built. Miss one day at 60 and you are at zero, and the rational response is often to quit entirely — the asset is gone, so there is nothing left to protect. This is the same abstinence-violation effect that makes one missed diet meal turn into a missed week.

Any streak system that does not solve this actively harms the people it catches out.

What a forgiving streak looks like

The fix is to make the streak survive a normal life without making it meaningless.

Bank forgiveness by being consistent. Earn a shield or freeze for a sustained run, cap how many you can hold, and spend one automatically when a day is missed. You have to be consistent to earn the right to miss a day, which keeps the incentive pointing the right way.

Count a floor, not a perfect day. Requiring a full workout to keep a streak makes rest days into failures. Requiring some small amount of engagement — logging a meal, a weigh-in, anything over a low points threshold — means a deload week or a rest day still counts as showing up, because it is showing up.

Recompute, never store. A streak stored as a number is a streak that can be corrupted by a timezone bug or a sync conflict, and users lose runs they actually earned. Deriving it from the underlying event log every time you read it means it is always correct and always explainable.

Do not weaponise the notification. “Your 84-day streak is about to end” at 11pm is engagement bait, and it teaches people to resent the app. A streak should be a tool for the user, not a lever on them.

Make missing a day boring

The practical goal is to lower the emotional cost of a miss to nearly zero, because the miss is coming.

  • Have a minimum viable session — two exercises, twenty minutes — that still counts. Most missed sessions are skipped because there is no time for the full one.
  • Track adherence as a percentage of days you were actually available, so an illness week does not permanently dent a number you care about.
  • Look at the trend, not the day. A single bad day is noise in a metric measured over months.

How Momentum handles this

Momentum’s streak is built around exactly these constraints. Every meal, weigh-in and workout earns XP; 20 XP keeps the day alive, so a rest day where you logged your food still counts. Seven consecutive days banks a Momentum Shield, up to two, and a shield is spent automatically to cover a missed day before the streak ever breaks. Adherence is non-punitive — days you were genuinely unavailable drop out of the denominator instead of counting against you.

And the whole thing is recomputed from the XP event log on every read rather than stored, so it cannot silently drift out of sync with what you actually did.