Volume

How many sets per muscle per week

Arqam Waheed

Set counting looks like the easy part of training. It's actually a pile of small decisions that nobody writes down.

Does a warm-up count. Does a row count for biceps. What does "per week" even mean when you're running a three-day rotation. Every one of those changes the number, and a number you can't reconstruct isn't worth putting in front of anyone.

So here's each decision, and the number it produces.

The short version


Where four and ten came from

They aren't new numbers invented for this. They're the hard limits already used in WhyRep's plateau decision tree, signed in July 2026, applied to a second place where the same question comes up. Nothing here is a fresh claim about training science. It's one approved rule rendered in a second view.

Volume landmarks beyond those two boundaries are out of scope. There's no "optimal" number on this page, because no approved document defines one.

What counts as one set

One logged set with at least one rep in it. That's the whole test.

It's not the completed tick. That checkbox is a progress marker for your own use and drives nothing else. Volume uses the same test the analyzer uses, so the two can never disagree about whether a session happened.

Effort doesn't matter either. A set taken to failure and a set left five reps short count the same here, because this view measures how much work a muscle received, not how hard it was. And a row with no reps in it isn't a set at all, so an empty row you left in the log counts for nothing.

Warm-ups, honestly

Warm-up sets shouldn't count, and right now they do, because there's no warm-up flag in the data model yet.

Until that ships, every logged set counts and the app states the caveat wherever the number appears. So if you log your warm-ups, your number reads slightly high, and you should know that rather than find it out. When the flag arrives it'll apply going forward only. Nothing already in your log gets rewritten behind you.


One exercise, several muscles

A row isn't only a lat exercise and a bench press isn't only a chest exercise. So each exercise carries a profile: its prime mover at a full set, and any number of secondary muscles at a quarter, a half or three quarters of a set, each one written down by hand.

There's no default and nothing gets inferred. A weight nobody has authored doesn't exist, and an exercise with no approved profile contributes to nothing. It shows as unclassified rather than guessed at, because an honest blank beats a plausible number.

Worked through: four sets of rows, where rows are a full set for lats and a half set for biceps, plus one set of curls. Biceps receive four halves plus one whole, which is three. Three rounds to three, which is under four, so your biceps are undertrained that week even though you did five sets that involved them.

When your split isn't a week

Plenty of programs don't run on seven days. A three-day rotation repeats twice a week and a bit, so the per-cycle number and the per-week number are different facts.

Both get shown. The per-cycle count is the fact, the per-week equivalent sits underneath it as the comparison, and the band judges the weekly one. Six chest sets on a three-day rotation is fourteen a week, and you get told that rather than congratulated on a six.

The number it judges is the one you actually trained

This is the part that matters most in practice, because programs and behaviour diverge constantly.

Your split says what you planned. What you did is often something else, and nobody writes a ten-day program. A ten-day gap is a weekly program being missed. So the band reads the observed interval, measured as the average gap between that muscle's last three sessions.

Take twelve chest sets in a session, on a program that says weekly, actually trained every ten days. By the plan that's twelve a week and the cap fires immediately. By what happened it's twelve scaled across ten days, which is 8.4, which rounds to eight and sits comfortably in range. Reading the plan would have the app telling you to drop sets you were never doing.

The plan isn't ignored, it just answers a different question. A program that would be over the cap if you ran it as written has a design problem, and that check reads the planned number, because a design flaw is a property of the design. When the two numbers disagree, the app says so out loud rather than quietly picking one.


Rounding, and where the edges actually fall

Rounding happens once, at the very end, on each number as it's displayed. All the scaling above runs on unrounded values, and halves go up. Which puts the boundaries in slightly surprising places:

Every muscle, with no exemptions

The map has twenty one regions, and both limits apply to all of them. Chest is split into upper and lower, so incline and flat work land in different numbers. Traps are split into upper and lower. The forearm is split. Neck is on the list.

Which means a lifter who never trains his neck is undertraining his neck, and the app will say so. That was chosen deliberately, knowing it makes an ordinary program read "under" in several places at once. The founder's words for it were that he'd rather be blunt than tidy.

The number is the reading, the colour is the glance

Under, in range and over are coloured, and the raw count always sits beside the figure rather than replacing it.

That isn't decoration. The three states are spaced far enough apart in lightness to survive red and green colour blindness, but the shading within the in-range band varies by saturation at a fixed lightness, and that doesn't survive it. Roughly one in twelve of this audience is affected. So the colour is a glance and the number is the authority, in that order.


Where this actually sits today

Being precise: this screen isn't finished.

Part of the counting exists in the codebase and part of it is wrong for the rules above. The muscle taxonomy hasn't been authored yet, and the table that maps exercises to muscles currently returns a single muscle with nowhere to put the fractional contributions this page describes. The figure also needs five body parts it doesn't have.

What is settled is every rule on this page: the band, the rounding, what counts as a set, the fractions, and reading the observed interval rather than the planned one. Those were decided before implementation started, which is the order this project does things in, and the code is being brought to them rather than the other way round.


Common questions

How many sets per muscle per week does WhyRep recommend?

Four to ten. Below four is called undertraining and the response is to add a set per week until the muscle is progressing again. Above ten is reduced straight back to ten, and that's the one limit with no negotiation attached to it.

Do warm-up sets count towards weekly volume?

They shouldn't, and at the moment they do, because there's no warm-up flag in the data model yet. Every logged set counts today, so the number reads slightly high if you log your warm-ups, and the app states that caveat wherever the number appears.

How does WhyRep count sets if my split is not seven days?

The per-cycle count is scaled to a seven day equivalent before it's judged, and both numbers are shown. Six chest sets on a three-day rotation is fourteen a week, and fourteen is the number the band reads.

Does a row count as a set for biceps?

Partly, if that's how the exercise has been written down. Each exercise carries a prime mover worth a full set and any number of secondary muscles worth a quarter, a half or three quarters. Nothing is inferred, so an exercise nobody has authored a profile for counts towards nothing at all.

Is the weekly volume screen in the app yet?

No. The rules are signed and part of the counting exists, but the muscle taxonomy hasn't been authored and the exercise mapping can't yet hold fractional contributions.


A note on sources

Everything on this page comes from WhyRep's weekly volume methodology document, signed before implementation, with worked test cases behind every number including the rounding edges. The four and ten boundaries are not original to it: they're the same limits the plateau decision tree already used. What's deliberately absent is any volume landmark beyond those two, because none has been approved.

Related reading

How many stalled sessions actually counts as a plateau uses the same four and ten limits at the top of its decision tree, and why WhyRep will never tell you to deload covers what happens when the answer is to remove a set rather than add one.

Back to the blog