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.
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:
In contrast, lean software development has seven key principles, which are adapted toward the less physical and more conceptual software development process.
Lean software development is based on the seven lean principles that the Poppendiecks highlight in their book:
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.
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.
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.
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.
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."
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.
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.
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.
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.
Lean software development is a powerful tool for helping developers looking to improve their processes. It can deliver several key benefits, including:
Here are some examples of situations where lean software development can be a powerful tool.
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.
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.
Get the latest resources from Scrum Alliance delivered straight to your inbox
Subscribe