Rate a week of sessions as easy and watch the next week arrive unchanged. Flag a muscle as still fried and get the same split anyway. Grind a lift that has not moved in two months and receive the same weight again, with no comment.
This is the most common complaint about algorithmic training apps, and it gets read as a bug. It is not a bug. It is what you would expect from an architecture where the part that writes your workout never reads the part that records it.
The tell is not repetition. It is knowing repetition.
Plenty of programs repeat. A fixed template repeats on purpose and says so upfront, which is honest work. The pattern worth naming is narrower: an app that shows you a fatigue readout for a muscle group, and then builds tomorrow’s session around that muscle. Or one that asks how hard every session felt, stores the answer, renders it back to you in a chart, and prescribes identically the following week.
Both of those can be true at once when they come from different places in the software. The screen showing your history is a reporting surface. Read the behaviour backwards and the thing choosing tomorrow’s exercises looks like a generator whose inputs were fixed when you answered the setup questions: goal, days per week, equipment, experience, maybe a sore-muscle toggle that nudges one pick and expires. Your log feeds the first and not the second. On that reading nothing is malfunctioning. The wire was never run.
In fairness to the category, that is not the only reading available, and it is probably not the most common one. Several of these apps do ship a per-muscle recovery model. Some autoregulate off the effort rating you hand them after a set. The machinery is in there. What the complaints describe is machinery that never reaches the lifter: it moves a number you are not shown, or it gets overruled by whatever chose the split, and nothing on the screen tells you which of those happened. Whether the wire was never run, or was run somewhere you cannot see, the week at the rack is identical.
So is the fix. A bigger exercise library does not touch it. What it takes to actually respond is a set of decisions that read your logged sets, are allowed to overrule the plan, and move enough to feel. Here is what four of those cost.
What it takes for recovery to change a session
For a logged set to change tomorrow, fatigue has to be a number the prescription reads, and it has to be able to say no.
Sterka prices every hard working set as fatigue on the muscles that did the work: full cost to a primary mover, half to a secondary, and half again more when an isolation lift has a single target and nowhere to hide. Proximity to failure scales it. A set taken to failure costs 1.4 times what the same set costs stopped two reps short; three reps short costs 0.85 times. Heavy axial work costs more again, 1.15 times at or above 85 percent of your max and 1.30 at or above 90, so a heavy triple and a curl to failure are not booked as the same withdrawal. Then it decays on a half-life that differs by muscle, because muscles do not clear at one rate: 36 hours for side delts, 54 for chest, 60 for quads, hamstrings and glutes, 72 for the lower back, which is the slowest system in the program and the one that really governs how often you can deadlift.
Recovery is what is left over: 100 minus whatever fatigue has not decayed yet. Under 50 percent a muscle counts as depleted, and a whole category is vetoed only when all of it is: chest and shoulders and triceps below the line, not one of the three. Under 30 percent a muscle stops being something the day can be built around, and on a push day, where chest is the anchor, that one reading is enough to move the session.
Scenario · a what-if, not your data
That reading is the whole argument in miniature. A generator can display 22 percent in the hypothetical above and still write bench, because the display and the decision are strangers. An engine that reads the log has to move the session: the push day rebuilds around pull, and bench comes back a day or two later. On Build Muscle the displaced sets are made up later in the week. On Get Stronger a bumped heavy session is an exposure you do not get back, which is the real cost of the veto and still the better trade than pressing on a wrecked chest.
What it takes for a stall to be detected
“It never adjusts” and “it never noticed I stopped progressing” are the same complaint. Noticing needs a definition of stalling a machine can evaluate, and the honest version is stricter than it sounds.
Sterka’s is three gates across your last three sessions on a lift. All three have to hold:
- Same load. The top set weight is unchanged, within half a kilo.
- Same reps. Every session in the window logged the same reps on that set. Any variation fails the gate.
- Effort drifted. Your average effort rating across the session has moved at least half a rep in reserve closer to failure than it was at the start of the window: same weight, same reps, measurably harder.
Three sessions is the floor, because two can be one bad night of sleep. And when the effort ratings are missing at either end of that window, the answer is no plateau rather than a guess. Inventing a signal out of absent data is how an app ends up cutting your weights for a reason you cannot name.
Strictness has a cost worth naming. A lift that goes 5, 5, 4 at the same weight fails the second gate, so this particular test cannot see it. Two slower clocks catch that lifter instead: the cycle window since the last back-off, and a block-over-block failure to reach the load your training max claims you can move.
When all three gates do pass, the prescription is a volume cut: working sets roughly halved, never below two per exercise, with the weight held where it is. You keep your hands on the load and drop the fatigue that was making it heavy. The scheduled back-off at the end of a four-week wave is the one that also takes the weight down.
What it takes to handle a return, and a miss
Two situations break most adaptive claims. The first is coming back.
The ramp arms off your own cadence rather than a fixed calendar mark: your usual gap between sessions, plus a buffer of a few days. Miss one Thursday when you train three times a week and nothing happens, which is the point. Go quiet for a fortnight and a ceiling goes on the load: nothing above 85 percent of your estimated max on the first session back, 92 on the second, then it lifts. Past three weeks the ramp runs longer and starts lower, at 70, 78, then 84 across three sessions. Those rungs sit inside the Build Muscle working range, so a hypertrophy lifter back from a month away is capped on ordinary working sets, not only on heavy ones. Nothing restarts from zero, and nothing hands you last month’s numbers on the assumption that the time off was free.
The second is being wrong on purpose. On Get Stronger your block is built off a training max, and every second block peaks on a heavy rep-out single off that number. Miss it and the next wave’s training max resets to 90 percent of what it was, immediately: a missed rep at a known weight is not ambiguous evidence. Hit it without beating it and the number holds. Beat it by two clean reps and it climbs, capped by what the single actually demonstrated. That 90 percent is the classical reset, and your training max starts at 90 percent of your estimated max as well, for its own separate reason.
Both cases run the same rule: the plan’s own numbers answer to what you did.
The part that makes it checkable
None of the above is worth much if you have to take it on faith, which is the quieter half of the complaint. People who leave an algorithmic app rarely say they wanted an explanation. They say the weights made no sense, or that it felt random, or that they were doing percentage math at the rack to check their own software.
So every session Sterka writes records the decision and the inputs behind it, and puts the reason in front of you before you train rather than on request. What you read on the card is a summary with a length budget, so it states the cause it has room for; the record underneath it is kept in full. When the top set moves, there is a stated reason there to disagree with. That is a lower bar than it sounds, and most of the category does not clear it.
An app that never adjusts is not always failing to read you. Often enough it reads you and the reading never arrives, which comes to the same thing on a Thursday. The gap is not intelligence. It is which decisions are allowed to see your log, and what they are allowed to overrule.