Your Training Year Has a Pattern. Your Log Has Already Run the Experiment Twice.

Article ยท 5 min read

Your stalls keep landing on the same weeks every year.

Multi-year logs show stalls, volume tolerance and strength windows coming back at the same calendar points. A better mesocycle won't fix a season.

Third week of March, and the top set won't move

The squat top set that moved fine in February has sat at RPE 9.5 for two Thursdays running. Warm-ups feel heavy. The block is a textbook accumulation phase with sets climbing a little each week, and somewhere around week three the whole thing stopped cooperating.

So the lifter does what most lifters do. They open a forum thread, read about volume landmarks and start sketching a new mesocycle with less volume and more intensity. Clearly the program is the problem.

Then they scroll back past last month, all the way to last March. Same stall, different program. And the March before that, on a third program, there's a deload that got pulled early because the bar felt like wet cement.

Three programs. One month.

That's the tell.

The training season: your year has a shape your program doesn't set

Call it the training season. Give a log enough years and it shows volume tolerance, stall frequency and the windows where strength actually climbs returning at roughly the same calendar points. The causes usually sit outside the gym: a quarter-end crunch at work, the school year, the holidays, darker mornings, travel that always lands in the same month.

Programs run in blocks of a few weeks to a few months, but life runs on a twelve-month calendar. When the two collide, the program takes the blame because it's the variable you picked.

The season is purely descriptive. It says a given window has been hard in your log more than once, under different programming. What you do about that is your call. But a single block can't show it to you, because a single block only ever sees itself.

Programs run in blocks. Life runs on a twelve-month calendar.

Why better periodization doesn't fix an annual stall

The standard answer to a stall is a programming answer. Adjust volume, change the intensity wave, put in a deload, switch from linear to undulating. All of that is reasonable inside a block, and none of it can see the calendar.

Most periodization models, from classic linear blocks to RP-style volume ramps toward MRV, treat your recovery capacity as a fairly stable trait that training nudges upward over time. Inside one mesocycle that's a decent working assumption. Across a year it breaks down, because sleep, stress and schedule shift on a calendar the program has no input for.

A lifter who stalls in the same quarter three years running and rewrites the program each time has run one experiment three times and changed the wrong variable every time. The constant across all three was the month.

What the research says about calendar-shaped training

Population data has shown for years that training behavior follows the calendar. Dai, Milkman and Riis's 2014 paper on the "fresh start effect" in Management Science found gym visits rise after temporal landmarks like the start of a new week, month or year. If attendance has a calendar shape, it would be strange if output and recovery didn't.

Recovery inputs move with the calendar too, and sleep is the obvious one. Work schedules, school terms, daylight and travel all push on it at predictable times of year. Sleep is one of the main things your body leans on to absorb training, so when it slips, the sets you can repeat are likely to be the first place you notice. Repeated sets are exactly what an accumulation block is made of.

Population findings describe groups, though. No journal will ever publish your Marches. The only dataset that can show whether your output drops in the same quarter every year is the one you've been writing since you started logging.

Same block, two quarters, two different ceilings

Picture a lifter with four years in their log who runs the same hypertrophy accumulation block twice in one year. One run starts in late April, the other in early November. Same exercises, same starting sets, same plan to add a set per muscle group each week until performance drops.

In the spring run, top-set RPE holds through the ramp and the block finishes on schedule. Whatever volume it ended on, the lifter would call that their MRV. In the November run, RPE creeps up by the middle of the block, reps fall off the back-off sets and the block ends early. Same program, but the ceiling moved.

Viewed alone, November looks like a failed block, and the reflex is to redesign it. Laid against the prior three Novembers, it looks like November. Late-year blocks in this log start fine and fade by week three, while spring blocks run to completion.

That swaps the question. "What's wrong with this program?" turns into "What volume has this window actually supported before?" The log already holds the answer, because it ran the experiment in prior years.

One rough March is just a rough March

A season needs at least two prior years showing the same dip in the same calendar window, ideally under different programs, before it means anything. Rule out the obvious confounds first: an injury, a move, a program that really did overreach. The season is whatever pattern is left after those are gone.

What changes once you can see your season

First, a stall in a predictable window stops counting as evidence against the program. If the same weeks have cratered under three different setups, a fourth setup probably won't be the fix. Rewriting it burns a block you could have spent on something the log says holds up in that window.

Second, the good windows show up too. Plenty of lifters have a stretch where blocks run long, tolerance is high and top sets move. Knowing when that tends to arrive matters for whatever you care about most, whether that's an accumulation push, a meet or a test day.

Two lifters on the same program will have different seasons. What you're reading is your own record, and the conclusions belong to it.

The catch is that most logging tools are built so you can't see it. They center today's session and this week's volume, and history becomes a long scroll. A year-over-year question needs a year-over-year view, and scrolling backward through 400 sessions doesn't give you one.

QuestionSession viewWeekly viewSingle blockSame window, year over year
Did today's top set move?YesYesYesYes
Is volume climbing this block?NoPartlyYesYes
Did this block stall early?NoNoYesYes
Has this calendar window stalled before?NoNoNoYes
Was it the program or the month?NoNoNoYes
What each way of looking at a log can and can't answer. Only a year-over-year comparison separates a programming stall from a seasonal one.

Where Platepusher fits: the whole record, dated

A season only shows up when all the years sit in one record. Most lifters with a long history don't have that. They have a spreadsheet era, a notebook era and a stretch in another app, so the months they'd want to compare are scattered across formats.

Platepusher is built around keeping that record whole. Drop a CSV from Strong or Hevy and every lift, every set and every date imports as native data, right next to what you log today. Plateau detection flags the week your top set stops moving, and every flag carries its date. When those flags bunch around the same weeks two or three years running, the record shows it plainly.

What you do with your season is up to you. A multi-year log can answer something a single block never will: what this time of year has done to you before. Your log has already run that experiment twice. The results are sitting in last year's March.

Bring every year of your lifting into one log and see which weeks keep coming back.

Platepusher keeps every set you've logged in one dated record, including years brought over from a Strong or Hevy CSV. Plateau detection flags the week a top set stops moving, so when stalls land on the same calendar weeks year after year, the record shows it. Full history and CSV in and out come with the free tier.