Double progression is a way of getting stronger with two dials turned in a fixed order: reps first, weight second. You work inside a rep range — say 6 to 10 — at one weight until you can beat the top of that range, then you add weight and drop back to the bottom of the range and climb again. It is the progression model built into Zyra Workouts' Smart Progression, and because the rule is code, it can be quoted exactly.
Rep range first, weight second
A single-progression scheme says "add 2.5 kg every session". It works for a while and then it does not, because the weight can only go up as fast as your strength does, and strength does not move in 2.5 kg steps on a schedule.
Double progression loosens that. The weight stays fixed for several sessions while the reps climb from the bottom of a range to the top. Each extra rep at the same weight is a small, real increase in work. When you have finally cleared the range, the weight goes up by one step and the reps fall back to the bottom — a bigger jump, earned rather than scheduled. Over a block the load ladder looks like a staircase: flat runs of rep gains, then a riser of weight.
The range does two jobs. Its width is how much rep progress you are asked to make before the next weight jump (a 6–10 range asks for four reps of climbing; 8–12 asks for four as well but at lighter loads). Its bottom is where you land after a jump, so it needs to be a rep count you can actually hit at the new weight.
In plain terms: climb the reps at one weight, then raise the weight and climb again.
The ceiling rule, with the exact formula
Zyra Workouts turns "cleared the range" into one number per set target, the ceiling. From the engine:
ceiling = RIR target === 0 ? repMax : round((repMin + repMax) / 2) + RIR target
For a failure set (RIR 0) the ceiling is simply the top of the range. For any other target, it is the midpoint of the range plus the reps you were meant to leave in reserve. The logic: if you were asked for 6–10 reps with 2 in reserve, the app expects you to stop around 8 with 2 left, so 10 total was in you. Do 11 and you have shown more than the target assumed — time to add load.
Then, comparing your last logged working set (warm-ups are excluded) with that ceiling, the recommendation is one of three:
| Last set was… | Decision | Next recommendation |
|---|---|---|
| more reps than the ceiling | progress | weight + one step, reps = repMin |
inside the range (≥ repMin, ≤ ceiling) | hold | same weight, same reps (clamped to the range) |
fewer reps than repMin | back off | weight − one step, reps = repMin |
A few consequences worth knowing:
- The ceiling can sit above the top of the range.
8–12 @ RIR 3givesround(10) + 3 = 13, so hitting 12 is a hold, not a progression — the app wants proof you had reps beyond the range before it adds weight. - It can also sit below the top.
6–12 @ RIR 1givesround(9) + 1 = 10, so 11 reps triggers progression even though 12 was the top of the range. - Weights snap to the step: a recommendation of 102.5 kg on a 2.5 kg step is kept as-is, and anything off-grid is rounded to the nearest step. What counts as a step is in what is progressive overload.
- With more than one set, each target is paired with the matching logged set (first with first, and so on); if you logged fewer sets than the program has targets, the last logged set stands in for the missing ones.
The back-off branch has its own page: when should you drop the weight.
Weight-first versus reps-first
Smart Progression has an adjustment mode with three settings. Two of them behave the same way in the engine — off and weight-first both run the table above unchanged. Reps-first adds one extra check on the progress branch:
if mode === 'repsFirst' and last reps + 1 ≤ repMax → same weight, reps + 1
That is: when you have beaten the ceiling but there is still room under the top of the range, reps-first prefers to ask for one more rep at the same weight; weight-first goes straight to the next load. The two modes only differ when the ceiling is lower than repMax, which happens with wide ranges and low RIR targets. When the ceiling equals or exceeds the top of the range there is no room left, and both modes add weight.
Bodyweight exercises have a step of 0 kg, so there is nothing for weight-first to do; a beaten ceiling on a pull-up keeps the load and clamps the rep recommendation into the range.
In plain terms: reps-first squeezes every rep out of a weight before moving on; weight-first moves on as soon as you have earned it.
Worked example
Take a set target of 6–10 reps @ RIR 2 on a barbell with 1.25 kg plates available, so the step is 2 × 1.25 = 2.5 kg.
Ceiling: round((6 + 10) / 2) + 2 = 8 + 2 = 10.
| Last logged set | Compared with | Decision | Wand text (as the app phrases it) |
|---|---|---|---|
100 kg × 11 | 11 > 10 | progress | Last time 100 kg × 11 · target 6–10 @RIR 2 (ceiling 10) → +2.5 kg → 102.5 kg × 6. |
100 kg × 8 | 6 ≤ 8 ≤ 10 | hold | Last time 100 kg × 8 · target 6–10 @RIR 2 (ceiling 10) → hold 100 kg × 8. |
100 kg × 5 | 5 < 6 | back off | Last time 100 kg × 5 · target 6–10 @RIR 2 (ceiling 10) → under the rep floor, backing off to 97.5 kg × 6. |
Note the hold row. Eight reps at RIR 2 is exactly the set the program asked for, so nothing changes; the app is not "stuck", it is waiting for the extra rep that proves the weight is ready to move. Here the ceiling equals the top of the range, so reps-first and weight-first give the same answer on the progress row. Change the target to 6–12 @ RIR 1 (ceiling 10) and the 100 kg × 11 row splits: weight-first says 102.5 kg × 6, reps-first says 100 kg × 12.
All of this is deterministic arithmetic on your last set. It is not a trial result and it is not a judgement about you — change the RIR target or the range and the ceiling moves with it.
The short version
Double progression: fill the rep range, then add weight and start the range again. Zyra Workouts decides with a ceiling of round((repMin + repMax) / 2) + RIR (or repMax at RIR 0): above it, add one equipment step at the bottom of the range; inside it, hold; below the range, back off one step. Reps-first spends spare room in the range on a rep before it spends it on weight. The rep-count half of the rule depends on honest RIR logging. Zyra Workouts is in development and not yet on the App Store; the rules quoted here are read from its source code and may change before release. Training guidance, never medical advice. Educational overview only — not medical advice.