Kanban & Flow-Based Work: WIP Limits & Continuous Delivery
The Software Development Lifecycle
Chapter 4 · Kanban & Flow-Based Work: WIP Limits & Continuous Delivery
Scrum timeboxes work into sprints. Kanban timeboxes nothing — work is pulled continuously, one item at a time, the moment capacity opens up. Chapter 1's own interruption-cost finding already showed why unlimited work-in-progress is expensive; this chapter verifies the deeper, more precise reason WIP limits are Kanban's own central mechanism, using a well-known result from queueing theory that turns out to hold almost exactly in a real simulation.
Pull vs. Push, and the Metric That Actually Matters
Scrum plans a batch of work at the start of a fixed period (Chapter 3's own sprint). Kanban has no period — a team member pulls the next item from the backlog the moment they have capacity, and a strict work-in-progress limit caps how many items can be "in progress" across the whole board at once. The question this chapter answers: what does that limit actually protect against, precisely?
WIP Limits, Verified Across a Spectrum
| WIP limit | Total time (min) | Avg cycle time (min) |
|---|---|---|
| 1 | 200 | 10.0 |
| 2 | 797 | 79.7 |
| 3 | 797 | 115.7 |
| 5 | 797 | 197.8 |
| 10 | 797 | 390.9 |
| 20 | 797 | 761.9 |
WIP=2: predicted 79.7, measured 79.7; WIP=10: predicted 398.5, measured 390.9; WIP=20: predicted 797.0, measured 761.9.
Cumulative Flow Diagrams: Making a Bottleneck Visible
When Kanban Fits Better Than Scrum
| Scrum | Kanban | |
|---|---|---|
| Best fit for | Planned feature work with a natural batch boundary | Continuous, unpredictable work — support queues, ops, ongoing maintenance |
| Cadence | Fixed sprint length (Chapter 3) | Continuous — an item ships the moment it's done |
| Primary lever | Realistic commitment at planning (Chapter 3's own 100%-vs-57% finding) | WIP limit (this chapter's own cycle-time finding) |
Where This Connects
| This chapter's finding | What it connects to |
|---|---|
| Cycle time scaling with WIP even as total throughput stays flat | Chapter 1's own 27.5%-slower interruption finding — the same underlying cost, measured more precisely |
| A cumulative flow diagram exposing a bottleneck automatically | Chapter 9's own retrospective material — a CFD is exactly the kind of concrete, undisputable data a good retrospective works from |
Hands-On Exercises
Using this chapter's own WIP simulation, add WIP=4 to the tested spectrum. Determine its total time and average cycle time, and verify Little's Law's own prediction (WIP ÷ throughput) against the measured result, the same way the chapter did for the other WIP levels.
Using this chapter's own cumulative flow simulation, raise REVIEW_RATE from 2 to 4 (matching Build's own rate). Determine how the "waiting for review" backlog behaves over the same 10 days, and explain what this reveals about a CFD's own bottleneck signal when capacities are matched.
Using this chapter's own cumulative flow simulation, apply a WIP limit of 6 to the "awaiting review" queue — Build stops producing new items once 6 are waiting, resuming only once Review absorbs one. Determine how many days it takes to process all of Build's own first 40 items under this constraint, and compare it to the unconstrained version's own day-10 backlog of 20.
📄 View solutionChapter 4 Quick Reference
- Pull vs. push: Kanban pulls the next item on demand; Scrum plans a fixed batch for a fixed period
- Verified: raising WIP from 2 to 20 left total completion time nearly flat (797 min) but multiplied average cycle time by ~10x (79.7 → 761.9 min)
- Verified: Little's Law (cycle time = WIP ÷ throughput) predicted the measured cycle time closely at every WIP level tested
- Verified: a capacity mismatch between two pipeline stages produced a visibly growing backlog — 20 items waiting after just 10 days
- The real lever: a WIP limit doesn't just save total time — it keeps any individual item's own cycle time from ballooning, and makes bottlenecks visible instead of hidden in a queue
- Next chapter: Requirements & User Stories — what actually goes into the items pulled through this flow