Your Workout Log Has a Survivorship Bias Problem

Article ยท 4 min read

Your workout log only records the sessions that survived your week.

Every tracker logs completed sessions. The missed ones carry the signal, and without them a flat block can't tell you if it's the program or the calendar.

Six flat weeks on bench, and a log that looks perfect

Scroll back through six weeks of bench work on a stalled block and the log looks disciplined. Every entry has a date, a top set, a rep count, an RPE. The numbers sit in a neat column: same weight, same reps, same effort, week after week. The obvious read is that the program stopped working.

But the log is only showing you the Thursdays you showed up.

It can't show the Thursday a work call ran long, or the one where a kid got sick, or the week you swapped bench for a walk because your shoulder felt off. Those sessions didn't produce a row. So as far as the data goes, they never existed, and that's the data you're about to use to decide whether to change programs.

The highlight reel problem: your log only records survivors

Survivorship bias is the error of studying only the cases that made it through a filter, then drawing conclusions about everything. The textbook example comes from Abraham Wald's work with the Statistical Research Group at Columbia during World War II, analyzing damage on aircraft that came back from missions. The planes that didn't return held the information that mattered most, and they were exactly the ones nobody could inspect.

A workout log has the same shape. Every tracker records completed sessions. In most of them, the planned session that never happened leaves no trace, and neither does the reason it didn't happen. Three years of entries end up reading cleaner and steadier than the three years you actually trained.

Call it the highlight reel problem. The log is a record of the sessions that survived your week, and it gets read as if it were a record of your training.

A log that only reads its completed sessions is reading a highlight reel.

Why "just be more consistent" misses the point

The dominant framing treats missed sessions as a motivation problem. Fitness apps are built around it: badges for attendance, reminders when you've been away, a nudge notification on day three. Consistency becomes a character trait. The missed session becomes something to feel bad about and then forget.

That framing throws away the useful part. A miss isn't a moral event. It's a data point with a date, a weekday, a position in a training block, and usually a cause you could name in five words if anyone asked.

And misses aren't random. They cluster on the weekday your job runs late, in the third week of a block when fatigue is stacking, around travel, around the lift you quietly dislike. A lifter who drops Thursday bench four times in a block has a scheduling problem that looks, from inside the log, exactly like a programming problem.

What a workout log actually captures (and what it can't)

Export your history from almost any tracker and look at the shape of the file. It's one row per completed set: a date, an exercise, a weight, reps, maybe RPE and a notes field. That's a faithful record of work done. There's no column for work planned, so there's no row where a missed session could even live.

A complete training record holds both sides. The plan says what was supposed to happen on which day. The log says what did. The gap between them, planned versus completed, is a variable you could measure per week, per block, per lift and per weekday.

Almost nobody measures it. The tools don't store the denominator.

What the record containsComplete training recordTypical workout log
Completed sessions, sets, loads, repsYesYes
Planned sessions by dateYesRarely stored
Missed sessionsYes, datedInvisible: no row exists
Reason for a missOptional, one lineNot captured
Sessions cut shortFlagged as partialLooks like a normal session
Attendance per block or weekdayComputableNot computable without a plan
The structural difference between a record of training and a record of completed training.

How missed sessions corrupt plateau detection: a worked example

Take a lifter running a four-day 5/3/1 layout, where each main lift gets its own day once a week. Bench lands on Thursday. Over a six-week stretch the bench top set doesn't move, and the log shows fourteen sessions.

Fourteen looks respectable until you know the plan called for twenty-four. And the misses weren't spread evenly. Thursday went three times out of six, because Thursday is the night work runs late. So bench, the lift that stalled, got three exposures in six weeks, while squat and deadlift kept moving on days that rarely got cancelled.

Read from the log alone, the story is "bench has plateaued, change the bench programming." Read against the plan, it's "bench got half its scheduled work." Those lead to opposite decisions. One swaps the program. The other moves bench to Monday and reruns the same block.

Same data, two diagnoses. The log can't tell you which one is true, because the evidence for the second was never written down.

What changes if the missed session counts as data

If the thesis holds, plateau detection has an ambiguity baked in. A flat six-week stretch is either low stimulus or low attendance, and any read that only sees completed sessions will flag both the same way. That includes the read in your own head when you scroll back through your history.

The fix is small. Write the plan down, with dates. When a session doesn't happen, give it a row anyway: the date, the word "missed", and a reason if there is one. Work, travel, sleep, sick, sore, didn't want to. The last one counts too. Over a year those rows become a map of where your training actually breaks.

Then read stalls against attendance before reading them against programming. A lift that stalled at full attendance is a programming question. A lift that stalled at half attendance is a calendar question, and no new rep scheme will answer it.

Don't backfill the gap

Logging a skipped session as done, or copying last week's numbers forward to keep the record tidy, makes the highlight reel worse. A dated miss is more useful to the lifter reading this log in two years than a clean-looking fake.

Where Platepusher fits, and what we're watching

Platepusher's plateau flag reads the dated record it's given and marks the week a top set stops moving. It's math, so it shares the limit every read of a log has: it sees the sessions that happened. What it can do is keep that dated record whole. Import years of history from another tracker and every lift, every set and every date comes across as native data, so the gaps in your training stay visible in the dates instead of vanishing into a fresh start.

That's the honest scope. A clean, dated, multi-year record makes the missing weeks findable. Writing down why they went missing is still the lifter's job.

The question we're tracking next is whether block-level attendance explains more stalls than programming does. We think that for lifters past their first few years it often will, and that the gap between planned and completed is the most under-measured variable in serious training.

Bring your whole training history into Platepusher and read your stalls against the dates.

Platepusher is built for lifters with years of history. It imports every lift, set and date from your current tracker as native data, keeps that record dated across devices, and flags the week a top set stops moving. Math, not coaching. What you do with the signal stays your call.