The application of Lean concepts to software development is known as lean development. Lean principles originated in manufacturing to optimize the production system and process to reduce waste and increase customer value. Lean is a methodology focused on maximizing value delivery, eliminating waste, and continuously improving processes and people. After seeing success in manufacturing, its principles were extended to a knowledge work environment (ex., Software development). The 7 key principles of Lean software development are listed below.
- Eliminate Waste
- Amplify Learning
- Defer Commitment
- Deliver as fast as possible
- Build Quality In
- Respect for People
- Optimize the whole
1. Eliminate Waste
Lean aims to eliminate waste which can be considered all process activities that don’t add value to the final product delivery. Here, we should mention that there will always be necessary waste (ex., quality assurance). However, that should be the minority instead of the majority in your process.
To eliminate waste, Lean software development teams focus on visualizing their workflows. The idea is to map the entire value delivery flow from conceptualization to fruition and discover stages that don’t add value to the final product/service. Once this is done, the goal is to eliminate those stages and ultimately speed up the delivery of value.
Waste can take many forms, and it may not just be related to the different work stages in your process. The 7 wastes of Lean, adapted to software development context, are listed below.
- Over-production (Unnecessary features)
- Transportation (Constant work handoffs between developers)
- Inventory (Partially done user stories)
- Over-processing (Relearning)
- Waiting (Delays due to bugs or other process impediments)
- Motion (Context switching between coding work)
- Defects (Faulty code which requires rework)
2. Amplify Learning
“Amplify learning” is a Lean development principle centered around creating knowledge in the process, which is essential for maximizing value delivery to customers. Lean software development teams focus on creating an environment of knowledge sharing. This happens through practices such as pair-programming, knowledge sharing sessions, peer reviews, etc.
This Lean software development principle also relates to creating frequent feedback loops in the process. Those can be internal (ex., peer review) and external (ex., gathering feedback from customers). Lean software development teams continuously gather knowledge about the work process and product/service they are building. The idea is to use this knowledge to avoid problems in the future and deliver superior value to the market.
3. Defer Commitment
Deferring commitment is about waiting until the last responsible moment to make critical and allows decisions.
In a volatile environment such as software development, changes can occur very frequently. This could lead to making wrong decisions such as what development project to initiate or what is the most important feature to work on next. It could also contribute to not gathering enough information for the work at hand. This leads to reworks and creates waste in the process.
To minimize that waste, Lean software development teams defer commitment to starting new work, which allows them to keep their flexibility to adapt to changes for as long as possible. The idea is that by the time the work becomes critical, teams will have gathered more knowledge about it, which will help them mitigate risks and reduce the likelihood of reworks. This can be done through experimentations with different approaches, technology, etc., before the actual work begins.
4. Deliver As Fast As Possible
This Lean development principle is related to enhancing the speed to market by releasing MVPs (Minimum Viable Products) rather than fully complete solutions. Software teams should release a feature (or an entire product) that’s “just good enough” rather than trying to get it perfect from the first shot. That’s important because delivering something functional to the market opens up a feedback loop that teams can use to understand customer requirements. This helps them not waste time and effort on building something that nobody wants.
Furthermore, the principle of delivering as fast as possible allows software teams to start profiting from their MVPs before competitors. It allows them to adapt later versions of their solution to the market needs and maximize their overall ROI.
5. Build Quality In
Building quality into a product is a Lean development principle that emphasizes and allows continuous inspection of a given solution throughout the production cycle.
According to Lean, having a Quality Control phase at the end of the development process is a waste. Traditionally, the quality of a product is not checked until the later stages of a project which can create many problems. For one, it slows down the ability of a team to get early feedback on their solution. For another, it creates the waste of unevenness in the process because when development is in progress, quality control might remain idle for a long time, and vice versa. Not to mention that once quality is checked after the product is built, there is a huge risk of finding significant defects that require costly reworks.
That’s why Lean software development focuses on Quality Assurance, not Quality Control. The idea is to ensure that a software solution is inspected regularly. This can be done through:
- Pair programming – writing code jointly with another developer to catch errors early
- Test-driven development – producing testing criteria before the actual code
- Limiting work in progress – reducing context switching to enhance team’s focus
- Automation – automating testing processes where possible
6. Respect for People
Respect for people is at the core of Lean, and it means creating a work environment where people feel valued.
This principle of Lean development emphasizes the importance of allowing people to safely share their ideas and feelings. The goal is to recognize that people are the most valuable assets in the company. Therefore, leaders need to practice empathy, encourage people to express their point of view on work processes or problems, and ask for their opinion when making decisions.
“Respect for people” also relates to giving people the responsibility to make local decisions about their work. Also, leaders should include team members in the creation of a shared vision. All of this empowers them and contributes to better team morale.
7. Optimize the Whole
The last Lean development principle encourages companies to solve problems by assessing the performance of an entire system rather than just single parts of it.
Lean sees businesses as systems of one or more value streams that consist of connected services (ex., Development, sales, marketing). That’s why to deliver the best possible value to customers, detect, and solve problems in product/service delivery, optimizations should be directed toward the whole value stream. To do that, Lean software development teams start by first identifying the flow of value. In practice, this could be done by visualizing the processes of multiple teams on interconnected Kanban boards. As a result, they can uncover bottlenecks and look for ways to resolve issues across their workflows.
How Does Lean Software Development Work?
Lean software development works by first identifying value streams and then visualizing them. Unlike manufacturing, software engineering produces intangible goods which can’t be physically touched. So to remove waste from the process, it’s important to visually map those value streams. This is done through a Lean technique called value stream mapping.
Once value stream mapping is done, the next step is to analyze the value stream. This happens by spotting where development work gets stuck (bottlenecks), including stages that produce no value and slow down the entire delivery process. Then, Lean software development teams start tracking metrics such as cycle time (how long it takes for teams to finish work once started) and lead time (how long it takes for developers to process a customer request from commitment to delivery).
One of the leading Lean ideas is to start introducing flow within the process. The working logic of Lean software development is then based on building small solutions and putting them in front of the customer as soon as possible. This is important in a rapidly changing field such as software development because it allows companies to gain a competitive advantage. Once that’s done, Lean software teams focus on collecting learnings from their early prototypes so they can continuously improve them.
For What Purposes Is Lean Software Development Used?
Using Lean software development aims to remove waste from the engineering process and maximize customer value delivery. Lean software development also puts the focus on people inside an organization, actively promoting shared leadership. Combined with the removal of process waste, this increases the team’s efficiency levels.
Another central purpose of Lean software development is to empower software engineering companies to gain a competitive advantage in the market. This happens by quickly releasing Minimum Viable Products (MVPs) instead of fully complete solutions. In addition, the build-in quality principle also contributes to that purpose as Lean software development companies focus on 100% inspection before a solution is released. As a result, everything that reaches customers’ hands is more likely to satisfy their needs.
What Are the Advantages of Knowing the Lean Software Development Principles?
Knowing the Lean software development principles helps you adopt Lean thinking and focus your operations on continuous improvement. Understanding and practicing each of the Lean development principles can enhance the value delivery capabilities of your company, so customers remain satisfied with your products or services. Furthermore, it can help your organization reduce project risks in software development while increasing the profitability of the solutions you release.
What Is the Origin of Lean Software Development Principles?
Lean software development is a methodology in software engineering that originates from Lean manufacturing. After studying the success of Lean development in the production factories of Toyota, modern-day experts started thinking about how to adapt its concept to knowledge work (ex. software, marketing, etc.). Fast forward to 2003, the term Lean software development first appeared in a book by the same name, written by Mary and Tom Poppendieck. The book aims to transfer the original Lean principles into software development and explain how they can work with Agile techniques.
What Are the Differences Between Lean and Agile?
Agile is a project management approach and a mindset, defined by several values and principles, coined in the Agile manifesto from 2001. Lean, on the other hand, is a methodology that was first conceptualized before WW1 but successfully implemented in the factories of Toyota from the 1930s. While there are similarities between the two, it can be said that Agile is a superset of Lean as its working principles were inspired by Lean thinking. The main difference between Lean and Agile is that the former focuses on building continuous flow within processes while the latter on iterating the release of functionalities to the market.