Lean development is the application of lean principles to software development. It was called the Toyota Production System because automaker Toyota invented this approach as a way to streamline its production of cars and eliminate wasted time and resources. Eventually, other manufacturing organisations began using this system, and the name later changed to Lean.
A lean organisation should have the following characteristics:
– See every problem and mistake as an opportunity to streamline processes
– Value the customer experience above everything else
– Promote a culture of problem-solving and open communication between the team, whereby employees feel valued and invested
– Limit waste
The seven principles of lean development are: eliminate waste, build quality in, create knowledge, defer commitment, deliver quickly, respect people, and optimise the whole.
In the book “Lean Software Development: An Agile Toolkit” Mary and Tom Poppendieck outlined how these lean principles can be applied to software development.
- Eliminate waste
The three sources of waste in software development are the addition of non-required features, project churn and crossing organisational boundaries (particularly between stakeholders and development teams). To reduce waste development teams must be allowed to self organise and operate in a manner that reflects the work they’re trying to accomplish.
Tom and Mary translated wastes from lean product development to the context of software development. Each of them should be eliminated to maximise customer value.
- Unnecessary code: delays time to customer, slowdown feedback
- Starting more than can be completed – adds unnecessary complexity to the system, results in context-switching, handoff delays and more
- Delay in the software development process – again delays time to customer and slows down feedback
- Unclear and changing requirements – they lead to loss of focus, frustration in employees, low quality work
- Slow/ineffective communication – delays, frustration, not doing the right thing and so on
- Partially done work – doesn’t add value to the customer or allow the team to learn
- Defects and quality issues – results in rework, abandoned work, and poor customer satisfaction
- Build in quality
In trying to ensure the quality, teams often create waste – through excessive testing, or and excessive logging of defects.
In lean development, quality is something everyone should take care of, not just the QAs.
These are some of the most popular lean development tools for building quality in:
- Pair programming – avoid quality issues by combining the skills and experience of two developers instead of one
- Test-drive development – writing criteria for code before writing the code to ensure it meets business requirements
- Incremental development and constant feedback
- Minimise wait states – reduce context switching, knowledge gaps, and lack of focus
- Automation – automate any tedious, manual process or process prone to human error
- Create knowledge
Planning is useful, but learning is essential.
This principle requires discipline and focus on implementing. It encourages Lean teams to provide the infrastructure to accurately document and retain valuable learning. This can be done by using the following tools:
- Pair programming
- Code reviews
- Thoroughly commented code
- Knowledge sharing sessions
- Tools to manage requirements
- Defer commitment
This lean principle encourages teams to take responsibility by keeping their options open and continuously collecting information, rather than making decisions without the necessary data. To defer commitment means to not plan (in excessive detail) for months in advance, to not commit to projects without a full understanding of the business requirements, and to collect and analyse the information regarding any important decisions.
- Deliver quickly
Every team wants to deliver to the customer as quickly as possible. And the question is what slows them down?
- Thinking too far in advance about future requirements
- Blockers that aren’t responded with urgency
- Over-engineering solutions and business requirements
Lean development is based on the concept to build a simple solution, put it in front of customers, and enhance incrementally based on customer feedback.
6. Respect people
This principle applies to every aspect of the way lean teams operate, from how they communicate, handle conflict, hire members, deal with problems, and more. Lean development teams encourage respect for people by communicating proactively and effectively and empowering each other to do their best work.
7. Optimise the whole
Mary and Tom Poppendieck describe two vicious cycles that Lean development teams often fall into:
I) When developers feel pressured to deliver, they release code that may not meet quality requirements. This increases the complexity of the code base, resulting in more defects. With more defects, there is more work to do, putting even more pressure on developers and so the cycle continues and doesn’t end.
II) When testers are overloaded, it creates a long cycle time between when developers write code and when testers can give feedback on it. This means that developers may write code that’s defective, resulting in more defects and therefore requiring more testing.
Optimising the whole is a lean development principle that encourages organisations to eliminate these sorts of cycles by operating with a better understanding of capacity and the downstream impact of work.
Should you use lean software development?
Lean can succeed in small projects with a short time frame. That’s because Lean teams are small and it is quite hard for them to manage large projects quickly. If you want to handle a big project, you have to coordinate the activities of two or more Lean teams .
However, this is not as simple as it sounds. In Lean, all activities of the team are based on communication. Two teams that work in different offices can often face communication challenges. Thus, it is better not to use Lean if your project is too complex and big.
It is also better not to use this methodology if your customer does not want to participate in the process of project realisation. Lean like any other Agile methodology, it involves its customers. It may seem inconvenient to them, but this is the only way to create a high-quality Lean product.
Many organisations think that lean software development methodology is an excellent approach to software development. But not any organisation should use this methodology, because it is not always the right one.
For example, if your software development project is very large and complex, it is better to use Waterfall methodology, as Waterfall teams are large and they do not require constant communication between their members.
So, when you’re choosing a methodology, think about what will best fit your project, team and customer. And don’t think about what’s popular at the moment.