The concept of Lean Software Development (LSD) is credited to Dr. Robert Charette in 1993. Ten years later, Tom and Mary Poppendieck published “Lean Software Development: An Agile Toolkit.”
Despite the concept being over twenty years old, there still seems to be some confusion about what exactly Lean Software Development is and how it fits in with the Agile methodology.
Lean Software Development is actually just a branch on the Agile family tree, and the concepts are quite similar. Fortunately, confusing the slight nuances between them is not a cause for alarm. Both roads lead to the same destination.
What is Lean Software Development?
The term “lean” was first used to describe the manufacturing process adopted in the Toyota Production System between the 1950’s and 1970’s. The focus was on eliminating waste during production.
Up until the 1990’s, the software development world largely relied on the Waterfall development methodology, which focuses on planning and following a sequential series of steps in the development process.
As customers’ expectations and technology advanced, this approach did not work as well. Customers expected—and technology demanded—that software undergo constant updates. New approaches were developed that were more responsive, more flexible, and placed a greater focus on the end user earlier in the development process.
Lean Software Development (and Agile, as we will see later on) is one of these more responsive and flexible approaches to software development. LSD places a greater focus on the customer and incorporates user testing earlier in the development process.
Implementing Lean Software Development requires following the seven Lean Software Development principles.
1. Eliminate waste
Anything that does not add value to the customer is considered waste. Building extra processes and features—or the wrong features—are examples of waste. Wasting time waiting for other team members to complete tasks before you can continue work is another example.
Waste must be identified so it can be eliminated. Tips for eliminating waste include:
- Requirements should be set before coding, but not written too far in advance.
- Testing should be done throughout the development process.
- Integration should be factored into development from the start.
2. Build quality
Development should focus on creating as few defects as possible. Code should be kept as simple as possible. Expect to make changes to your code as development progresses.
Refactor often. Refactoring is restructuring the code without changing what it does. It reduces code complexity, making it more readable.
3. Create knowledge
Do not assume you know what the end product or future releases should look like. Learn through an iterative process and expect the application to evolve over time. Release a functioning version as soon as possible so you can gather feedback from users.
4. Defer commitment
Ideally, most decisions in the development process should be reversible. Irreversible decisions should be delayed as long as possible, so they can be made based on the most up-to-date and relevant information.
5. Deliver fast
The faster a working version is released into production, the sooner you can gather feedback and use it to make improvements. Short development cycles allow you to meet customers’ needs quickly, before they become stale.
6. Respect people
Fill your team with skilled designers, developers, and security experts. Empower them to do their jobs without being micromanaged. This only slows them down and creates frustration, which can lead to further delays.
7. Optimize the whole
Take a step back and look at the big picture. Projects must be viewed in terms of how they support high-level business processes. Look at how the team operates as a unit, not at individual groups (or even one particular member) working independently. How can the team as a whole deliver business value to the organization? This is how success is measured.
Lean versus Agile Software Development
The Agile methodology for software development also focuses on the customer through rapid development and constant change. The application is broken down into smaller pieces that can be built, tested, reviewed, and refined through an iterative process.
This approach helps eliminate errors and building in unnecessary features that users do not want or need. Some of the core principles of Agile include:
- Customer satisfaction
- Iterative design and development
- Expecting change
- Empowered teams
For more information on Agile development, check out our blog.
Agile sounds a lot like Lean Software Development, right? Well, it is. There are many characteristics in common, though there are a few specific areas where Lean Software Development diverges a bit from the Agile approach. For example, LSD takes a top-down approach, looking at the team as a whole and viewing product development from end-to-end. Agile uses a bottom-up approach, breaking work up into small chunks.
But given the numerous commonalities LSD has with Agile, it is typically seen as falling into the larger Agile bucket.
Whether you describe yourself as Lean or Agile, the more important thing to keep in mind is that you use the right approach to deliver value to your customers efficiently and rapidly.
Both Lean and Agile share the same goals. Teams that understand the value of Lean Software Development and the larger Agile concept will create stronger software applications that attract users, retain users, and generate revenue.