Lean plays an important part in the evolution of Agile and Scrum. The main goal of lean is to increase value for customers while reducing waste. Here we will try to understand the history of Lean, where it started, Lean principles for manufacturing, and Lean principles defined for software development specifically. Let’s start with the history of Lean.
History of Lean –
The history of lean goes back to the late 1940s, post-World War 2 era. Japan was trying to rebuild its economy, infrastructure, and industries. Japan had a deficiency of cash, space, and natural resources and had high unemployment. They started leaning their processes to be efficient and add more value to customers.
In 1936, Toyota won its first truck contract from the Japanese government. The processes in place encountered new problems and Toyota responded to these problems by developing Kaizen improvement teams. Shigeo Shingo and Taiichi Ohno, two industrial engineers at Toyota, were key people in the design of these processes.
Taiichi Ohno, in 1978, documented these processes in his book named “Toyota Production System (TPS)”, known as “The Toyota Way” as well.
The term ‘Lean’ was first used in 1988, by MIT researcher John Krafcik’s in his article “Triumph of the Lean Production System”.
In 1996 American researchers James Womack and Daniel Jones outlined five key Lean principles in their book “Lean Thinking”.
In 2003, Lean evolved from a methodology used in manufacturing to software development through a landmark book, “Lean Software Development: An Agile Toolkit” by Mary and Tom Poppendieck.
This Lean Software development was inspired by Mary’s experience with managing a government project in waterfall and the contrast she could see with her previous experience with Lean way of working.
Lean Principles from Manufacturing –
The American researchers, James Womack and Daniel Jones defined Lean as “A way to do more and more with less and less—less human effort, less equipment, less time, and less space—while coming closer and closer to providing customers exactly what they want” and translated this into five key principles for Lean manufacturing.
5 Key Principles –
- Identify Value – Identify what adds value to customer, what customers exactly want
- Map the Value Stream – It is an activity to draw a “map” of the flow of the processes. It includes the steps from request arrival to delivery. Basically the goal is identifying steps which does not create value. Then find ways to eliminate those wasteful steps.
- Create Flow – After the waste has been removed from the value stream, the next step is to make sure the remaining steps flow smoothly with no interruptions, delays, or bottlenecks. This ensures product or service will flow smoothly towards the customer. Above all, this may require breaking down silo thinking besides making the effort to become cross-functional.
- Establish Pull – With the smooth flow, create a pull between the step, have continuous flow. No need to create inventory in advance. Here based on the demand or pull from the customer, product would be delivered to customer in less time. The concept known as “Just in Time” delivery. Comparatively with JIT, time to market is dramatically improved.
- Pursue Perfection – Continuous improvement through learning and having emphasis on making process improvement as part of the culture.
Further, let’s see Lean Software Development principles defined by Mary and Tom Poppendieck in their book “Lean Software Development: An Agile Toolkit”. These 7 principles originally inspired by Lean principles used in manufacturing –
- Eliminate waste
- Amplify learning
- Decide as late as possible (Defer commitment)
- Deliver as fast as possible(Faster Delivery)
- Empower the team
- Build Quality in
- Optimize the whole
Principle #1 – Eliminate Waste
Waste is anything that does not add value to a product, the value as perceived by the customer.
In lean thinking, waste is a high hurdle. The ideal is to find what a customer wants, make or develop it and deliver exactly what they want in lesser time. In fact, whatever comes in way of satisfying customer needs, is waste.
- Identifying Value – First step of Lean Thinking is to identify what adds value, what is important and high priority for the customer.
- Value Stream Mapping – Next step is to create a map of your value stream. It is an activity to draw a “map” of the flow of the processes. It includes the steps from request arrival to delivery. The goal is identifying steps that does not create value and find ways to eliminate those wasteful steps.
Here 7 different types of wastes defined in Lean Software Development.
- Partially Done Work – lot of items in progress, not done, cannot deliver to customer.
- Extra Processes – Processes which may not required like timesheets, tracking same information in different systems etc.
- Extra Features — Delivering extra features although customer is not looking for these features now, not their priority.
- Task Switching – working on multiple projects, switching between projects, context switching.
- Waiting — Teams may be dependent on other team, waiting for them to deliver, or may be waiting for important decisions from leadership.
- Motion — Movement of team members between teams, shared resources
- Defects — defects, limit the ability to take new items.
Principle #2 – Amplify Learning
- Software development is a continuous learning process based on the shorter iterations.
- Getting early feedback from customer, accommodate the feedback in upcoming iterations.
- Keep iterations shorter, learn from mistakes and correct them.
- Code reviews — Peer review, learn good and standard coding practices.
- Well commented code – Help other team members to understand the flow and logic easily, additionally reducing learning time for new team members, easy to debug, refactor.
- Training – on specific technologies required to deliver better quality product to customer.
- Knowledge sharing sessions at team level, group level etc.
- Maintain Knowledge base system (ex.- SharePoint).
Principle #3 – Decide as late as possible (Defer commitment)
- First collect required information and feedback from customer and then commit on something.
- Take informed decision-based facts and not on speculations.
- This is an options-based approach where you keep you options open to change in future. For ex. keep the option of re-prioritizing backlog open until it is time to plan an iteration. Also delay committing some PBI in sprint until it meets DoR.
Principle # 4 – Deliver as fast as possible
- This principle talks about maximizing the value by quickly delivering valuable software in shorter iterations and improve based on customer feedback.
- Here the development cycle is critical for learning: “Design, implement, feedback, improve”. Shorter cycles help to learn more early. Like Scrum recommend shorter development cycles and opportunity to get early feedback, learn and improve.
- Factors that slows down development teams:
- Planning too far in advance – Used to happen in waterfall, planning for months, years at the start of the project.
- Not responding quickly and effectively enough to blockers – Should address the blockers quickly, escalate them to the right forum, like to SoS or Action Team.
- Keep Engineering approaches simple, to make changes easily in future. Hence should not over-engineer or complicate business requirements and their solutions.
Principle # 5 – Empower the team
- Empower team to take their decisions. Respect team’s expertise and knowledge.
- Trust them as they are the people who do the work and capable enough to take better decisions.
- Leaders should make sure to have psychologically safe environment where team members don’t be afraid to express their views, can make mistakes and learn from them. Above all, should Have open and transparent environment.
- Leadership Should have communications transparent, proactive, and effective.
- Team members encouraged to do pair programming, code reviews and other knowledge building team activities.
Principle # 6 – Build Quality in
- An important quality factor for software is to maintain its usefulness over time.
- This principle is about building quality into the product and assured throughout the development process, using techniques like Refactoring, Continuous Integration, unit testing, pair programming, test-driven development, automation etc.
- Focus is to avoid creating defects in first place. Defects tracking and fixing costlier late in development cycle.
- Quick feedback loops ensure increase in quality of work produced. Like scrum framework recommends shorter delivery cycles and early feedback which teams would use to improve quality in future development work.
Principle # 7 – See the whole
- The aim is to see the system as whole. On the contrary, to see it as the sum of its parts.
- Go beyond optimizing just the individual parts, optimize the whole system.
- Focus on improving relation between parts.
- Development, testing, and operations are all connected in how they influence each other.
In summary, main goal of lean to is increase value for customers while reducing waste. American researchers James Womack and Daniel Jones defined 5 Lean manufacturing principles. These principles are Identifying value, mapping value stream, creating flow, establishing pull while pursuing perfection. Mary and Tom Poppendieck defined 7 Lean Software Development principles in their book “Lean Software Development: An Agile Toolkit”. These principles are based on Lean manufacturing principles. These principles talk about eliminate waste, amplifying learning, deferring commitment, faster delivery, building quality in the product, empowering the team and optimizing the whole system.