Lean
Definition
Lean software development adapts lean manufacturing (efficiency, just-in-time for the end customer) to software: produce only what is required, guided by seven principles and 22 supporting tools.
Core Ideas
The seven principles
- Eliminate waste — learn to see waste, then reduce it. Software waste includes partially done work, extra/unused features, waiting, task switching, hand-off delays, extra processes (red tape), and defects.
- Amplify learning — keep asking why; understand purpose over literal requirements; short feedback loops and iteration.
- Defer commitment — options thinking; decide at the last responsible moment rather than up front.
- Deliver fast — pull systems (Kanban), queuing theory, and cost of delay; rapid delivery gives customers less time to change their minds.
- Empower the team — self-determination, motivation, leadership, expertise.
- Build quality in — perceived vs conceptual integrity, refactoring, and testing (customer tests: functional/acceptance; developer tests: unit/system/integration).
- Optimise the whole — ask the “5 whys,” use measurements (e.g. burndown charts), and the Theory of Constraints; avoid local optimizations that hurt the system.
Set-based vs point-based development
Explore several design options under constraints rather than committing early to one solution — this defers commitment and improves the design process.
Relationships
- Kanban — the pull-system, just-in-time tool at lean’s core
- Agile — lean and agile share feedback, iteration, and empowered teams
- System Thinking — “optimise the whole” is systems thinking applied to delivery
- Agile and Team Processes