Lean software development (LSD) took the best practices of lean manufacturing and applied them to software development. It aim to optimize processes and minimize waste during the software development process. Waste can be anything that increases time and effort, does not add business value for customers, and reduces the quality of the software system.
The ideas behind LSD not only complement agile software development methodologies, but they are also consistent with the core values of DevOps. There are seven lean development principles:
- Eliminate waste: Elimination of waste is important in lean processes. Unnecessary functionality, code, or effort is wasteful. Delaying the delivery of value to customers and inefficient processes are other examples of software development waste.
- Build quality in: Quality should be a focus for everyone. The writing of tests is one way to think about quality early in the process. The automation of tests helps to ensure that tests are automatically executed.
- Create knowledge: Team members should share knowledge within the team and across teams. Code reviews, documentation, pair programming, learning sessions, training, and collaboration tools can be used to teach and learn from others.
- Defer commitment: A decision should be made only after enough information has been collected to make a sound one.
- Deliver fast: Value should be delivered to customers quickly. This does not mean that the organization should do so recklessly, but rather that it should provide incremental changes reliably, quickly, and frequently.
- Respect people: As teams work together (and the individuals on those teams), they should do so in a respectful way. Communication and the handling of conflicts should be done in a respectful way.
- Optimize the whole: Processes should be optimized and bottlenecks should be eliminated when possible. Automation of tests, builds, and deployments are useful in optimization efforts.