Loading...
Back to the blog
By Juriy ZaytsevSources verified September 3, 2026

Twenty ways a workout refuses to be three numbers

Most gym apps assume a workout is sets, reps and weight. Here are twenty real workout types that break that assumption, ending with partner workouts, which break it worst.

If you lift, you already know how to write a workout down:

Bench press — 3 x 10 @ 135 lb

Three sets, ten reps, one weight. Every fitness app ever built can store that. It's three numbers.

Then you walk into a CrossFit class, or open a Hyrox plan, or follow a program off Instagram, and the workout looks nothing like three numbers. I've spent a while building a catalog of 1,811 of these, 1,735 of which have a structured prescription behind them — the machine-readable version an app can actually run. Each one breaks the simple format in its own particular way, and that's the part worth writing about.

Here they are, roughly in order of how much trouble they cause.

1. The same thing, over and over

Cindy — as many rounds as possible in 20 minutes of: 5 pull-ups, 10 push-ups, 15 air squats.

This is the easy one. Three movements, fixed reps, a clock. Your score is how many times you got through the list.

Except — even this isn't quite three numbers. You almost never finish on a round boundary, so the real score is "17 rounds plus 12 reps", and now you're storing two numbers that mean different things. And its cousins have a time cap: if you don't finish inside the cap, your score stops being a time and becomes a rep count. One workout, two incompatible kinds of score, depending on how your day went. That one deserves its own article.

2. The reps change every round

Fran — 21-15-9 of thrusters (a front squat straight into an overhead press) and pull-ups. First round is 21 of each, then 15, then 9.

In 3 x 10, the ten belongs to the exercise. Bench press is ten reps. In Fran, the thruster has no rep count of its own — 21, 15 and 9 belong to the rounds, and both movements just inherit whatever round they're in. So you can't answer "how many pull-ups?" without being told which round you're asking about.

3. The reps change by a rule, forever

Chaos — 10 minutes of: 1 devil press, 1 thruster. Then 2 and 2. Then 3 and 3. Keep going until time runs out.

There's no list to store here, because nobody knows how far you'll get. What you have to store is the rule: start at one, add one each round. Get this wrong and the app shows you "1 devil press" for the entire ten minutes, which is exactly what ours did until I fixed it while writing this.

4. Two movements climbing at different speeds

AGQ 22.3 — rope climbs go 1, 2, 3, 4. Shuttle runs in the same rounds go 2, 4, 6, 8.

An ascending ladder on its own is common. What's rare is two movements ascending at different rates in the same round, and it settles a design question for you: the "add this much each round" instruction can't be attached to the round, it has to be attached to each movement separately.

Four workouts in eighteen hundred force that — this one, Xenom 002, Cortex and Shuttle Up. Without it, all four are wrong forever.

5. Only some movements climb

Eleven 11 — 11 burpee box step-overs*, 11 dumbbell thrusters. The asterisk means "add 1 rep each round."

Read it again: the asterisk is only on the step-overs. The thrusters stay at 11 the whole time. An app that applies the rule to the whole round quietly doubles your workload.

6. No rep count at all

Nicole — 20 minutes of: 400 metre run, then max rep pull-ups.

"Max reps" isn't a number, it's an instruction. There is nothing to prescribe. The app has to know that this one is blank on purpose and ask you afterwards. Store a placeholder instead and you get what we had: a pull-up benchmark whose prescription read "1 Pull-Up."

7. The clock is the rep count

Fight Gone Bad — five stations, one minute each, as many reps as you can at each. Then a minute of rest.

Same problem as Nicole, from the other end. The number isn't missing because nobody specified it; it's missing because a stopwatch determines it.

8. Two workouts running at once

Kalsu — 100 thrusters for time. Five burpees to start, and five more at the top of every minute until you're done.

This one is my favourite, because it isn't a list at all. There's a task (100 thrusters) and there's a metronome (burpees every minute), and they run simultaneously. The burpees interrupt the thrusters; the thrusters don't wait.

And notice what that does to the numbers. It isn't "100 thrusters and 5 burpees." If you take nine minutes, you did 45 burpees. If you take fourteen, you did 70. The rep count of one movement is determined by how slow you are at the other one. We currently store this as two flat lines — 100 thrusters, 5 burpees — which is not the workout at all.

9. A "rep" is five movements

Bear Complex — five rounds of seven unbroken sets of: power clean, front squat, push press, back squat, push press. Increase the weight each round.

Three separate problems in one line. The unit of work is a complex — five movements that count as one rep, and dropping the bar mid-complex means the set doesn't count. "Unbroken" is a constraint, not a movement. And the weight climbs each round, but the amount is up to you, so there's no load to prescribe either.

10. Resting is part of the workout

Barbara — 5 rounds of 20 pull-ups, 30 push-ups, 40 sit-ups, 50 air squats, with three minutes of rest between rounds.

The rest is the point. Three minutes is what lets you attack each round instead of pacing it. Drop it and you've got a workout that looks identical on screen but is much harder to do — and isn't the one that was prescribed.

Worth admitting: we shipped Barbara without her rest for a long time, and nobody noticed, because a rest period that exists only in the description reads fine to a human. It surfaced the moment we started building a timer that follows the workout step by step — suddenly the app had to do something with those three minutes, and there was nothing there to do it with.

11. The rest belongs to part of the workout

Timberlake — Part A is five rounds with three minutes rest between them. Part B is ten rounds with no rest at all.

So "rest between rounds" can't be a property of the workout. It has to attach to each part separately. One workout, two answers.

12. Every workout brings its own units

Murph is written in miles — a one-mile run, 100 pull-ups, 200 push-ups, 300 squats, another mile. Helen is written in metres: 400 metre runs. Shuttle runs and handstand walks are almost always written in feet: 50 feet, 25 feet. Sled pushes turn up in yards.

None of those are the same workout's preference — they're each workout's own. The mile in Murph isn't a rounding of 1600 metres, it's a mile, and it's part of what the workout is.

So you have to store a distance twice: once as a number you can do arithmetic with, and once as the unit the author actually wrote. Store only the first and you get what we shipped — Murph's mile converted to 5278.9 ft Run for anyone on imperial units. Technically correct, obviously wrong.

There's a nastier version. A yard is exactly three feet, so a 50-yard sprint stored as 45.72 metres divides perfectly into 150 feet. Arithmetic alone can't tell you which one the author wrote. Only the words can.

13. The weight is a fraction of you

Linda — deadlift at 1.5x your bodyweight, bench at 1x, clean at 0.75x.

There's no weight to store, only a multiplier. Everyone in the class lifts something different. And the default is a trap: if the multiplier is missing, does that mean "one times bodyweight" or "nobody filled this in"? We had ten workouts where the answer was wrong in both directions.

14. The weight is a fraction of your best lift

Lucas — three rounds of six movements, one of which is 30 deadlifts at 50% of your one-rep max.

Different again. Now it depends on a number that lives in your training history, not on your bodyweight. The app has to reach into your logged maxes at the moment you start.

Slightly embarrassing detail: our schema has had a field for this the whole time, our parser prompt describes it three times, and not one of those 1,735 prescriptions had ever actually used it.

15. Time is the structure, not the score

Michael Kiefer — every minute on the minute for 20 minutes: bench presses on the odd minutes, hand-release push-ups on the even ones.

The clock isn't timing you here, it's telling you when to go. And the two movements take turns, so "which movements" isn't enough — you need to store the order they rotate in.

16. The reps are a function of what minute it is

Jeffrey Palazzo — death by deadlifts. One rep in the first minute, two in the second, three in the third, until you can't finish inside the minute.

You can't write down how many reps this workout has, because the answer is "as many as you manage." The honest thing to store is nothing — mark it as athlete-reported and let the clock do the rest.


And then there are partner workouts

Everything above is one person against a clock. Add a second person and a whole new category of trouble appears, because now the workout has to describe a relationship between two people, and there is no field for that anywhere.

17. "Each" means each person

Team Series 18.4 — 50 double-unders each. (A double-under is one jump with two passes of the rope.)

Each what? Not each side — a rope skip doesn't have sides. Each partner. The same word means "per limb" in one workout and "per teammate" in another, and only the surrounding context tells you which. Guess wrong and you double the reps.

Related trap, and this one caught us: "100 one-legged squats, alternating." Alternating describes how you distribute 100 reps across two legs. It does not mean 100 per leg. We were quietly reporting 200.

18. A rep only counts if you both do it together

Team Series 17.1 — 9-15-21 of synchronised thrusters and synchronised bar-facing burpees. Both athletes have to hit the standard on every single rep.

A rep here isn't an event that happened to one person. It's an event that happened to two people at the same instant, and if you're half a second out it isn't a rep at all. Kev mixes this within one round: some movements are "each", one is "synchronized", one is a barbell the two of you carry together.

19. Your rep count depends on how fast your partner runs

Natalie Corona — 22 minutes. Partner A does an AMRAP of 20 sit-ups and 20 burpees while Partner B runs 400 metres. You swap every time the runner gets back.

Nothing here has a number. How many sit-ups do you do? However many fit in the time it takes someone else to run 400 metres. Two people, two different movements, running simultaneously, where one person's workload is set entirely by the other's pace.

Suffer in Place is the same idea with holds: one partner planks while the other does push-ups, and you swap. Hang In There Partner is the cruel version — you do thrusters and burpees while your partner hangs from a pull-up bar, so the whole workout's pacing is governed by someone else's grip.

20. Reps that only exist if you fail

Protect Your Baby — one of you works while the other holds a medicine ball overhead. If the ball touches the ground, both of you do 10 burpees.

Those burpees are in the workout. They're also, hopefully, not in the workout. You can't prescribe them, because whether they happen depends on how the workout goes. Panic Breathing does it with kettlebells: five burpees every time your partner drops them.

And one more, just to finish: Black Friday lists 575 reps across five movements and then says "partition the work above any way." The order isn't unspecified because someone forgot. It's unspecified on purpose — the strategy is the workout, and any order the app displays is a suggestion it invented.


Why this matters

Every one of these fields has a silent default. Nothing is missing an increment — it just doesn't climb. Nothing lacks a rest period — it just runs straight through. Nothing is missing a bodyweight multiplier — it just uses your bodyweight exactly.

None of them fail loudly. They render a perfectly normal-looking workout that happens to be a different workout than the one you were given. That's why every correction here is a hand-checked list of named workouts rather than a clever rule over the text — and why the tests guarding them assert things like "Fran's second round is fifteen" rather than anything about our schema. A test that only checks our own data structures would have passed happily through every bug in this article.

If a workout in PRzilla disagrees with the one you know, tell me the name and the line that's wrong. That's enough to find which field is lying.