Can an Algorithm Really Tell You How Much Weight to Lift?
There is an understandable appeal to removing the guesswork from training. If an app knows what you lifted last week, how many reps you completed, and what the program asks you to do next, it seems reasonable that it should be able to tell you exactly what weight to put on the bar. That is especially attractive when progressive overload is commonly explained as some version of doing more over time.
One common way to turn that idea into a program is to increase the training weight by a fixed percentage from week to week. The 2.5% figure is not a law of human performance. It is simply a practical example of a small, manageable progression: if you lifted 100 lbs this week, the program might prescribe 102.5 lbs next week, then approximately 105 lbs after that, continuing upward as long as the increases remain achievable. The number is small enough to seem realistic, while still creating a clear progression rule.
There is nothing inherently wrong with using a progression rule like that. For some people, particularly newer lifters, it may work quite well for a while. The problem begins when a simple progression rule is presented as though it is an individualized prediction of what someone should be capable of lifting. Increasing everyone's training weight by 2.5% because another week has passed isn't really an individualized model. It is a predetermined progression applied to individuals.
The difficulty is that strength doesn't progress at a uniform rate, either between people or within the same person over time. Someone who has been lifting for three months can improve incredibly quickly, while someone who has trained seriously for ten years may spend months trying to add a few pounds to the same exercise. Even that distinction is incomplete because training age doesn't tell us how experienced someone is with a particular movement. An experienced lifter who has never performed a front squat may improve rapidly for several weeks simply because they are learning how to perform the exercise better.
That improvement is still real in the sense that they can now lift more weight, but it doesn't necessarily mean that their muscles became 15% stronger over that period. Early improvements can come from better intermuscular and intramuscular coordination, improved technique, greater comfort under load, better understanding of effort, and a growing willingness to actually push the set. A beginner may add 10 or 20% to an exercise over a relatively short period without experiencing anything close to a corresponding increase in muscle mass.
This immediately creates a problem for any algorithm that assumes everyone's performance should move according to the same percentage.
It becomes even more complicated when we consider how differently people approach training. Two people can have the same training age, perform the same exercise, and possess roughly similar strength, yet require very different loading decisions. One person may consistently underestimate what they are capable of and stop sets with 4 or 5 reps left in the tank. Another may routinely push every set to the edge of failure regardless of what was prescribed. Someone else may be technically excellent and unusually consistent from session to session, while another person's execution changes enough that the same number on the bar doesn't always represent the same exercise.
A coach learns these things about an athlete over time. You learn that someone's reported 2 reps in reserve is usually closer to 4. You learn that another athlete will attempt almost anything you put in front of them, so the coaching problem is occasionally holding them back rather than convincing them to work harder. You learn who responds well to larger jumps in weight, who needs smaller increases, whose performance varies considerably from day to day, and who is remarkably predictable.
None of this means that algorithms are useless. It means that predicting training load is a much more complicated problem than multiplying last week's weight by 1.025.
What Are We Actually Trying to Predict?
The first thing to clarify is the algorithm's prediction target.
A useful question is:
Given what this person has demonstrated recently on this exercise, what load gives them the best chance of completing today's prescribed reps at approximately the intended level of effort?
A person's 1RM can still provide useful context, but the practical training decision concerns the load most likely to produce the intended reps and effort in today's session.
If the workout calls for three sets of 8 reps with approximately 2 RIR, the algorithm is trying to predict the weight most likely to create that outcome.
That is a different problem from simply estimating maximal strength.
A person's recent training already provides useful information. If they performed 185 lbs for 8 reps with approximately 2 reps remaining, that set tells us something about their current capacity. If they later perform 190 for the same reps and effort, or perform more reps with 185, we have evidence that their usable strength on that exercise has improved.
This gives us a better foundation than predetermined weekly increases because the progression now follows demonstrated performance.
A simple estimate could begin with:
Estimated reps to failure = completed reps + reps in reserve
If someone performs 8 reps with 2 left, we can treat that set approximately like a ten-rep maximum for estimation purposes.
An established rep-max equation can then turn that performance into an estimated current strength value. The exact equation will never be perfect, but that is acceptable because the purpose is not to discover someone's true physiological maximum to the pound. We are trying to create a useful estimate that can be updated continually as more information becomes available.
The important change is that every training session becomes another observation.
The Athlete's History Should Become More Important Over Time
Initially, an algorithm knows almost nothing about someone. It has to rely on general assumptions about relationships between reps, load, effort, and strength. That is unavoidable.
But the longer someone uses the system, the less those generic assumptions should matter.
Imagine a general equation predicts that someone should be able to perform 8 reps with 2 RIR at roughly 80% of their estimated max. After several months, however, the athlete's training history consistently shows that they perform that prescription better around 75%.
At that point, continuing to insist that they should use 80% because a generalized equation says so would defeat the purpose of having individual data.
The model should gradually learn the athlete's own relationship between load, reps, and effort for each exercise.
This distinction also needs to exist between exercises. Someone's bench press, back squat, split squat, and dumbbell row do not necessarily follow the same rep-to-load relationship. The more data an athlete accumulates on an exercise, the more that exercise should develop its own prediction model.
Training history can therefore become increasingly specific:
This person, on this exercise, in this rep range, at approximately this effort, has historically performed best around this percentage of their estimated capacity.
That is much closer to meaningful individualization.
Training Age Plays a Role
Training age should probably influence the model. Not by assigning everyone with the same experience the same progression rate but in determining how stable we expect someone's performance to be.
A new lifter can change dramatically from week to week because they are learning how to lift. Their technique and coordination improves, their perception of effort changes, and they become more comfortable producing force. Their predicted load may therefore need to move rapidly.
An experienced athlete is usually different. If someone with ten years of serious training suddenly appears to have increased their strength by 15% in a week, that observation deserves more skepticism. It could be real, but it could also reflect an unusually good session, a different technique, inaccurate RIR reporting, changes in equipment, simple measurement noise, or anabolics.
So rather than using training age to determine the predicted weight itself, I would use it initially to influence the amount of expected variation around the prediction.
An athlete with less than a year of experience might reasonably have a much wider prediction range than an advanced athlete whose performance has been stable for years.
For example, if the model predicts a working weight of 200 lbs, the novice prediction might initially be something like:
200 lbs, with substantial expected variation
while the experienced athlete might receive:
200 lbs, with a much narrower expected range.
Those ranges should eventually stop being determined primarily by training age. Once enough individual data exist, the athlete's actual historical variability should take over.
Someone with eight years of training may still have highly variable performance. Someone with two years may be incredibly consistent. Their own history is better evidence than the category we initially placed them in.
Effort Creates Another Layer of Uncertainty
The model also has to account for the fact that reps in reserve are subjective.
If a workout calls for 8 reps with 2 remaining, the system may assume that someone reporting 2 RIR could have completed approximately 10 reps. But that assumption only works if their perception of effort is reasonably accurate.
Some people become quite good at estimating proximity to failure. Others are consistently wrong.
This is another area where a coach develops context that is difficult to capture from a single number. Over time, however, an algorithm could begin learning from the discrepancy between predicted and demonstrated capacity.
If someone routinely reports 2 RIR but occasionally performs a calibrated set close to failure and demonstrates that they actually had 5 reps available, the model now has evidence that this person's RIR reporting is systematically conservative.
It could begin adjusting future predictions accordingly.
Again, the system becomes more useful when it learns from behavior rather than assuming that every person's "2 RIR" means the same thing.
Then Life Happens
Even after accounting for training age, exercise history, effort, and previous performance, we still have the problem that human performance fluctuates.
Sleep, nutrition, carbohydrate availability, stress, soreness, recent training, illness, travel, and motivation can all influence performance, but none of these variables behaves like a simple switch.
Sleeping poorly doesn't mean that you will necessarily perform poorly the following day. Someone can sleep 4 hours and still hit a PR. Another athlete can sleep 9 hours, eat perfectly, report low stress, and have a terrible session because his mind is somewhere else.
That makes lifestyle information useful, but dangerous if it's interpreted too literally.
An algorithm that says:
"You slept poorly, therefore reduce today's load by 7%."
may be just as misleading as one that completely ignores sleep.
A better interpretation is that lifestyle variables change the uncertainty of today's prediction.
If someone's recent training suggests that 200 lbs is appropriate, poor sleep and unusually high stress might make us less confident that 200 will behave normally today. They don't necessarily tell us whether the correct weight is 190, 200, or 205.
The prediction could therefore remain centered around 200 while the expected range becomes wider.
This is probably one of the most important distinctions in the entire model.
Lifestyle data should generally influence confidence in the prediction before the athlete trains, while actual performance during the session should quickly become the stronger source of information.
If the athlete slept badly but their warm-ups are fast, their technique looks good, and their first working set is considerably easier than expected, the system should respond to what is happening in front of it.
A coach naturally does this.
They may walk into the session expecting the athlete to be flat because they know the athlete was up all night. But if the athlete starts moving extremely well, the coach changes the plan.
The sleep data provided context rather than becoming a command.
The First Working Set May Be the Best Readiness Test
This leads to what may ultimately be the most useful feature of the entire model.
Instead of expecting an algorithm to perfectly predict someone's capacity before they touch a weight, we can use the algorithm to choose the best starting load and then use the athlete's actual performance to update the session.
Suppose the model recommends:
200 lbs for 8 reps at 2 RIR.
The athlete performs the first set and reports:
200 × 8 @ 4 RIR.
We now have better information than we had 10 minutes earlier. Whatever the sleep score, stress score, calorie intake, or training-age model predicted, today's actual performance suggests that the initial recommendation was conservative.
If instead the athlete performs:
200 × 7 @ 0 RIR,
we also learned something. Today's capacity is probably lower than expected.
At that point, the actual set should outweigh most of the softer readiness information.
This creates a hierarchy that resembles how good coaching already works:
What is the athlete demonstrating right now?
Then:
What have they demonstrated recently?
Then:
What does their longer-term history tell us?
Then:
What contextual factors might affect today's performance?
And finally:
What do population-level assumptions suggest when individual information is unavailable?
The farther down that hierarchy we go, the less confidently the information should dictate the training decision.
What the Algorithm Could Actually Look Like
If we were going to build a more defensible training-load algorithm, I would structure it around a series of estimates rather than one progression percentage.
The first layer would estimate current exercise-specific capacity from recent working sets:
Load + Reps + Reps in reserve
Each set provides an estimated strength value.
Several recent observations are then combined, with more recent and more informative sets receiving greater weight. A hard set performed last week should probably tell us more about current capacity than an easy set performed three months ago.
That produces an estimate of current capacity for the specific exercise.
The program's target is then introduced:
Target reps + target RIR
If the workout asks for 8 reps with 2 remaining, the system estimates what percentage of the athlete's current capacity has historically produced approximately that outcome.
Initially, it may use generalized rep equations. As individual data accumulate, the person's own exercise-specific history should increasingly replace those general assumptions.
Training age can initially influence the expected variance around the prediction, with less experienced athletes receiving wider ranges because their performance is likely to change more quickly.
Exercise experience should modify that further. A ten-year lifter performing an unfamiliar exercise should be treated differently from a ten-year lifter performing a movement they have trained weekly for five years.
The individual's actual history of prediction errors should eventually replace much of this categorical information. If the model repeatedly predicts 200 lbs and the athlete reliably performs best at 190, the algorithm should learn that rather than repeatedly making the same mistake.
Lifestyle information can then widen or narrow the confidence range around the day's recommendation without automatically forcing the load upward or downward.
Finally, the first meaningful working set becomes the strongest available information and allows the system to adjust subsequent sets if necessary.
The result is less like:
Last week's weight + 2.5% = today's weight
and more like:
Based on your recent performance, exercise history, training experience, individual response to previous load increases, reported effort, and today's uncertainty, this is the most likely useful starting load. We will update that estimate based on what you actually do.
That is a fundamentally different way of thinking about the problem.
Where the Coach Still Has an Advantage
Even this more sophisticated model remains imperfect because it is attempting to turn a large number of interacting human variables into measurable inputs.
A coach does something similar, but not entirely through arithmetic.
They see how the athlete walks into the room. They see whether the warm-up looks normal. They notice if someone is protecting a knee without realizing it. They know that an athlete is usually conservative when choosing weight, or that another one becomes reckless when they feel good. They can tell when technique changed enough that last week's numbers are no longer directly comparable to today's. They can recognize when someone needs to be pushed and when the same person needs to be restrained.
More importantly, a coach can ask why, while an algorithm only sees that performance dropped 8%.
A coach might learn that the athlete broke up with their girlfriend, slept three hours, skipped breakfast, has an exam in two hours, and still wants to train hard because training is the only part of their day that currently feels normal.
None of those things automatically determines what weight should go on the bar, but together they change how the coach interprets what happens next.
That doesn't mean coaches are infallible. Coaches guess too. Good coaching isn't the absence of uncertainty. Much of coaching is making increasingly educated decisions from incomplete information and then adjusting as reality gives you better information.
An algorithm can do some of that as well, particularly when it has enough longitudinal data. However, the difference is that we should be careful about presenting mathematical precision as physiological certainty.
A recommendation of 187.5 lbs looks incredibly precise. The human being lifting it may not be.
A Better Approach?
There is value in using technology to remove unnecessary guesswork from training. Most people don't have an experienced coach watching every set, and an adaptive recommendation based on actual training history could be considerably more useful than asking someone to randomly choose a weight.
The system should make the best available prediction, communicate how uncertain that prediction is, and improve its recommendations as the athlete provides more information.
It should become less dependent on generic rules the longer someone uses it. Training age may help establish an initial expectation. Exercise history makes that expectation more specific. Previous performance begins shaping the athlete's individual model. Effort calibration tells us how much confidence to place in subjective feedback. Lifestyle factors modify our uncertainty about the day. Actual performance then tells us whether the prediction survived contact with reality.
That is a much harder problem than adding 2.5% every week. It's also much closer to what coaching actually is.
What the Algorithm Could Actually Look Like
All of this still leaves us needing to put a number on the bar. If I were trying to build the algorithm, I would use everything above to solve three separate problems: estimate the athlete's current capacity, calculate the load most likely to satisfy today's prescription, and then establish how much uncertainty should exist around that prediction.
The starting point would be recent exercise-specific performance. If we know the load, completed reps, and estimated reps in reserve, we can approximate how many total reps the athlete was capable of:
Estimated reps to failure = completed reps + RIR
A set of 185 lbs for 8 reps at approximately 2 RIR therefore behaves roughly like a 10RM. That performance can then be converted into an estimated current capacity using an established rep-max equation. Using the O'Connor equation as an example:
Estimated 1RM = Load × [1 + 0.025 × estimated reps to failure]
For 185 lbs and approximately 10 available reps:
185 × [1 + (0.025 × 10)] = approximately 231 lbs
I wouldn't use that one set as the answer. The model could combine the most recent several exposures, giving greater weight to more recent performances. As an initial structure, the last five useful exposures might receive weights of 40%, 25%, 15%, 12%, and 8%. That produces a rolling estimate of the athlete's current capacity on that specific exercise.
Suppose that estimate is 250 lbs and today's program calls for 8 reps at 2 RIR. We again treat the prescription as approximately 10 available reps and reverse the equation:
Predicted load = estimated current capacity ÷ [1 + 0.025 × target available reps]
In this case:
250 ÷ 1.25 = 200 lbs
So 200 lbs becomes the initial prediction.
The next step is where the model begins becoming genuinely individual. If the equation repeatedly predicts 200 lbs, but this athlete consistently achieves the intended reps and RIR closer to 190, the system should learn from that discrepancy. We could calculate an individual correction factor:
Individual correction = actual successful load ÷ predicted load
If 190 consistently works when 200 was predicted:
190 ÷ 200 = 0.95
Future comparable predictions would then be multiplied by approximately 0.95. This correction should be specific to the exercise and, where enough data exist, the rep range. The more the athlete trains, the less the model depends on generalized rep equations and the more it depends on that athlete's own history.
The final pre-workout calculation would therefore look roughly like:
Personalized predicted load = estimated load from current capacity × individual correction factor
That gives us the number we think the athlete should use. It doesn’t tell us how certain we should be.
Initially, training age and exercise familiarity can establish the expected range around that prediction. A reasonable starting assumption might look something like:
Less than 1 year training: ±10%
1-2 years: ±7.5%
2-4 years: ±5%
4+ years: ±3%
These numbers are starting assumptions rather than established physiological thresholds. An unfamiliar exercise would widen the range further because performance can change rapidly while the athlete learns the movement. Once enough individual data exist, however, the system should stop relying primarily on training age and instead calculate how far this particular person's actual loads normally deviate from its predictions.
Lifestyle information can then widen that range when today's performance is unusually difficult to predict. Poor sleep, unusually high stress, low calorie intake, soreness, travel, or illness would not automatically subtract weight from the recommendation; they would reduce our confidence that the athlete will perform exactly as expected.
The output might therefore look like:
Predicted starting load: 200 lbs
Expected range today: 190-210 lbs
Then the athlete actually lifts.
At that point, today's performance should begin replacing prediction with observation. If the prescription was 200 × 8 at 2 RIR and the athlete performs 200 × 8 at 4 RIR, the starting prediction was conservative. If they perform 200 × 8 at 0 RIR, it was aggressive. If they only complete 6 of the prescribed 8 reps, that objective failure should carry even more weight than the subjective RIR estimate.
A simple first version could adjust the next set approximately 2% for each RIR the prediction missed by, while missed reps could carry a larger adjustment, perhaps around 3% per rep. Those coefficients would need to be tested against real training data rather than treated as established truths.
The complete system therefore becomes fairly simple despite the number of variables behind it:
1. Use recent performance to estimate current exercise-specific capacity.
2. Use today's reps and RIR target to calculate the most likely starting load.
3. Correct that prediction using what the system has learned about the individual.
4. Attach a range reflecting how uncertain the prediction is.
5. Let today's actual performance update the recommendation once the athlete begins training.
The precise coefficients would almost certainly change as real data accumulated. That is partly the point. A genuinely individualized algorithm should become less dependent on the assumptions it was built with as it learns how the individual actually performs.