Lean is founded on a fundamental principle: Eliminate Waste. Anything that does not add value for a customer is waste. Making something that is not immediately needed, extra processing steps and software defects are all examples of waste.
Using techniques such as Value Stream Mapping, Lean can help identify those things that add value to the business and those that do not. By removing process steps or changing the way an activity is performed to add customer value more quickly, moves the organisation towards greater efficiency.
Agile software delivery relies on frequent small iterations to a product that is continuously evaluated and developed. Teams are self-organising and adapt their processes to maximise output. This creates a friction with traditional software development life cycles, particularly in the areas of design, planning and reporting.
The Agile approach is simpler and more effective because the development team focuses on what the process is trying to achieve and not the mechanisms, artifacts, and process steps set by a development methodology – this can be a hard message to swallow in established governance and planning departments embedded in large organisations.
So how can Lean help Agile?
Lean shares a common philosophy with Agile but it addresses issues across the organisation, not just in software delivery. Lean aims to create more value for less work; eliminating wasteful activities and enabling teams to focus on delivering benefit. It enables organisations to plan according to demand. It promotes a planning cycle that's much closer to delivery: planning for small pieces of work, delivering it, and then planning the next piece. By focusing on the whole organisation, changing its structure, its processes and its whole attitude to value and waste, creates an environment that is consistent with, and encourages the use of Agile development methods. With Lean, Agile can thrive rather than struggle to survive.
Using Lean thinking you can identify seven typical areas of waste in software delivery:
- Partially Done Work. Projects are of no value until they are delivered. Work is carried out on requirements defined early in the project. When priorities change this work done is wasted. De-prioritised and partially complete functionality then gets in the way of more important requirements.
- Extra Processes. Many processes surrounding software development are based on waterfall methods designed for long project lifecyles. The Agile principle of valuing interactions over process means many processes are unnecessary.
- Extra Features. Have you ever compared the features built in a software product against the features actually used? Features are often replicated from previous systems because it is ‘what we had before’. An Agile approach allows you to identify features of most value and deliver them first.
- Task Switching. Traditional project structures often have resources working on multiple projects. Agile increases effectiveness of individuals through small dedicated teams.
- Waiting. Delay keeps the customer from realising value as quickly as possible. Benefit delay is inevitable in traditional waterfall projects as requirements are batched into large groups to make the process effective. Agile delivers each requirement at a speed aligned to the specific requirement value.
- Motion. The effort to find an answer to a query is significantly reduced through the working practices of Agile. Co-location with the business and valuing interactions over process means the answer can often be found within the direct team.
- Defects. You only know there are defects when you find them and fix them. The longer a defect stays in software the more wasteful it is. Finding defects early can be done through testing early, removing them and then releasing; a key feature of Agile.
Identifying and eliminating these wasteful activities enables the Agile team to be more effective, work closer with the business and deliver more value for less effort.