Reducing batch size
Model: each item is 1 week of work at each of 4 stages, one item finishes per week, and an item moves on only with its whole batch. Defect rate 5% per item; 4% chance an error is built upon by each later item in the batch; item durations are lognormal (σ = 0.6); scope is attracted at 1.2% of remaining work per week. The exact numbers are illustrative — the direction of every tile is not.
24 work items · 4 stages · each stage finishes 1 item/day
day 0Items delivered over time
All batch sizes, without the spec flaw
| batch | cycle time | 1st test | 1st delivery | all done | wasted |
|---|---|---|---|---|---|
| 1 | 4.0 d | day 3 | day 4 | day 27 | 0 |
| 2 | 7.5 d | day 5 | day 8 | day 30 | 0 |
| 3 | 11.0 d | day 7 | day 12 | day 33 | 0 |
| 4 | 14.5 d | day 9 | day 16 | day 36 | 0 |
| 6 | 21.5 d | day 13 | day 24 | day 42 | 0 |
| 8 | 28.5 d | day 17 | day 32 | day 48 | 0 |
| 12 | 42.5 d | day 25 | day 48 | day 60 | 0 |
| 24 | 84.5 d | day 49 | day 96 | day 96 | 0 |
Without the flaw, average cycle time is exactly 4b − (b−1)/2 days: every item waits for its batch-mates at each of the 4 stages. Total capacity never changed — only the batch size did.
Release economics · team finishes 4 features/week
Transaction cost per week = cost per release × 4/b. Holding cost per week = cost of delay × b/2 (on average half a batch is sitting finished and unreleased). Classic optimum b* = √(2·T·D/H). Try: set automation to 75% and watch the optimum halve — then raise cost of delay (launch is near, B22) and watch it shrink again.
Remaining work over time
Actual vs planned duration (B8)
Model: the team burns 1 team-week of scope per week; stakeholders add scope at k × remaining work per week (a far-off release is the only train leaving, so everybody boards it). dR/dt = −1 + kR, so R* = 1/k is a tipping point: below it the project ends late, above it the project never ends. Try: raise planned scope toward R* and watch the slip go from a few percent to infinite — then split it.
Small batches pack capacity precisely
B146 sprints × 10 team-days · loading target 85%
Try: push item size above 6 days — sprints swing between half-empty and overloaded no matter how you plan. At 1 day every sprint lands on target, in strict priority order.
Batch content: put cheap, likely failures first
B20CI pipeline, in run order
- 45.0 minEnd-to-end browser suite45.0 min · fails 10% · runs 100% of the time
- 27.0 minPerformance benchmark30.0 min · fails 4% · runs 90% of the time
- 13.0 minIntegration tests15.0 min · fails 12% · runs 86% of the time
- 3.0 minUnit tests4.0 min · fails 18% · runs 76% of the time
- 0.9 minType check1.5 min · fails 15% · runs 62% of the time
- 0.3 minLint & format0.5 min · fails 8% · runs 53% of the time
Bright bar = expected minutes actually spent on that check (cost × chance the pipeline gets that far).
Testing: 12 commits/day arriving
What makes the small batch possible
- takeawayShrinking batches is the cheapest way to cut cycle time: capacity stays the same, yet items stop waiting for their batch-mates. In the pipeline, batch 12 makes the average item take 10× longer than batch 1 with the same people.
- takeawayThe economic batch size balances transaction cost against holding cost. The curve is flat at the bottom, and the hidden costs of big batches push the optimum smaller. The highest-leverage move is to lower transaction cost (automate testing and deploys) so the optimum keeps moving left.
- takeawayBig batches feed themselves: they slip, attract scope, and slip more. Split them into small, frequent releases, hand work over in small transport batches, and build the coupling, proximity and infrastructure that make small batches cheap.
All 22 principles of reducing batch size
book chapter 5- B1The Batch Size Queueing Principle
Shrinking batches shortens cycle time.
An item in a batch waits for every other item in that batch to be processed before it moves on, so time in queue grows roughly in proportion to batch size. Halve the batch of features per release and the average feature reaches users about twice as fast — without adding a single engineer.
↑ see it in the visualization - B2The Batch Size Variability Principle
Smaller batches make flow smoother and less variable.
Large batches arrive as lumps that swamp a downstream process and then leave it idle. Many small transfers turn a spiky arrival pattern into a nearly steady stream, which lowers queues at every following stage — e.g. a QA team receiving 3 stories a day instead of 30 every other week.
↑ see it in the visualization - B3The Batch Size Feedback Principle
Smaller batches deliver feedback sooner.
You cannot learn whether work is right until the batch reaches the next step. A pull request of 50 lines is reviewed in an hour; a 5,000-line branch waits days, and every line written meanwhile is built on unverified assumptions.
↑ see it in the visualization - B4The Batch Size Risk Principle
Smaller batches lower risk.
Risk falls because cycle time is shorter (less exposure to change), feedback is faster (errors are caught before they propagate), and a failure affects fewer items. A failed deploy of one change is a quick rollback; a failed quarterly release is a crisis.
↑ see it in the visualization - B5The Batch Size Overhead Principle
Smaller batches cut overhead.
It feels like big batches save overhead, but the overhead of large queues dominates: more status meetings, more re-prioritization, more tracking of stale items, more merge conflicts. Teams that move to small batches routinely find their coordination load goes down, not up.
↑ see it in the visualization - B6The Batch Size Efficiency Principle
Large batches lower efficiency.
Slow feedback means more work is done on top of a mistake before the mistake is found, so rework grows faster than batch size. Engineers also lose context: fixing a bug found the same day is quick; fixing one found three months later means re-learning the code first.
↑ see it in the visualization - B7The Psychology Principle of Batch Size
Large batches drain motivation and urgency.
When the deadline is a year away, a day's slip feels irrelevant and nobody sees the result of their work. Small batches give each person fast, visible results and a near deadline, so effort and ownership rise.
↑ see it in the visualization - B8The Batch Size Slippage Principle
Large batches make cost and schedule grow exponentially.
Long projects have more time for requirements and technology to change, and every change triggers more rework and more delay, which invites more change. That is why a 6-month project slips a few weeks while a 3-year program slips by years.
↑ see it in the visualization - B9The Batch Size Death Spiral Principle
Large batches tend to grow even larger.
A big, slow project is the only train leaving the station, so every stakeholder piles on scope; the extra scope delays it further, which attracts still more scope. Big projects also become too important to cancel, absorbing the best people and starving small ones.
↑ see it in the visualization - B10The Least Common Denominator Principle of Batch Size
A whole batch moves only as fast as its worst element.
If a release bundles 40 changes, the release ships when the slowest or riskiest change is ready — and the most sensitive change sets the review and testing rigor for all of them. The bigger the batch, the more likely it contains a slow or risky outlier.
↑ see it in the visualization - B11The Principle of Batch Size Economics
The economic batch size is a U-curve trade-off between transaction cost and holding cost.
Each batch carries a fixed transaction cost (a release, a test campaign, a review meeting), which favors big batches; every item waiting in a batch carries holding cost (mostly cost of delay), which favors small ones. Their sum is a U-shaped curve with a flat bottom, so batch size is a continuous variable you can tune, and being somewhat off the optimum costs little.
↑ see it in the visualization - B12The Principle of Low Transaction Costs
Driving down transaction cost per batch lowers total cost and moves the optimum toward smaller batches.
The U-curve is not fixed: invest in test automation, one-click deploys or standing review slots, and the transaction cost falls, so the optimal batch shrinks and total cost drops. This is how continuous delivery became economical — not by ignoring transaction costs, but by eliminating them.
↑ see it in the visualization - B13The Principle of Batch Size Diseconomies
Reducing batch size saves much more than the simple U-curve predicts.
The classic U-curve counts only transaction and holding cost; it ignores slower feedback, extra rework, higher risk, overhead and lost motivation, all of which grow with batch size. Add them and the true optimum lies further left — and the first moves down from a huge batch pay off enormously.
↑ see it in the visualization - B14The Batch Size Packing Principle
Small batches let you fill capacity more precisely.
Packing a sprint or a test rig with a few big chunks leaves large unusable gaps — a 5-day item can't fit in 3 free days. Small work packages fill the gaps, so you can run at a chosen utilization instead of being forced over or under it.
↑ see it in the visualization - B15The Fluidity Principle
Loose coupling between subsystems enables small batches.
If modules depend tightly on each other, changing one forces a coordinated big-bang change to many. Stable interfaces, modular architecture and backward-compatible APIs let each team ship small changes independently and in any order.
↑ see it in the visualization - B16The Principle of Transport Batches
The transport batch matters more than the production batch.
A production batch (a setup-heavy operation) may need to stay large, but the transport batch — how much work is handed to the next step at once — can usually be cut to one item. Write the spec as one document if you like, but release it to developers section by section as each is done.
↑ see it in the visualization - B17The Proximity Principle
Proximity makes small batches possible.
When people sit together, the transaction cost of a conversation is nearly zero, so they exchange questions one at a time instead of batching them into a weekly meeting or a long email. Co-location (or always-on chat with overlapping hours) shrinks the batch size of communication.
↑ see it in the visualization - B18The Run Length Principle
Shorter run lengths reduce queues.
Alternating frequently between work types — short runs of each — keeps every type's queue small. A team that spends a whole quarter on features then a quarter on tech debt builds a large backlog of each; interleaving them every week keeps both flowing.
↑ see it in the visualization - B19The Infrastructure Principle
Good infrastructure enables small batches.
Small batches only pay when each transaction is cheap, and infrastructure is what makes it cheap: CI pipelines, automated test suites, feature flags, staging environments, and test fixtures that let a subsystem be verified without the whole product.
↑ see it in the visualization - B20The Principle of Batch Content
Sequence first the work that adds the most value for the least cost.
Within a batch, order matters: run the cheap tests most likely to fail first, and attack the riskiest unknowns early, so the batch reveals bad news at the lowest cost. A five-second lint step should never wait behind a forty-minute integration suite.
↑ see it in the visualization - B21The Batch Size First Principle
Cut batch size before you attack bottlenecks.
Adding capacity at a bottleneck is expensive and slow; reducing batch size is usually cheap and reduces queues everywhere, including at the bottleneck, by smoothing the flow into it. Shrink batches first, then see which bottlenecks still matter.
↑ see it in the visualization - B22The Principle of Dynamic Batch Size
Change batch size as the economics change.
The optimum depends on transaction and holding costs, and both move during a project. As launch nears and cost of delay rises, the holding cost per waiting item goes up, so the right batch size shrinks — e.g. daily test cycles near release instead of weekly ones early on.
↑ see it in the visualization