WIP Limits Kanban | Flow Optimization & Throughput
Implement WIP limits to improve flow, reduce context switching, and increase throughput. GitScrum enforces soft/hard limits with visual indicators for teams.
8 min read
Work in Progress (WIP) limits are the most powerful lever for improving flow. By limiting how much work is in progress simultaneously, you force completion over starting, reduce context switching, and often increase throughput while lowering stress.
WIP Limit Benefits
| Without WIP Limits | With WIP Limits |
|---|---|
| Start many, finish few | Finish before starting |
| Context switching | Focused work |
| Hidden bottlenecks | Visible constraints |
| Long cycle times | Faster completion |
| Work piles up | Smooth flow |
Understanding WIP Limits
The Flow Principle
WIP LIMITS AND FLOW
βββββββββββββββββββ
SCENARIO A: No WIP limits
βββββββββββββββββββββββββββββββββββββ
Developer starts 5 things:
βββ Task 1: 40% done
βββ Task 2: 60% done
βββ Task 3: 20% done
βββ Task 4: 10% done
βββ Task 5: 5% done
Status: 0 tasks complete
Context switches: Many
Cycle time: Long
Stress: High
SCENARIO B: WIP limit of 2
βββββββββββββββββββββββββββββββββββββ
Developer can only have 2 things:
βββ Task 1: 100% done β
βββ Task 2: 100% done β
βββ Task 3: 80% (working on it)
βββ Task 4: Not started
βββ Task 5: Not started
Status: 2 tasks complete
Context switches: Minimal
Cycle time: Short
Stress: Lower
KEY INSIGHT:
Less work in progress = more work complete
Why It Works
THE MECHANICS OF WIP LIMITS
βββββββββββββββββββββββββββ
1. CONTEXT SWITCH REDUCTION
βββββββββββββββββββββββββββββββββββββ
Each context switch: 20-30 min recovery time
5 tasks/day switches: 2+ hours lost
2 tasks/day switches: 30 min lost
Saved: 1.5+ hours of productive time
2. FORCED COMPLETION
βββββββββββββββββββββββββββββββββββββ
Can't start new β Must finish current
"But I'm blocked" β Help unblock or wait
Result: Team helps each other finish
3. BOTTLENECK VISIBILITY
βββββββββββββββββββββββββββββββββββββ
Without limits:
Work piles everywhere, bottleneck unclear
With limits:
Work stops entering at bottleneck
Bottleneck becomes obvious
Team addresses it
4. REDUCED CYCLE TIME
βββββββββββββββββββββββββββββββββββββ
Little's Law: Cycle Time = WIP / Throughput
Same throughput, less WIP = faster cycle time
Items complete faster
Faster feedback
Less inventory
Setting WIP Limits
Column Limits
COLUMN WIP LIMIT GUIDELINES
βββββββββββββββββββββββββββ
STARTING POINTS:
βββββββββββββββββββββββββββββββββββββ
Team of 5 developers:
Backlog: No limit (pool of work)
Ready: 10 (2Γ team size)
In Progress: 8 (1.5Γ team size)
Review: 4 (bottleneck-prone, keep low)
Testing: 5 (1Γ team size)
Done: No limit
BOARD VISUALIZATION:
βββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Backlogβ Ready β Progress β Review β Test β Done β
β β β max: 10 β max: 8 β max: 4 βmax: 5β β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β [...] β [T1] β [T5] β [T9] β [T11]β [Done] β
β [...] β [T2] β [T6] β [T10] β [T12]β β
β [...] β [T3] β [T7] β β οΈ 3/4 β β β
β [...] β [T4] β [T8] β β β β
β β 4/10 β 4/8 β β 2/5 β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ADJUSTMENT:
βββ If column always at limit β Maybe too low
βββ If column rarely at limit β Maybe too high
βββ Watch for flow, not comfort
βββ Tension is the point
Personal Limits
PERSONAL WIP LIMITS
βββββββββββββββββββ
GUIDELINE: 2 items per person
βββββββββββββββββββββββββββββββββββββ
Developer can have:
βββ 1 main task (focused work)
βββ 1 backup task (if blocked)
βββ Not more
WHY 2:
βββ 1 item: If blocked, you're stuck
βββ 2 items: If blocked, have backup
βββ 3+ items: Context switching begins
βββ 2 is the sweet spot
ENFORCEMENT:
βββββββββββββββββββββββββββββββββββββ
In standup:
"Sarah, I see you have 3 items in progress.
Which one are you focusing on?"
In planning:
"Mike already has 2 items. Let's not
assign more until he completes one."
EXCEPTIONS:
βββ Small tasks (< 2 hours) maybe stack
βββ Waiting tasks don't count fully
βββ But: Don't game the system
βββ Spirit of the limit matters
Enforcement
Respecting Limits
WIP LIMIT ENFORCEMENT
βββββββββββββββββββββ
WHEN LIMIT IS HIT:
βββββββββββββββββββββββββββββββββββββ
Developer wants to start new task.
Review column at limit (4/4).
OPTIONS:
βββ 1. Help review existing PRs
β β Reduce Review count, make room
β
βββ 2. Wait
β β Don't start something you can't finish
β
βββ 3. Pair with reviewer
β β Learn and help simultaneously
β
βββ 4. Work on something else
β Not ideal, but sometimes necessary
NOT ACCEPTABLE:
βββ "I'll just start anyway"
βββ "The limit doesn't apply to urgent work"
βββ "I'll move it through quickly"
βββ These defeat the purpose
LEADERSHIP ROLE:
βββ Model respecting limits
βββ Don't pressure to break limits
βββ Celebrate constraint-following
βββ Address systemic bottlenecks
Handling Violations
WHEN LIMITS ARE EXCEEDED
ββββββββββββββββββββββββ
TEMPORARY BREACH:
βββββββββββββββββββββββββββββββββββββ
Sometimes work gets stuck:
βββ Blocker emerged after starting
βββ Urgent item must be added
βββ Handoff during transition
Response:
βββ Acknowledge the breach
βββ Don't add more until resolved
βββ Prioritize reducing back to limit
βββ Discuss in standup
CHRONIC BREACH:
βββββββββββββββββββββββββββββββββββββ
If column always over limit:
βββ Limit may be too low (rare)
βββ More likely: systemic issue
Investigate:
βββ Why is work stuck?
βββ What's the bottleneck?
βββ Is limit being respected?
βββ Are people helping each other?
Action:
βββ Address root cause
βββ Maybe adjust limit
βββ Re-commit to discipline
βββ Don't just raise limit to match reality
Tuning Limits
Finding the Right Level
WIP LIMIT TUNING PROCESS
ββββββββββββββββββββββββ
STEP 1: Start conservative
βββββββββββββββββββββββββββββββββββββ
βββ Set limits lower than comfortable
βββ Team will feel tension
βββ That's intentional
βββ Observe for 2-3 sprints
STEP 2: Observe behavior
βββββββββββββββββββββββββββββββββββββ
Too low if:
βββ People idle waiting
βββ Blocked with no backup
βββ Frustration high
βββ Helping each other constantly
Too high if:
βββ Never hitting limits
βββ No behavior change
βββ Still context switching
βββ No visibility improvement
STEP 3: Adjust incrementally
βββββββββββββββββββββββββββββββββββββ
βββ Change by 1-2, not 50%
βββ Wait 2 sprints to evaluate
βββ One change at a time
βββ Based on data, not complaints
STEP 4: Stabilize
βββββββββββββββββββββββββββββββββββββ
βββ When flow feels right
βββ Slight tension but not frustrating
βββ Bottlenecks visible
βββ Cycle time improving
βββ Keep these limits
Metrics to Watch
WIP LIMIT EFFECTIVENESS METRICS
βββββββββββββββββββββββββββββββ
CYCLE TIME:
βββββββββββββββββββββββββββββββββββββ
Before WIP limits: 7 days average
After WIP limits: 4 days average
Improvement: 43%
THROUGHPUT:
βββββββββββββββββββββββββββββββββββββ
Before: 12 items/sprint
After: 14 items/sprint
(Less WIP, same or more throughput)
QUALITY:
βββββββββββββββββββββββββββββββββββββ
Before: 5 bugs/sprint
After: 3 bugs/sprint
(More focus = fewer mistakes)
BLOCKED TIME:
βββββββββββββββββββββββββββββββββββββ
Before: Blockers hidden for days
After: Blockers visible immediately
Faster resolution
TEAM HEALTH:
βββββββββββββββββββββββββββββββββββββ
Before: Stressed, always juggling
After: Focused, completing work
Better morale
GitScrum Configuration
WIP Limit Setup
GITSCRUM WIP LIMITS
βββββββββββββββββββ
BOARD CONFIGURATION:
βββββββββββββββββββββββββββββββββββββ
Settings β Board β Columns
For each column:
βββ Enable WIP limit
βββ Set limit number
βββ Choose warning threshold
βββ Set blocking behavior
OPTIONS:
βββ Soft limit: Warning only
β Shows: β οΈ 5/4 (over limit)
β Allows adding
β
βββ Hard limit: Blocks adding
β Shows: π« 4/4 (at limit)
β Cannot add more
β
βββ Choose based on team discipline
VISUALIZATION:
βββββββββββββββββββββββββββββββββββββ
Column header shows: count/limit
βββ Green: Under limit
βββ Yellow: At limit
βββ Red: Over limit
βββ Visual cue for team
PERSONAL LIMITS:
βββββββββββββββββββββββββββββββββββββ
View β Filter by assignee
See each person's WIP
Alert if individual > 2 items in progress
Best Practices
For WIP Limits
Anti-Patterns
WIP LIMIT MISTAKES:
β Limits too high (no effect)
β Limits ignored when inconvenient
β Raised limits to avoid tension
β No enforcement mechanism
β Not helping each other finish
β Gaming (artificial task splits)
β Blocking columns with no action
β Never adjusting after initial set