What Is Lean Software Development?

Optimize efficiency, reduce waste, and deliver high-quality software
A blue graphic showing the abstract concept of lines of code and a photo of a person's hands typing on a keyboard

Reviewed by Raúl Herranz (CST, CSP-D, CSP-SM, CSP-PO, A-CSD, A-CSM, CSD, CSM, CSPO)

Lean software development is an approach focused on creating high-quality software efficiently with minimum waste. It started as an adaptation of the lean manufacturing principles to software development. Lean software development shares many principles in common with scrum and other agile frameworks, but its unique origin gives it a different flavor.

Lean software development is a robust approach with numerous successful deployments. It can help companies succeed in the highly competitive modern software market through efficiency, quality production, and speed. 

What is the history of lean software development?

Lean software development was developed by adapting lean manufacturing practices to software development. 

The original book describing the framework is "Lean Software Development: An Agile Toolkit" (2003) by Mary Poppendieck and Tom Poppendieck. Although the Poppendiecks did not attend the formative 2001 gathering in Snowbird, Utah, that led to the Agile Manifesto, their ideas found ready acceptance in the agile community. 

The Poppendiecks derived their ideas for lean software development from the concepts in lean manufacturing. Mary Poppendieck worked in manufacturing before moving into a software development context, where she encountered the traditional "waterfall" development process. She decided that this method was inferior to the lean manufacturing process she'd been exposed to in her manufacturing plant experience. 

In adapting lean manufacturing principles to software development, the Poppendiecks linked their approach to agile principles.

Some people want to diminish the Poppendiecks' contribution to a simple restatement of lean principles, but Mary and Tom reframed the lean concept for use in a software development environment. This is perhaps most clearly visible in the fact that lean manufacturing traditionally has five principles, some of which derive from the genuine physicality of the manufacturing plant. These principles may be stated using the 1996 conceptualization of James Womack and Daniel Jones as:

  • Define value: Define value according to the customer's desires. 
  • Identify the value stream: Figure out which steps in the production process truly add value to the product and challenge each step that doesn't add value.
  • Flow: Make the product flow continuous only through value-added steps.
  • Pull: Introduce pull between all value-added steps as continuously as possible.
  • Perfection: Constantly reduce the number of steps and the amount of information needed to serve the customer's needs. 

In contrast, lean software development has seven key principles, which are adapted toward the less physical and more conceptual software development process. 

Principles of lean software development

Lean software development is based on the seven lean principles that the Poppendiecks highlight in their book:

  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

These principles are not always stated using these original words. Where they tend to go by a different name in modern software development contexts, we will note the more commonly used nomenclature. 

Eliminate waste

Waste is anything that doesn't add value to a product. As in lean manufacturing, value is determined not in the mind of the developer, but in the mind of the customer. This isn't just about the value of the product, either, it factors in the temporal dimension. Anything that gets in the way of rapidly satisfying a customer need is waste.

Amplify learning

This is one of the key areas where lean software development deviates from lean manufacturing. The Poppendiecks contrast development as "an exercise in discovery" with manufacturing as "an exercise in reducing variation." Since discovery depends on creativity, knowledge, and experimentation, lean software development is supposed to produce multiple iterations of an idea as part of a learning process. 

Decide as late as possible

This is how the lean approach manages the uncertainty inherent in any process as complex as software development. Given that there are many levels of uncertainty inherent in any software development project (e.g. lack of clarity from customers, unknown progress of competitors, untested capabilities of hardware, etc.), it makes sense to avoid committing to one development course until absolutely necessary. This avoids doing work based on potentially faulty assumptions that may have to be redone once more certain knowledge comes to light. 

Deliver as fast as possible

Traditional software development often emphasizes the need to avoid making any mistakes. This makes sense given the fact that a lot of early software was used for applications where mistakes could be dangerous and/or incredibly expensive, such as space missions. As software became more widespread, speed became more valuable for many reasons. 

Speedy development minimized the time between when customers delivered specifications and when they received their software, reducing the risk that the software would be obsolete by the time it was delivered. In addition, speedy delivery allows for more of what the Poppendiecks described as "discovery cycles": "Design, implement, feedback, improve."

Empower the team

Successful software development depends on managing numerous details precisely and correctly. Since no one knows the details of the software like the developers, they should be trusted with making many of the important decisions about how to proceed. Not only that but having decisions made by a central authority slows the process—and creates waste—because of time spent sending inquiries and waiting for replies. 

Build integrity in

Often rephrased as "build quality in," the original conception of lean software development saw integrity as a kind of intuitive design that perfectly mirrors a user's desires. Integrity is also supposed to make the software adaptable, extensible, and maintainable. 

See the whole

Often rephrased as "optimize the whole," or "improve continuously," the impetus to see the whole comes from the potential for numerous defects that can come from breaking a large project into smaller pieces or having multiple organizations working on a project together but separately. By fostering healthy competition between groups, management can achieve outstanding productivity between the different teams. 

Choosing when lean software development is appropriate

Lean software development is an agile framework that works well in some situations but might not be appropriate in others. Deciding when it's appropriate to deploy this framework depends on understanding its benefits and shortcomings.

Benefits of lean software development

Lean software development is a powerful tool for helping developers looking to improve their processes. It can deliver several key benefits, including:

  • Efficiency. Lean software development works to eliminate waste whenever possible, creating a process that delivers maximum value for minimum cost.
  • Allows greater flexibility. By empowering the development team and deferring commitment, lean software development lets the process pivot rapidly with shifting priorities.
  • High capacity to satisfy customers. Lean software development is focused on meeting customers' needs. By defining value in customers' terms, deferring commitment until customers know what they want, and delivering rapidly, lean software development is more likely to deliver what the customer wants when they need it.
  • Encourages learning and growth. By emphasizing learning and continuous improvement, lean software development improves not only the software but also the team's interactions and collaboration.

Best applications for lean software development

Here are some examples of situations where lean software development can be a powerful tool. 

  • Startups often benefit from lean software development because it makes the most of limited resources and allows them to deliver demonstrable products to satisfy current backers and win new investors. It also helps what may be talented but inexperienced employees build skills and confidence. 
  • Uncertain environments are a great place to deploy lean software development because the process allows for a high degree of flexibility. It's especially effective in situations where customers can't define what they want until they can see a product—short discovery cycles make it easy to iterate to the goal.
  • Institutions mired in inefficiency can be reinvigorated by lean software development's waste-eliminating approach. Firms with successful products that struggle to be profitable should consider whether the lean approach might help them as it helped American automakers who emulated the Toyota Production System.

Lean software development was originally developed by adapting the principles of lean manufacturing to a software development context. Lean software development has found a ready audience within the agile community. With seven key principles, lean software development can become more efficient and faster while delivering products that better meet their customers' needs. 

Although the approach isn't right for every organization, this agile framework offers many potential benefits for developers that can be critical when judiciously deployed. 

Scrum developer certification

Interested in learning more about agile development techniques and earning a certification to showcase your knowledge? Check out the Certified Scrum Developer® path to learn from global leaders in agile software development.

Explore the scrum developer track

RL_592_lean-software-development
Stay Connected

Get the latest resources from Scrum Alliance delivered straight to your inbox

Subscribe