Lean Product Development–White Paper Series– Part 1 of 3
To address frequent changes in business requirements during software product development, organizations resort to having more rigid processes in place to ensure adherence to cost and time estimates. These actions result in centralization of decision making, leading to further increase rigidity and delay in decision making. Changes to requirements may not be accommodated due to the loss of flexibility and the end result is delivery of a product that lacks some of the features that are now demanded by customers. Thus, a linear software development model that is so widely adopted (like waterfall methodology) does not permit iterative development and early testing. By the time requirements changes are evaluated for implementation, changes may need to be done in design. This can be expensive and time consuming. Applying principles of lean management to software product development can help overcome some of these challenges. Lean principles also help build a continuous improvement cycle within the process of new software product development.
Lean principles focus on eliminating waste, delivering value to customers, reducing cycle times, and implementing continuous process improvement initiatives. Once Lean principles are implemented, several benefits can be realized including:
- Reduction in costs through waste elimination and compressing/eliminating waiting time
- Reduced testing cycles with early testing during the development life cycle
- Continuous process improvement leading to reduction in the number of defects identified during testing
- More flexibility in dealing with changing requirements
- Improved team motivation through empowerment
This paper begins with an overview of the principles of lean software development. Subsequently we will highlight
how the application of Lean tools improves the product development process by examining their impact on various phases of the software product development life cycle.
1. RELATING LEAN PRINCIPLES TO SOFTWARE DEVELOPMENT
Mary and Tom Poppendieck enunciated the seven principles listed below for software development in their book ‘Implementing Lean Software Development: From Concept to Cash’:
Eliminate waste: Anything that does not add value to the customer is deemed wasteful. Lean principle advocates that organizations should learn to identify and eliminate waste. In software development, waste can include unwanted features in products, repeated cycles of testing, slack time between phases of the project (waiting for approvals or appropriate resources) and creating excess documentation.
Build in quality: Allow for integrity and testing to be carried out to provide feedback from end users to the team. If there are repeated cycles of testing, it indicates that the development process is not in order and requires to be fixed before proceeding further. Lean advocates an iterative development model that introduces testing early in the software development life cycle thereby eliminating discovery of defects late in the development life cycle and thus helps avoid costly fixes in the form of changes to design.
Create knowledge: Knowledge generation is done through feedback loops, iterations, synchronization and set based development. Feedback can be obtained from testing, getting customer response to the output and increasing the feedback loop to the development team. Iterations help obtain frequent feedback, allow the ability to “decide as late as possible,” prioritize high value items early and require team planning, short complete cycles and help achieve convergence. Synchronization permits development of multiple components using architecture matrix strategy. Set based development help solutions to emerge by communicating constraints.
Lean suggests that there should be interaction of the software development team with customers to get feedback early in the life cycle of product development. Set based development implies developing multiple options, communicating constraints and discovering a solution.
Defer commitment: Allowing decisions to be made as late as possible ensures that possible solutions are not eliminated early during the product development life cycle. This includes identifying the last possible moment for making decisions and making decisions after evaluating all alternatives/options. In product development life cycle, requirements are allowed to evolve over a period of time instead of insistence on “finalizing the requirements” in the beginning of the development cycle, as advocated by linear models of software development. In the idea generation phase of product development, not ruling out some of the ideas generated early can be valuable further down the process.
Deliver fast: This is required to satisfy customers who like rapid delivery. This can be accomplished by allowing people to be self-directed, reducing the cycle time, managing slack by eliminating or reducing the wait time between activities and highlighting the cost implications of delay in delivery.
Respect people: Team members need to be empowered by allowing them to determine for them the work processes and have in place a feedback loop between managers and the team members. They need to be motivated by providing them with clear, objective, and measurable goals with access to customers and management providing them support, guidance, resources and protection as required. The team also needs to have a leader to set direction, align people and enable motivation. Expertise must be fostered within teams and opportunities for continuous improvement should be provided. This can be accomplished by having a governance model that empowers the software product development team members to make decisions within the boundaries of the scope of work.
Optimize the whole: To be able to visualize the system as a whole and understand the nature of interactions between various components of the system and identify appropriate measures and metrics for performance measurements. This principle also promotes the system way of thinking during solution development. Comparing Lean Principles and Agile Methodology
On the surface, some of the Lean principles appear quite similar to what is suggested by Agile methodology of software development in that they advocate faster delivery, flexibility of accommodating changing requirements, defer commitment (keeping options open) and build quality in (advocating early testing). Lean, however has a broader view and takes the entire context of software development into account viewing Agile development methodology as supporting the practices advocated by Lean software development. Lean ideas provided a context for developing the tools that are used by Agile. Agile is often confused to mean “no documentation” whereas Agile recommends that “minimum documentation” be created keeping in mind the needs of the project. This is in line with the Lean concept of avoiding waste by doing away with excessive documentation and instead focusing on delivering software that can be tested for correctness and utility value. As described above, Lean can addresses all organizational functions and has an impact on the entire system.
In part 2 of Applying Lean Principles to Software Product Development we will cover how to incorporate Lean Principles into software Development, what the stakeholders responsibilities and what it takes to make it work.
Lean Software Development Resources: