Same bar, same reps, lower RPE: that's adaptation, not a plateau.
Over a multi-year log, load and RPE drift apart. Same bar, same reps, less effort reads as a plateau on a load chart, but it's usually adaptation.
225 for 8, again
The top set on bench is 225 for 8. Same as last spring. Same as the spring before that. On a load chart it's a flat line, and it's been flat long enough that your tracker, or your own gut, has started using the word plateau.
But the bar moved fast today. You racked it with two, maybe three reps left in the tank.
Two years ago that same set ended in a grind on rep eight, elbows flaring, nothing left. The weight didn't change. You did. And nothing in a load-only chart knows it.
The thesis: effort compression
Call it effort compression. Over years of training, the effort a given load costs you shrinks before the load itself moves, and sometimes long before.
For an advanced lifter this is the normal shape of progress, not an edge case. Load is often held steady on purpose: a hypertrophy block pinned at 3x8, a percentage-based program that only bumps the training max on a schedule, plate jumps too coarse to add every week. So the weight column is partly a record of what the program prescribed. The effort column is the one reporting what your body did with it.
Read either column alone and you'll misread the log. Read them together over a long enough window and the story is usually obvious.
Why do weights feel easier but I'm not getting stronger?
Most of the time, you are getting stronger. The tool is looking at the wrong column.
The standard way trackers estimate strength is a 1RM formula like Epley or Brzycki, and those take exactly two inputs: weight and reps. Feed them 225 for 8 in 2024 and 225 for 8 in 2026 and they return the same number both times. Effort isn't an input, so a set that got dramatically easier registers as zero change.
Plateau logic built on that estimate inherits the blind spot. It sees a flat top set for several weeks and fires. And the lifter who sees that flag tends to do one of the expensive things: deload when they didn't need to, hop programs, or grind heavier singles to prove something.
The fix isn't to stop tracking load. It's to stop pretending load is the whole record.
What the RPE research actually supports
The RPE scale most lifters use is the reps-in-reserve version, laid out by Zourdos and colleagues (2016, Journal of Strength and Conditioning Research) and Helms and colleagues (2016, Strength and Conditioning Journal). RPE 9 means one rep left, RPE 8 means two, and so on. That anchoring is what makes RPE comparable across years at all.
The same research also carries the caveat you need. Zourdos et al. reported that experienced lifters rated sets more accurately than novices, and a later review by Halperin and colleagues (2022, Sports Medicine) found reps-to-failure predictions got more accurate as sets approached failure. RIR predictions were less accurate the farther an individual was from task failure, per research teams surveyed ([source](https://journals.sagepub.com/doi/10.1177/00315125241241785))
So a multi-year RPE column contains two signals braided together: real adaptation, and you getting better at using the scale. Early-log numbers are the noisiest ones.
Falling RPE can also mean better calibration
In the first year or two of a log, a drop in RPE at a fixed load can partly reflect learning the scale, not getting stronger. The check is a rep-out: take the fixed load to a true or near-true AMRAP periodically. If the reps performed match what your RPE predicted, the compression is real.
What 24 months of effort compression looks like on paper
Take a worked example. A lifter runs the same 225x8 top set at three checkpoints across two years. The only thing that changes in the log is the RPE: 9 at month zero, 8 at month twelve, 7 at month twenty-four.
A load-only estimate returns about 285 all three times. Flat line, plateau flag.
Now add the reps in reserve back in. An RPE 9 set of 8 means roughly 9 reps were possible. RPE 7 means roughly 11. Run those through the same Epley formula and the estimate climbs from about 293 to about 308. That's around 15 pounds of estimated 1RM that the load chart never showed.
Compare the version where RPE also stays at 9 for two years. Both columns are flat. That's a real stall, and the fix is a programming conversation, not a patience one.
Checkpoint
Top set logged
Load-only est. 1RM
RPE-adjusted est. 1RM
Month 0
225 x 8 @ RPE 9
285
293
Month 12
225 x 8 @ RPE 8
285
300
Month 24
225 x 8 @ RPE 7
285
308
Illustrative worked example, not real lifter data. Epley: 1RM = weight x (1 + reps/30). RPE-adjusted rows use reps performed plus reps in reserve (RPE 9 = 1, RPE 8 = 2, RPE 7 = 3). Values rounded.
How to tell a plateau from adaptation
Direction is everything. The same flat load means opposite things depending on which way effort is moving, and that's only visible across months of paired data, not one session.
The practical consequence of effort compression is that the flat-load, falling-RPE quadrant is usually a green light that's being read as a red one. It's the lifter with room to add load or reps, told by a chart that they're stuck. Meanwhile flat load with rising RPE, the quadrant that actually deserves attention, looks identical on a load-only chart to the healthy one.
A plateau signal that reads one column fires in the wrong places and stays quiet in the right ones. Paired, the two columns sort themselves.
Load over the window
RPE at that load
Usual reading
Flat
Falling
Effort compression: capacity has outrun the load
Flat
Flat
Actual stall
Flat
Rising
Fatigue, recovery debt, or regression
Rising
Flat
Classic progression
Rising
Rising
Progress paid for in effort, with a shelf life
An interpretive framework for multi-month windows, not a diagnostic rule. Confirm the flat-load, falling-RPE row with a periodic rep-out.
Keeping both columns for years
None of this works if your history lives in three apps and a spreadsheet, or if RPE only shows up in the log when you remembered to type it. Effort compression is a years-long pattern, so the record has to be years long too.
Platepusher records RPE next to load on every set No, the per-set RPE (and %TM) input UI was deliberately removed from Platepusher in the v1.0.6 update; the app still stores RPE/%TM values behind the scenes for round-tripping existing data, but there is no live field for users to set or edit RPE in the current build. and keeps the whole history in one place, including the years you logged somewhere else: drop a CSV from Strong or Hevy and every lift, every set, every date imports as native data History import from Strong or Hevy CSV exports does not carry RPE through, the importer reads date, exercise, weight, reps, duration, notes, and (for Hevy) warmup-set flags, but has no RPE column mapping at all, since neither app's export format includes an RPE field in the first place.. The plateau flag marks the week a top set stops moving. The RPE sitting next to it is how you read which quadrant you're in.
That's the idea behind treating your log as an experiment you've already run (see /articles/your-history-is-the-experiment). The data to answer the question is often already there.
What we're tracking next
RPE is still a self-report, and calibration drift is the honest weak spot in everything above. So the open question is whether an objective second signal, bar velocity or heart-rate response across working sets, can check the effort column the way a rep-out does, without the rep-out. If it can, effort compression stops being something you infer and becomes something the record shows outright.
Put your full lifting history in one log, load and effort side by side.
Platepusher is a gym log built for lifters with years of history: load and RPE on every set, full history imported from Strong or Hevy CSVs, a plateau flag that marks the week a top set stops moving, and CSV export free at every tier. It records the work. You read it.