I discovered that embracing change (rather than resisting it), being flexible and adaptable (rather than adhering rigidly to a plan), allows me to make a significant impact on software development without experiencing constant anxiety. This discovery led me to enthusiastically adopt Agile Software Development (https://agilemanifesto.org/iso/en/manifesto.html). Over time, in this journey of continuous adaptation and improvement, the teams I’ve worked with have refined sustainable practices and discarded those that proved superfluous or unbeneficial. This process, enriched by Extreme Programming, Continuous Delivery, and especially by Lean principles, has allowed us to develop a highly effective work approach. However, in conversations with colleagues, I was surprised to discover that Lean principles and their application in software development are not widely known. Therefore, I decided to create a series of posts to share what Lean Software Development is and how we implement it in our teams.
An important clarification: I know that each context may require different approaches and that the agile/Lean approach is not the best option in certain contexts. However, since it’s the way I enjoy working, I almost automatically end up working in environments where it makes sense.
Origins of Lean Software Development
The concept of Lean Manufacturing, deeply rooted in the revolutionary Toyota Production System (TPS) of the 1950s, is a philosophy focused on maximizing value by eliminating waste. This approach not only transformed automotive manufacturing but also laid the groundwork for agile methodologies in software development.Key Principles of the Toyota Production System:
- Jidoka (Automation with a human touch): This principle emphasizes the importance of automation in production not only to reduce costs but also to prevent defects. It allows production to stop in case of any problem to avoid creating defective products.
- Just-in-Time (JIT): Under this approach, each process produces only what is necessary for the next step, adopting a "pull" production process instead of "push."
- Kaizen (Continuous Improvement): Kaizen promotes small, constant improvements in the process, facilitating continuous learning and adaptation, and enhancing the satisfaction of both customers and production participants.
The transition to agile software development was notably influenced by these ideals, especially regarding continuous improvement, process quality, and a workflow based on real demand rather than assumption-based production.
Historical Context and Evolution toward Agile Development:
After World War II, Japan faced severe economic constraints that made Western-style mass production unfeasible. In this context, the ideas of W. Edwards Deming on quality and continuous improvement found fertile ground. Deming, an American statistician and management consultant, emphasized quality and efficiency in production as means to rebuild the Japanese economy. These quality control principles, along with a focus on minimizing waste and maximizing efficiency, were adopted and adapted by Toyota, giving rise to TPS.
"Learning is not compulsory. Neither is survival." —W. Edwards DemingIn the early 2000s, as agile software development gained popularity, Mary and Tom Poppendieck, who had experience in Lean Manufacturing and were involved in agile software development, adapted Lean principles to software development. They published the first book in a series describing the Lean Software Development methodology (Lean Software Development: An Agile Toolkit), thus establishing a clear bridge between manufacturing practices and agile software development.
The principles of Lean Manufacturing, originating in TPS and reinforced by Deming’s influence, not only revolutionized manufacturing but also transcended industries, profoundly shaping agile software development. The adaptation of these principles to the software world by the Poppendiecks underscores the universality of continuous improvement, quality, and efficiency, demonstrating how approaches focused on waste elimination and respect for people can lead to significant innovations.
Fundamental Principles
Lean Software Development is based on seven fundamental principles aimed at eliminating waste and optimizing the development process:- Eliminate Waste: Anything that doesn’t add value to the customer is considered waste and should be removed.
- Build Quality In: Quality should be an integral part of the development process, not an afterthought.
- Create Knowledge: Continuous learning and knowledge improvement are essential for software development.
- Defer Commitment: Make decisions as late as possible to maintain flexibility and adapt to changes.
- Deliver Fast: Fast delivery allows for early feedback and necessary adjustments.
- Respect People: A respectful and collaborative environment is essential for team success.
- Optimize the Whole: The development process should be considered as a whole to improve efficiency.
Benefits of Adopting Lean in Software Development
Implementing Lean in software development brings numerous advantages, including reduced costs and development time, increased product quality and customer satisfaction, as well as a more rewarding work environment for the team. Lean fosters a culture of constant improvement and adaptability, crucial aspects in times of high uncertainty and rapid market evolution.For the first time in software development history, we have data that defines what a high-performance technology organization should look like, thanks to research conducted by the DevOps Research and Assessment (DORA) team. As detailed in the book Accelerate, the lean approach is fundamental in building and scaling technology teams and organizations.
Accelerate research |
By integrating Lean Software Development, XP, or a combination of both with Lean Product Development and Lean Management, a high-impact team is formed, which also reduces stress and frustration—elements I consider as essential as the impact itself (https://www.eferro.net/2017/12/how-vs-what.html).
A brief preview of what will be covered in the series
In upcoming entries, we will detail each Lean principle, showing its practical application in the teams I work with. I will strive to share plenty of examples and explain our decision-making process.- Introduction to Lean Software Development (this article)
- Interesting Lean Concepts for Software Development
- Eliminate Waste in Software Development
- Amplify Learning
- Defer Decisions as Late as Possible
- Defer Decisions as Late as Possible: Product Limits
- Deferring Decisions and Working in Small Steps
- Deliver as Fast as Possible
- Empower the Team
- Build Quality In
- Optimize the Whole
- Lean and XP - A Sustainable Approach for Agile Development
- Other Lean-Influenced Concepts
The next article will focus on explaining some Lean concepts that we will use throughout the series. Let’s keep learning and evolving together until then!
Resources:
- Competing On The Basis Of Speed Mary Poppendieck
- Lean Software Development: An Agile Toolkit
- Lean Mindset: Ask Right Questions
- Toyota Production System
- Learning lean/Agile concepts / short videos
- Why Lean Product Development is Essential for Effective Product Teams
- Six Decades of Software EngineeringMary Poppendieck
- The Machine That Changed the World