Lean Software Development is a paradigm which describes a theoretical ideal set of circumstances for software creation. It's important to think of Lean Software Development as just one of many software development theories, each with their pros and cons. When using the Lean Software Development model, there are seven crucial points to understand: eliminate waste, amplify learning, late decision making, fast delivery, team empowerment, integrity building, and visualization of the whole.
Elimination of waste is both a time and money saving objective. By reducing the amount of surplus code and superfluous features in Lean Software Development, the software development team saves money and delivers tighter code to the end-user. Thus, programs created using the Lean Software model are less resource-intensive and more focused.
Learning amplification in Lean Software Development refers to the concept of using short cycles between testing phases. In theory, this provides more constant feedback to the engineers, in turn, allowing for problems to be identified earlier in the development chain. The end-users are included in these phases, ensuring that the beta versions of the program are meeting their needs.
Late decision making allows for additional flexibility in the design schedule, enabling decisions to be made only once the maximum number of facts have been collected. For example, deciding prior to beginning development that Program X should have Features A, B, and C might seem like a good idea, until on-the-ground testing reveals that those features are not possible to complete on time. In Lean Software Development, the decision to include A, B, and C would be delayed until it was certain whether it was actually possible.
Fast delivery refers to a preference for providing the end-user with a working beta model as quickly as possible — possibly when the program is 85 to 90 percent complete — and continuing to patch and upgrade that model over the life of the program. This contrasts with waiting until the program is 100 percent complete and delivering it then. In theory, this allows the end-user to squeeze more life out of the program, along with allowing the development team additional feedback from the working beta models.
Team empowerment means giving the team more autonomy during the programming process. As a result, they will theoretically become more invested in the project. Additionally, it means providing them with access to the customers, more closely matching expectations to actual delivery.
Finally, integrity building and seeing the whole focuses on viewing the program as a single unit. Contrast this with other systems, which view a program as a patchwork collection of different systems. This "big picture" way of thinking theoretically provides a more complete product, as the entire team is on the same page when it comes to the finished product.