In Implementing Lean Software Development, Mary and Tom
Poppendieck show how the seven principles of lean manufacturing can be applied
to optimize the whole IT value stream. These principles are:
Lean thinking is important for scaling agile in several ways:
- Eliminate waste. Lean thinking advocates regard any activity that does not directly add value to the finished product as waste. The three biggest sources of waste in software development are the addition of unrequired features, project churn and crossing organizational boundaries (particularly between stakeholders and development teams). To reduce waste it is critical that development teams be allowed to self organize and operate in a manner that reflects the work they're trying to accomplish. Walker Royce argues in "Improving Software Economics" that the primary benefit of modern iterative/agile techniques is the reduction of scrap and rework late in the lifecycle.
- Build in quality. Your process should not allow defects to occur in the first place, but when this isn't possible you should work in such a way that you do a bit of work, validate it, fix any issues that you find, and then iterate. Inspecting after the fact, and queuing up defects to be fixed at some time in the future, isn't as effective. Agile practices which build quality into your process include test driven development (TDD) and non-solo development practices such as pair programming and modeling with others.
- Create knowledge. Planning is useful, but learning is essential. You want to promote strategies, such as iterative development, that help teams discover what stakeholders really want and act on that knowledge. It's also important for a team to regularly reflect on what they're doing and then act to improve their approach.
- Defer commitment. It's not necessary to start software development by defining a complete specification, and in fact that appears to be a questionable strategy at best. You can support the business effectively through flexible architectures that are change tolerant and by scheduling irreversible decisions to the last possible moment. Frequently, deferring commitment requires the ability to closely couple end-to-end business scenarios to capabilities developed in multiple applications by multiple projects.
- Deliver quickly. It is possible to deliver high-quality systems quickly. By limiting the work of a team to its capacity, which is reflected by the team's velocity (this is the number of "points" of functionality which a team delivers each iteration), you can establish a reliable and repeatable flow of work. An effective organization doesn't demand teams do more than they are capable of, but instead asks them to self-organize and determine what they can accomplish. Constraining these teams to delivering potentially shippable solutions on a regular basis motivates them to stay focused on continuously adding value.
- Respect people. The Poppendiecks also observe that sustainable advantage is gained from engaged, thinking people. The implication is that you need a lean governance strategy that focuses on motivating and enabling IT teams---not on controlling them.
- Optimize the whole. If you want to be effective at a solution you must look at the bigger picture. You need to understand the high-level business processes that individual projects support---processes that often cross multiple systems. You need to manage programs of interrelated systems so you can deliver a complete product to your stakeholders. Measurements should address how well you're delivering business value, because that is the sole reason for your IT department.
Lean thinking is important for scaling agile in several ways:
- Lean provides an explanation for why many of the agile practices work. For example, Agile Modeling's practices of light weight, initial requirements envisioning followed by iteration modeling and just-in-time (JIT) model storming work because they reflect deferment of commitment regarding what needs to be built until it's actually needed, and the practices help eliminate waste because you're only modeling what needs to be built.
Lean offers insight into strategies for improving your software process. For example, by understanding the source of waste in IT you can begin to identify it and then eliminate it.
Lean principles provide a philosophical foundation for scaling agile approaches.
- It provides techniques for identifying waste. Value stream mapping, a technique common within the lean community whereby you model a process and then identify how much time is spent on value-added work versus wait time, helps calculate overall time efficiency of what you're doing. Value stream maps are a straightforward way to illuminate your IT processes, providing insight into where significant problems exist. I've created value stream maps with several customers around the world where we analyzed their existing processes which some of their more traditional staff believed worked well only to discover they had efficiency ratings of 20-30%. You can't fix problems which you are blind to.