Lean Software Development: The 7 Principles Explained
Turn this article into takeaways for your work.
Each assistant summarizes the article only for you and suggests best practices for your work.
Lean software development is a set of principles that adapts the thinking behind the Toyota Production System to how software teams plan, build, and ship code. Mary and Tom Poppendieck introduced it in their 2003 book "Lean Software Development: An Agile Toolkit," translating a manufacturing philosophy built to cut waste and shorten cycle time into seven principles a software team can put to work directly.
It isn't a process framework with defined roles and ceremonies the way Scrum is. It's a lens for spotting where value comes from and where it leaks out, meant to sit underneath whatever framework a team already runs.
Key Facts
- Mary and Tom Poppendieck introduced lean software development in "Lean Software Development: An Agile Toolkit," published by Addison-Wesley on 8 May 2003 and organized around seven principles and 22 supporting "thinking tools" (publisher page).
- The methodology borrows from the Toyota Production System's two pillars: jidoka, "automation with a human touch," and just-in-time production, making only what's needed, when it's needed (Toyota).
- Before writing the book, Mary Poppendieck built one of 3M's first just-in-time production systems and spent more than 25 years in IT (InformIT).
- Muda, the Japanese term for waste the book borrows from Toyota, is defined as "any activity that consumes resources without creating value for the customer" (Lean Enterprise Institute).
What Is Lean Software Development?
Lean software development takes a question that's central to manufacturing, "does this step add value for the customer, or is it waste?", and asks it about code, meetings, documentation, and handoffs. Anything that doesn't move a shippable feature closer to the customer is a candidate for removal.
That framing separates lean from Scrum and Extreme Programming (XP), both of which prescribe specific ceremonies or engineering practices. Lean prescribes almost nothing. It gives you seven principles and a set of thinking tools, then leaves the implementation to the team. That's why lean pairs so easily with other frameworks: it's a way of evaluating decisions, not a competing set of rituals.
Lean also predates most of what people now call "agile" in the software sense. The Agile Manifesto was signed in 2001, two years before the Poppendiecks published their book, but lean thinking about flow and waste had already been circulating in manufacturing and operations circles for decades. The Poppendiecks' contribution was translating it, not inventing it. Their framing is closely aligned with the values behind agile methodology in general: working software, fast feedback, and people over process.
From Toyota's Factory Floor to the Software Team
Lean's vocabulary, waste, flow, pull, kaizen, comes directly from the Toyota Production System (TPS), developed at Toyota over several generations starting with Sakichi Toyoda's automatic loom and refined by Kiichiro Toyoda, Eiji Toyoda, and Taiichi Ohno. TPS rests on two pillars. Jidoka means "automation with a human touch": a machine, or a person, stops the line the instant something goes wrong, rather than letting a defect travel further down the process. Just-in-time means making only what's needed, when it's needed, in the amount needed, instead of building up inventory against a forecast (Toyota).
Mary Poppendieck met this system firsthand. Before she wrote about software, she worked at 3M, where she built one of the company's first just-in-time production systems as an information systems manager in a manufacturing plant (InformIT). When she moved into software after retiring from 3M in 1998, she found that most software teams were still working the way factories worked before lean: batching requirements, building inventories of half-finished features, and treating defects as something to fix at the end rather than stop the line for. The book she and Tom wrote in 2003 is the translation of what she'd already learned on the factory floor.
The table below maps the core TPS concepts to their software equivalents, which is the shortest way to see why lean's vocabulary sounds unfamiliar to a team that's only ever worked in Scrum or Kanban terms.
| Toyota Production System concept | What it means on the factory floor | Software translation |
|---|---|---|
| Muda (waste) | Any activity that consumes resources without creating value for the customer | Code, meetings, or documentation that doesn't move a shippable feature closer to release |
| Jidoka | Automation with a human touch, the line stops the moment a defect appears | Automated tests and CI pipelines that block a merge the moment a regression shows up |
| Just-in-time | Make only what's needed, when it's needed, in the amount needed | Build only the features backed by a real, current requirement, in small batches, close to release |
| Kaizen | Continuous, incremental improvement made by the people doing the work | Retrospectives and refactoring owned by the team that writes the code, not a separate process office |
| Pull system | Downstream demand signals what upstream should produce next | Work is pulled into development when there's capacity, not pushed in on a fixed schedule |
The 7 Principles of Lean Software Development
The Poppendiecks organized their book around seven principles, each explained through a chapter of supporting "thinking tools." The publisher's own table of contents is the authority on what those chapters are called, and it names the last one "See the Whole" (Addison-Wesley). Secondary write-ups agree on the first six names and on the substance of all seven, but the wording drifts on the last one: many render principle 7 as "Optimize the Whole" (example). Some later training materials go further and swap in a "Respect People" principle borrowed from the Poppendiecks' 2006 follow-up, "Implementing Lean Software Development," which renamed several of the original seven (source). This article uses the 2003 chapter names and flags the variants where they matter.
1. Eliminate Waste
Anything that doesn't directly serve the customer is waste, whether that's a half-built feature sitting in a branch for three sprints or a requirements document nobody reads past the first page. The practice: run a value stream map of how a request moves from idea to production, and cut every step that doesn't add value.
2. Amplify Learning
Software development is a learning process, not a manufacturing run. Every iteration is a chance to find out whether the last assumption was right. The practice: short iterations, working code in front of real users early, and decisions recorded so the same lesson doesn't have to be relearned next quarter.
3. Decide as Late as Possible
Locking in a decision before you have the information to make it well is expensive to reverse. Keeping options open, known as set-based development, costs more up front but avoids costly rework later. Software example: postponing a database or vendor choice until load testing reveals the real constraints, instead of committing at kickoff because someone wanted an answer on day one.
4. Deliver as Fast as Possible
Speed exposes problems that batching hides. A team that ships weekly finds out fast whether a feature was worth building; a team that ships quarterly finds out four times slower, and pays for four quarters of assumptions instead of one. The practice: small batch sizes, pull-based flow, and short cycle time treated as a first-class metric.
5. Empower the Team
The people closest to the work make better local decisions than a manager several layers removed from the code. Empowerment means giving the team real authority over how work gets done, not just a say in the retrospective. The practice: self-organizing teams, technical leadership sourced from within the team, and management that removes obstacles instead of assigning tasks.
6. Build Integrity In
Integrity has two halves here. Perceived integrity is whether the product feels coherent to the person using it. Conceptual integrity is whether the architecture underneath actually holds together. Both erode without deliberate maintenance. The practice: continuous refactoring, automated testing, coding standards, and a shared definition of done the whole team honors, not just the person who wrote the code.
7. See the Whole (often rendered "Optimize the Whole")
Local optimization is a trap. A team that maximizes its own throughput can still slow the organization down if the bottleneck sits somewhere else in the value stream, like a security review queue or a shared QA environment. The practice: measure end-to-end lead time from request to production, not just sprint velocity, and negotiate contracts between teams instead of optimizing in isolation.
| Principle | Software practice | Concrete example |
|---|---|---|
| Eliminate waste | Value stream mapping, backlog pruning | Killing a feature branch that's sat unmerged for two sprints instead of finishing it "just in case" |
| Amplify learning | Short iterations, TDD, retrospectives | Shipping a feature flag to 5% of users before building the full rollout |
| Decide as late as possible | Set-based development, spike solutions | Trying two caching approaches in parallel before committing to one at scale |
| Deliver as fast as possible | Small batches, continuous delivery | Releasing daily instead of bundling six weeks of changes into one deploy |
| Empower the team | Self-organization, distributed technical leadership | Letting the team that owns a service choose its own on-call rotation and tooling |
| Build integrity in | Refactoring, automated testing, coding standards | Blocking a merge automatically when test coverage drops below an agreed threshold |
| See the whole | Value-stream metrics, cross-team contracts | Tracking lead time from ticket creation to production, not just story points closed per sprint |
The 7 Wastes of Software Development
Muda, the waste that principle one asks you to eliminate, isn't one thing. The Poppendiecks broke it into seven categories, translated from the manufacturing wastes Toyota already tracked. A detailed breakdown of the book's first chapter lists them as partially done work, extra processes, extra features, task switching, waiting, motion, and defects (source). Other write-ups swap in relearning, handoffs, and delays for extra processes, waiting, and motion; the substance overlaps heavily even where the exact seven labels differ.
| Waste | What it looks like in software | Why it costs you |
|---|---|---|
| Partially done work | Code that's written but not tested, tested but not merged, merged but not deployed | It's inventory. It ties up effort and tells you nothing about whether it actually works until it's finished |
| Extra processes | Sign-off steps, documentation, or approvals that exist because "that's how we've always done it" | Every extra process adds lead time without adding customer value |
| Extra features | Functionality built because someone asked for it, never touched once it shipped | Every unused feature is effort spent on something with zero return, and it's now a maintenance liability |
| Task switching | Developers juggling three tickets at once because priorities keep shifting | Context switching has a real cost. Each switch burns time re-loading context that was already in someone's head |
| Waiting | A pull request sitting for two days because the one reviewer who can approve it is out | Waiting is dead time in the value stream, and it compounds across every handoff in the process |
| Motion | Bouncing a task between three people to get one answer, or hunting across four tools to find a spec | It's the software equivalent of walking across the factory floor for a part that should've been at the workstation |
| Defects | Bugs found in production that should have been caught earlier | A defect caught in production costs far more to fix than the same defect caught in code review, because it interrupts someone else's current work too |
The 22 Thinking Tools
Each of the seven principles comes with a set of "thinking tools," 22 in total, that the Poppendiecks use to make the principle concrete rather than aspirational. You don't need to adopt all 22 to practice lean; most teams pick up two or three tools per principle and build from there.
| Principle | Thinking tools |
|---|---|
| Eliminate waste | Seeing waste, value stream mapping |
| Amplify learning | Feedback, iterations, synchronization, set-based development |
| Decide as late as possible | Options thinking, the last responsible moment, making decisions |
| Deliver as fast as possible | Pull systems, queuing theory, cost of delay |
| Empower the team | Self-determination, motivation, leadership, expertise |
| Build integrity in | Perceived integrity, conceptual integrity, refactoring, testing |
| See the whole | Measurements, contracts |
Source for the tool groupings above: williammeller.com's chapter breakdown.
Lean Software Development vs Kanban vs Agile
Lean, Kanban, and agile methodology sit at different altitudes, and teams frequently run all three at once without realizing it.
Lean is the philosophy: eliminate waste, optimize the whole, decide late. Kanban is one concrete way to practice several lean principles at once, particularly deliver fast and eliminate waste, through visualized flow and WIP limits that cap how much work is in progress at any point. A cumulative flow diagram is where the "waiting" and "partially done work" wastes actually become visible: a widening band on the chart is inventory building up in a stage of the pipeline. Agile methodology, and frameworks like Scrum built on top of it, add cadence, roles, and ceremonies that lean deliberately doesn't prescribe.
| Dimension | Lean software development | Kanban | Scrum |
|---|---|---|---|
| What it is | A set of principles, not a process | A flow-based method with visualized work and WIP limits | A prescriptive framework with defined roles and ceremonies |
| Origin | Toyota Production System, via the Poppendiecks' 2003 book | Toyota Production System, via David Anderson's software adaptation | Software process framework, formalized in the Scrum Guide |
| Prescribes roles | No | No | Yes (Product Owner, Scrum Master, Development Team) |
| Cadence | None prescribed | Continuous flow, no fixed iterations | Fixed-length sprints |
| Core unit of measurement | End-to-end lead time, waste eliminated | Cycle time, WIP | Velocity, sprint burndown |
| Works well combined with | Almost anything, it's a lens not a competing ritual set | Scrum (as Scrumban), lean itself | Lean thinking, XP engineering practices |
Teams that can't decide between flow-based and iteration-based work often land on Scrumban, which keeps Scrum's cadence but borrows Kanban's WIP limits and pull system. For a closer look at how the two flow-based and iteration-based approaches differ in practice, see Scrum vs Kanban.
Lean also shares DNA with the engineering-focused methods it often runs alongside. Extreme Programming operationalizes "build integrity in" almost directly, with TDD, refactoring, and continuous integration as its core practices. Feature-Driven Development takes a different piece of lean thinking, small batches delivered fast, and organizes an entire process around shipping features in short, trackable increments. Neither replaces lean; both are ways of implementing pieces of it.
Where Lean Software Development Fits and Where It Fails
Lean's strength is also its limitation: because it's a set of principles rather than a process, it gives a mature team room to optimize and gives an immature team nothing to hold onto.
| Fits well | Struggles |
|---|---|
| Teams that already run Scrum, Kanban, or XP and want a lens for continuous improvement | Teams with no existing process, since lean has no ceremonies or roles to start from |
| Organizations with a visible, traceable value stream from request to release | Organizations where the value stream crosses many teams with no shared ownership of the whole |
| Contexts where requirements genuinely change and late decisions save rework | Fixed-price, fixed-scope contracts where late decisions create legal and billing friction |
| Teams empowered to change their own process | Command-and-control cultures where "empower the team" conflicts with how the organization actually runs |
| Products with a real feedback loop from users back to the team | Long approval chains or regulated environments where feedback loops are inherently slow |
The contrast with Waterfall is instructive here. Waterfall front-loads decisions and treats change as a deviation to be controlled. Lean treats early decisions as a risk to be deferred wherever possible. Neither is wrong in every context, and the trade-offs are covered in more depth in Agile vs Waterfall, but a team running lean inside a Waterfall-governed program will feel the friction almost immediately.
How to Adopt Lean Software Development Without Cargo-Culting Toyota
Cargo-culting lean means adopting its vocabulary, kanban boards, kaizen events, "waste" as a buzzword, without changing how decisions actually get made. Here's a sequence that avoids that trap.
Step 1: Map the value stream once, honestly
Before removing anything, trace one real request from the moment it's approved to the moment it's in production. Write down every handoff, every wait, every approval. Most teams are surprised by how much of the total time is waiting, not working.
Step 2: Pick one waste and remove it
Don't try to eliminate all seven wastes at once. Pick the one costing the most time on the map from step 1, often it's waiting or partially done work, and fix that first. A visible win builds the case for the next change.
Step 3: Shrink batch size before you add process
Smaller releases surface problems faster and make each individual change easier to reason about. Before adding a new review step or approval gate, try shrinking the batch size of what you ship. Often that alone removes the pressure that made the extra process feel necessary.
Step 4: Push decisions to the last responsible moment, not to never
Deciding late isn't the same as not deciding. Set-based development still ends in a decision, it just makes that decision with more information. Teams that use "decide as late as possible" as an excuse to avoid committing at all aren't practicing lean, they're avoiding accountability.
Step 5: Measure the whole, not your team's slice
Track lead time from request to production across the entire value stream, not just your team's part of it. If one team's velocity is climbing while the overall lead time isn't improving, the bottleneck moved somewhere else, and that's the next thing to fix.
Common Mistakes Teams Make with Lean Software Development
| Mistake | Why it happens | Fix |
|---|---|---|
| Treating "eliminate waste" as a mandate to cut testing or documentation | Waste gets confused with anything that isn't code | Ask whether the activity creates value for the customer, not whether it feels slow. Tests and docs that prevent rework are not waste |
| Running a kanban board without ever measuring lead time | The visual board feels like the whole practice | Track cycle time and lead time from the start. The board is a tool, not the goal |
| Optimizing one team's velocity while the org-wide lead time stays flat | Local metrics are easier to see and easier to celebrate | Adopt an end-to-end value stream metric that spans every team the work passes through |
| Using "decide as late as possible" to avoid ever committing | Deferring decisions is easier than making them | Set an explicit last responsible moment for each decision, and hold to it |
| Adopting lean vocabulary without changing authority or process | Kaizen events and waste-spotting exercises are easy to run once and forget | Give the team real authority to act on what it finds, or the exercise becomes theater |
Frequently Asked Questions about Lean Software Development
What is lean software development in simple terms?
It's a way of applying Toyota's manufacturing thinking, cutting waste, shortening cycle time, deferring decisions until you have real information, to how software gets built. Mary and Tom Poppendieck introduced it in 2003 as seven principles rather than a fixed process.
Who created lean software development?
Mary and Tom Poppendieck, in their 2003 book "Lean Software Development: An Agile Toolkit." Mary had already applied lean thinking in manufacturing at 3M before she and Tom translated it for software teams.
What are the seven wastes of software development?
Most write-ups list partially done work, extra processes, extra features, task switching, waiting, motion, and defects, though some sources substitute relearning, handoffs, and delays for a few of those labels. All versions trace back to the same idea: anything that consumes effort without moving toward a shippable feature is waste.
Is lean software development the same as Agile?
They're related but not identical. The Agile Manifesto (2001) and lean software development (2003) share values like fast feedback and working software, but lean is a set of underlying principles about waste and flow, while agile frameworks like Scrum add specific roles, ceremonies, and cadence on top.
How does lean relate to Kanban?
Kanban is one concrete implementation of several lean principles, especially eliminate waste and deliver fast, through visualized work and WIP limits. Lean is the broader philosophy; Kanban is a specific method that puts a few of its principles into daily practice.
Do I need to adopt all 22 thinking tools to practice lean?
No. Most teams start with two or three tools tied to whichever principle addresses their biggest problem right now, often value stream mapping or set-based development, and add more as they find a real need for them. The 22 tools are a toolkit, not a checklist.
Lean software development doesn't hand a team a sprint calendar or a board template. It hands them a question to ask about every decision: does this create value for the customer, or is it waste dressed up as process? Teams that keep asking that question, honestly, tend to end up with less ceremony and more shipped software, regardless of which framework they layer on top.

Senior Operations & Growth Strategist
On this page
- What Is Lean Software Development?
- From Toyota's Factory Floor to the Software Team
- The 7 Principles of Lean Software Development
- 1. Eliminate Waste
- 2. Amplify Learning
- 3. Decide as Late as Possible
- 4. Deliver as Fast as Possible
- 5. Empower the Team
- 6. Build Integrity In
- 7. See the Whole (often rendered "Optimize the Whole")
- The 7 Wastes of Software Development
- The 22 Thinking Tools
- Lean Software Development vs Kanban vs Agile
- Where Lean Software Development Fits and Where It Fails
- How to Adopt Lean Software Development Without Cargo-Culting Toyota
- Step 1: Map the value stream once, honestly
- Step 2: Pick one waste and remove it
- Step 3: Shrink batch size before you add process
- Step 4: Push decisions to the last responsible moment, not to never
- Step 5: Measure the whole, not your team's slice
- Common Mistakes Teams Make with Lean Software Development