Skip to main content

How load adaptation works in Kaizer

Kaizer estimates the 1RM of each exercise from the sets, reps and RIR the client logged, using a coefficient table derived from the NSCA. From that 1RM it computes the weight of the following weeks, rounded down to the exercise's minimum increment, and when the difference does not reach a whole increment it adds a rep instead of weight. It only writes the weeks nobody edited, and the coach switches it on or off globally and client by client.

Last reviewed: September 16, 2026

What goes into the calculation

The engine works exercise by exercise and client by client. Every time the client finishes a session in the app, it takes these inputs and nothing else.

The logged sets
The weight and reps of every set marked as completed. A set with no weight or no reps (skipped, or from an unloaded exercise) does not count.
The exercise's RIR
One value per exercise: the reps in reserve the app asks for when the exercise ends. If the client does not report it, or the question is turned off, the calculation uses 0.
Each week's template
The reps and RIR the coach prescribed for every set of that week. These are the routine's original values, not what the engine wrote later.
The exercise's minimum increment
Read from the exercise library, in kilograms or pounds depending on the client's unit. If the exercise has none defined, the engine uses 1 unit.
The exercise type
Whether it carries load, whether it is measured in reps, time or distance, and whether it is flagged as principal or secondary within the session. Each combination follows a different rule.
Recent history
The client's last three executions of that exercise, in any routine, as long as they are less than 56 days old. They keep a single bad or good session from moving the whole prescription.

Method

These are the steps, in the order they run. All of them are deterministic arithmetic over a table: no language model is involved in any of them.

  1. Reduce the session to one data point

    The engine averages the weight of the completed sets (to two decimals) and averages the reps, rounding down. It attaches the RIR reported for the exercise. Three sets of 8 at 60 kg with RIR 4 become 60 kg, 8 reps, RIR 4.

  2. Estimate the 1RM

    Reps plus RIR give the equivalent reps: the ones the client would have done to failure. That number, capped at 20, is looked up in the coefficient table below. The estimated 1RM is the weight divided by the coefficient, to one decimal. With 60 kg and 12 equivalent reps the coefficient is 0.70 and the 1RM is 85.7 kg.

  3. Smooth it with history

    The 1RM used to prescribe is not just today's. It is the mean of the estimated 1RMs of the last three executions of that exercise, today's included, dropping any older than 56 days and any with no loaded sets. If there is no other execution, today's is used. An old execution never comes back in: after a long break, the first session rules on its own.

  4. Compute the raw weight for each following week

    For every week that follows, the engine takes that week's template reps and RIR, adds them, finds the matching coefficient and multiplies it by the 1RM. That is the raw weight, to one decimal. Because each week can carry its own prescribed RIR, the raw weight changes from week to week even when the 1RM does not.

  5. Round to an increment that exists on the rack

    The raw weight can almost never be loaded with plates. The engine compares it with the reference weight (the actual weight of the previous week's last completed set, or its target if it was not trained), divides the difference by the minimum increment and keeps only whole increments, always rounding toward the reference. The remainder is discarded, not carried. With a 4.3 kg difference and 2.5 kg plates, the weight goes up 2.5 kg.

  6. If the weight cannot move, the reps do

    When the difference does not reach a whole increment, the weight stays and the engine changes the rep target instead. On a principal exercise the new target is the previous total effort (reps done plus reported RIR) plus one, minus the template RIR, which is kept. On a secondary exercise it compares that total effort with the template's: if it exceeds it, RIR is set to 1 and the target is one rep below the total; if it falls short, RIR is set to 1 and one rep is added to the reps done.

  7. Unloaded, timed and distance exercises

    An unloaded exercise measured in reps copies the reps the client did into the following weeks, only when they differ from the template. An exercise measured in time or distance is not recalculated: the following weeks receive the logged values as they are, weight included if it had one.

  8. Write only where it belongs

    The result is saved only into the weeks after the trained one that are still pending and whose last author is the engine. It writes the weight and reps of each set and the week's target RIR. Rest, set technique (a dropset, for instance) and notes stay as they were.

The coefficient table

This is the relation between equivalent reps and fraction of 1RM the engine uses, derived from the NSCA chart. It is read both ways: to estimate a 1RM from a set and to go from a 1RM down to the weight of a prescription.

Equivalent reps (reps + RIR)Fraction of 1RM
11.000
20.950
30.930
40.900
50.870
60.850
70.830
80.800
90.770
100.750
110.725
120.700
130.685
140.670
150.650
160.640
170.630
180.620
190.610
200.600

A worked example

Bench press, three sets of 8, minimum increment 2.5 kg. The template prescribes RIR 2 in weeks 1 and 2 and RIR 1 in week 3. In week 1 the client logs 60 kg on all three sets, 8 reps each, and reports RIR 4. There is no prior history on the exercise.

What the engine computes when week 1 is closed
StepArithmeticResult
Performancemean of 60, 60 and 60 kg; mean of 8, 8 and 8 reps; RIR 460 kg, 8 reps, RIR 4
Equivalent reps8 + 4, capped at 2012, coefficient 0.70
Estimated 1RM60 / 0.7085.7 kg
Baselineno other executions within 56 days85.7 kg
What it writes into the following weeks
WeekTemplateRaw weightReferencePrescription
28 reps, RIR 2 (10 equivalent, 0.75)85.7 × 0.75 = 64.3 kg60 kg (actual from week 1)62.5 kg × 8, RIR 2
38 reps, RIR 1 (9 equivalent, 0.77)85.7 × 0.77 = 66.0 kg62.5 kg (week 2 target)65 kg × 8, RIR 1

In week 2 the gap between raw and reference is 4.3 kg: one whole 2.5 kg increment, and the remaining 1.8 kg is discarded. In week 3 the gap is 3.5 kg over the 62.5 kg already prescribed, another whole increment.

Had the same client reported RIR 3 instead of 4, the 1RM would be 82.8 kg and the week 2 raw weight 62.1 kg. The gap to the 60 kg reference is 2.1 kg, less than an increment, so the weight stays at 60 kg and the rep target becomes 8 + 3 + 1 − 2 = 10. Week 2 would read 60 kg × 10, RIR 2.

The same case with a 1 kg minimum increment (the default when the exercise defines none) would give 64 kg in week 2: four whole increments inside the 4.3 kg gap.

Limits

What the engine does not do, because the code does not cover it. All of this is still the coach's work.

  • It does not program deloads. A routine's prescribed RIR can drop week by week because the template says so, but there is no logic that detects accumulated fatigue and lowers load or volume.
  • It does not change the number of sets or the rest times. It only writes weight, reps and target RIR.
  • It reads weight, reps and RIR only. No RPE, sleep, adherence, pain, client notes or any other signal.
  • If RIR is missing it is taken as 0. That is the most conservative reading possible: it assumes the set went to failure and underestimates the 1RM.
  • Rounding is always toward the reference weight: it never prescribes above the raw weight and never carries a remainder from one week to the next. An improvement smaller than an increment turns into reps, not weight.
  • Accuracy drops with reps. The table assumes a fixed relation between reps and fraction of 1RM; past 10 equivalent reps the estimate is a reference, not a measurement.
  • It does not touch the trained week or earlier ones, and it never touches again a week the coach or the client edited.
  • Timed and distance exercises are carried forward, not recalculated. And a new exercise, with no history, is prescribed from today's session alone.

What the coach decides

The arithmetic is automated; the judgment is not. These are the controls that exist in the product, verified in the same code.

  • A global switch and a per-client one. With progression off, the following weeks receive the values logged in the last session, with no 1RM recalculation.
  • The RIR question can be turned on or off globally and per client. Turning it off does not stop the calculation: it makes it conservative, because RIR becomes 0.
  • Any week the coach edits leaves the engine's scope permanently. The whole routine opens as a table where weight, reps and RIR can be edited week by week.
  • A generated routine reaches the client when the coach sends it. Until then it is a draft.
  • There is no approval inbox: in the weeks nobody touched, the load is written on its own when the client closes the session.

Methodology notes

  • Last reviewed: September 16, 2026.
  • Source: kaizer-backend production code, progression feature (1RM estimation, the load updater and its entry point when a session is closed), reviewed on 2026-09-16. This page describes what that code does, not what documentation promises.
  • The coefficient table derives from the NSCA reps and percentage of 1RM chart. This site's public 1RM calculator uses Epley and Brzycki for illustration; the engine uses neither.
  • The calculation runs at two moments: when the client closes a session and when the coach extends the weeks of a routine. In both cases it writes only future weeks that are pending and engine-written.
  • When the algorithm changes, this page and its review date change with it. If a number here does not match what you see in the product, the date tells you which of the two is older.

Frequently asked questions

A coefficient table derived from the NSCA, indexed by reps plus RIR and capped at 20. The estimated 1RM is the mean weight of the completed sets divided by the coefficient. It uses neither Epley nor Brzycki, and the value it prescribes from is the mean of the exercise's last three executions within 56 days.

The calculation uses RIR 0: it assumes the set went to failure. That is the most conservative estimate, so the 1RM comes out lower and so do the following loads. If you would rather it not calculate for that client, automatic progression switches off per client.

No. The engine has no deload logic: it does not measure accumulated fatigue or reduce volume. The prescribed RIR can vary week by week because the template is written that way, but a deload is the coach's decision.

Because the gap between the raw weight and the reference did not reach a whole increment of the exercise. The engine always rounds down and never carries the remainder, so it turns that improvement into one more rep at the template's RIR. With smaller plates, or a smaller minimum increment defined for the exercise, the same case would have raised the weight.