Lean software development embodies seven main principles, as outlined in the book, “Implementing Lean Software Development: From Concept to Cash,” by Mary and Tom Poppendieck. First published in 2006, the Poppendiecks’ multiple works on lean remain topical still today as more IT teams continue to implement the lean methodology year-after-year. Each of the seven principles outlined in the book contributes to lean out software development by reducing waste and optimizing the process.
1. Eliminate Waste
Waste is anything that does not contribute value to the final product and interferes with the aim of delivering value to customers. This includes, but is not limited to, inefficient processes or project churn, crossing boundaries/departments, and features that won’t be used. Eliminating waste is the guiding principle in lean software development.
2. Build Quality In
Building quality into a product means preventing defects by seeking them out within your verification process rather than using post-implementation integration and testing to detect them after the fact. Not building legacy code that lacks automated unit and acceptance tests is crucial to continuous integration and nested synchronization.
3. Create Knowledge
While planning is useful, it is learning that is essential. Encourage developers to build and record the knowledge necessary to develop a project. This should comprehensively include all requirements, architecture, and technologies, which are seldom known or understood completely at project startup. Creating knowledge and recording it over the course of the project ensures that the final product is in line with customer expectations.
4. Defer Commitment
Reject the idea that projects should begin with a set plan for the specification. Planning is not the same as committing. Deferring commitment is positive procrastination as more information is available at the latest possible moment before an irreversible decision needs to be made.
5. Deliver Fast
Delivering fast puts the product in front of the customer quickly so they can provide feedback, allowing companies to take a more experimental approach to product/feature development. Fast delivery is accomplished using short iterations that produce software in small increments by focusing on a limited number of the highest priority requirements.
6. Respect People
Respecting people means giving the development team’s most important resource — its members — freedom to find the best way to accomplish a task, recognizing their efforts, and standing by them when those efforts are unsuccessful. Engaged team members are a company’s most sustainable competitive advantage.
7. Optimize the Whole
Optimizing the whole development process generates better results than optimizing local processes in isolation, which is usually done at the expense of other local processes. Brilliant products are often the result of a unique combination of technology and opportunity which is afforded by a lean software development process.
Lean vs. Agile
Comparing lean and agile software development reveals they share many characteristics, including the goal of quick delivery of value to the customer, but they differ in two significant ways: scope and focus. The narrow scope of Agile focuses on processes and people through its methodology of flexibility, communication, collaboration, and simplicity. Lean focuses on the bigger picture: the context in which development occurs, delivering value quickly by focusing on the elimination of waste, and improving the workflow. As it turns out, they are complementary, and real-world processes often draw from both.
Lean vs. DevOps
DevOps recognizes that to optimize software development, the walls between development and operations must be broken down. Instead of development work pushing constraints downstream to operations, DevOps shares the same lean goal of helping to accelerate the value-creating processes of IT organizations by improving the speed, productivity, and quality of value delivery by optimizing workflow. DevOps integrates a lot of lean principles, focusing on improving the cultural as well as the technical collaboration between developers and operations.