Lean Software Development
While most of us might joke that Lean Software Development (a.k.a.: Lean) is a new way to lose unwanted pounds and keep them off, that wouldn't be far from the truth. Lean is a methodology that aims to trim the fat from the software process, starting with requirements, and including how business looks at the systems they request.
Derived from the Lean Manufacturing processes that companies such as Toyota have perfected over the past couple of decades, Lean's goal is to meet the challenge of defining, building, and delivering complex software systems that are exactly what the business really needs to stay competitive. Lean is similar to Scrum in that it focuses much more on the project management aspects of software development rather than the technical ones, specifically targeting the cost and ROI attributes of a project.
Lean pays a good deal of attention to gathering the "right" requirements. Requirements are measured based on their impact to the business, and must be defined in clear, complete, and verifiable ways. Incomplete, missing, wrong, unverifiable, and conflicting requirements are filtered out during the requirement process.
Due to this focus on requirements, the Customer plays an absolutely vital role in the Lean process. From a manufacturing point of view, it helps to think of Lean as being similar to new product development; this helps to crystallize the role and value that the Customer plays. Constant feedback from the Customer about the business value and functional requirements being addresses by the development team is a core component of the Lean approach.
Based on a wealth of quantitative metrics, Lean realizes that many projects fail due to their configuration and management. Projects with a silo'd, isolated, or "not my problem" attitude will face swift changes when Lean steps in. Lean attempts to also address resource issues such as the team not having the right skill sets, not enough team members, or too much turnover. In this sense Lean is very "root cause"-oriented.
Where some methodologies enforce strict definition between team roles, Lean prefers a more cross-functional approach. Team members are not only cross trained on functional and technical aspects of the system, they also team up with various team members to understand the business value for system features, and the business problems the system is expecting to solve.
Lean Manufacturing evolved from the work of Dr. W. Edward Deming's Total Quality Management (TQM), which can be boiled down to two main concepts:
- Process is important.
- People build and improve the process.
TQM has been refined for almost half a century now and has proven itself in the manufacturing realm. TQM is very metric intensive, and metrics play a big part of Lean Software Development as well.
A newer addition to the Lean Software Process is the Theory of Constraints (by Eliyahu M. Goldratt, et. al.), which is comprised of two primary tenants as well:
- Identify constraints.
- Improve/remove constraints.
The Theory of Constraints is a body of knowledge on how to effectively manage business organizations as self-contained systems.
Lean Software Development promotes seven Lean principles. The methodology revolves around these principles, and all other aspects of Lean are designed to reinforce them. The seven principles are:
- Eliminate Waste: Eliminate anything that does not add customer value.
- Build Quality In: Validate and re-validate all assumptions throughout the process. If a metric or practice no longer has value, discard it.
- Create Knowledge: Use short iterative cycles to provide quick, constant feedback to ensure the right things are being focused on.
- Defer Commitment: Don't make decisions until enough is known to make the decisiona sound understanding of the problem and the tradeoffs of potential solutions is required.
- Deliver Fast: Minimize the time it takes to identify a business problem and deliver a system (or feature) that addresses it. (a.k.a. time to market).
- Respect People: Empower the team to succeed.
- Optimize the Whole: Use cross-functional teams to keep from missing important, possibly critical aspects of the problem and of the system designed to solve it.
Again, since Lean focuses on the project management aspects of a project and specifies no technical practices, it integrates well with other Agile methodologies, such as XP, that focus more on the technical aspects of software development.