The term “Lean” was first coined by John Krafcik in his 1988 article, “Triumph of the Lean Production System” based on his experience as a quality engineer in the Toyota-GM NUMMI joint venture in California. Adapting the principles from Lean manufacturing, Mary & Tom Poppendieck wrote Lean Software Development: An Agile Toolkit (May 18, 2003).
Lean is a set of seven principles for achieving quality, speed & customer alignment by relentlessly eliminate anything that isn’t adding value and only work on what is absolutely needed just-in-time:
Eliminate Waste
Building extra features, wrong features, unnecessarily complex solution, mismanaging the product backlog, rework, task switching, knowledge loss, ineffective communication, etc.
Waste-removal takes place iteratively to continuously increase processes and procedures optimization with tools like Value stream mapping.
Amplify Learning
Short interactions with regular customer feedback helps adjust efforts for future improvements. Customer representatives and the product team learn more about the domain problem and figure out possible solutions for further development.
Decide as Late as Possible
Delay decisions until they can be made based on facts and not on assumptions. The more complex a system is, the more capacity for change should be built into it.
Deliver as Fast as Possible
The sooner the end-product is delivered without major defects, the sooner feedback can be received, and incorporated into the next iteration, better the learning and communication within the team, and the customer’s present needs are met and not what they required yesterday. Tools like Set-Based Design are used.
Empower the Team
Leaders need to remove obstacles for their team’s success and be coaches and mentor. In Lean, managers are taught how to listen to their direct reports so they can provide suggestions for improvements.
Build Integrity In
The system needs to do what the customer expects. The system’s separate components must work well together holistically, balancing flexibility, maintainability, efficiency, and responsiveness.
See the Whole
Software systems are not simply the sum of their parts, but the product of their interactions.
When thinking about designing in a Lean environment, the big takeaways are:
- Eliminate assumptions as early as possible in the process by talking with customers.
- Simplified requirements gathering by presenting prototypes to your customers and getting their input earlier to validate concepts.
- Running usability tests before the code is written to save time and money and ensure the quality of the experience.