Lean Software Development
The term lean software development originated in a book by the same name, written by Mary Poppendieck and Tom Poppendieck. The book explains how the lean principles from
manufacturing offer a better approach to software development. The book presents the
traditional lean principles in a modified form, as well as a set of 22 tools and compares
the tools to agile practices.
Poppendieck’s 7 Lean Principles
Waste is anything (extra features, Requirement churn, Slow internal communication or processes, Bureaucracy etc.) that does not add value to a product, value as perceived by the customer.
Remove the waste as much as possible.
- Reduce management activities such as unnecessary tracking systems.
- Rethink Authorization systems. Make “approvals” unnecessary
- Retrain you brain to see waste. Ask yourself “Why am I really doing this?”
- Map your value stream to identify inefficiencies
Development is an exercise in discovery.
- Lean culture focuses on exploring the purpose of use rather than conforming to requirement.
- Intention is to create solutions to unique customer problems.
- Discovery includes short, repeated cycles of investigation, experimentation and
- Try it, Test it, Fix it.
- Knowledge generation (feedback) loop are critical
- Learn fast, generate knowledge and spread it (make it known to everyone)
- Reuse of knowledge.
Decide as Late as Possible
Delaying decisions is valuable because better decisions can be made when they are based on fact, not speculation.
- Customer needs aren’t always clear or understood
- You can’t predict the future, so maintain flexibility, until uncertainty is removed
- Know what is critically important in the domain
- Develop a sense of “when” decisions need to be made (Last responsible moment)
In an evolving market, keeping design options open is more valuable than committing
early. A key strategy for delaying commitments when developing a complex system is to
build a capacity for change into the system.
Deliver as Fast as Possible
In development the discovery cycle is critical for learning: Design, implement, feedback, improve. The shorter these cycles are, the more can be learned. Speed assures that customers get what they need now, not what they needed yesterday.
- Rapid delivery means less time for customers to change their minds
- The faster you deliver the longer you can delay decisions. Being able to make a change in a week, lets you wait to make a decision until that week.
- A Just in Time approach allows for decision about work to be made real time, not in advance
- The key is to reduce cycle time, or the time it takes to get from one end of the process to the other
- Practice a steady rate of arrival and control what comes into your queue.
- Smaller work packages have less that can go wrong
- Deliver consistently!
Empower the Team
Involving developers in the details of technical decisions is fundamental to achieving excellence. The people on the front line combine the knowledge of the minute details with the power of many minds.
- Let the team design their own working procedures
- Remember Management’s role is coach, train, and assist the teams
- Create a sense of purpose at work. People care about a purpose greater then themselves
- The team must have access to customers
- Let the team make it’s own commitments
- Management’s role is to provide support, resources, guidance, and protection
- Promote Mentor ship and Pair Programming activities
- Encourage training and continued self improvement
- Ask : What is slowing you down, or getting in your way of doing a good job?, What would help things move faster, better, or cheaper?
- Assist: multiplying good practices and eliminating a bad practices
Build Integrity In
Software with build-in integrity has a coherent architecture, scores high on usability and fitness for purpose, and is maintainable, adaptable, and extensible.
Perceived Integrity: is affected by the customer’s whole experience of a system
- Smaller systems should be developed by a single team that has immediate access to the people who will judge the system’s integrity
- Short iterations should be used and feedback should be acquired from a wide range of people that can recognize the integrity
- Customer tests provide excellent customer-development communication
- Complex systems should be represented using models and languages the customer understands and programmers can use without major refinement.
Conceptual Integrity: means that system’s central concepts work together as a smooth
- The effectiveness of communication of all decisions made is critical
- Use integrated problem solving:
– Understand the problem and solve the problem at the same time
– Preliminary information is released early, not delay until complete information is available
– Information is transferred in small batches not large
– Information flows in two directions not one
– The preferred method of communication is face to face not just using
- Maintain Conceptual integrity
– Simplicity: Simple designs are the best
– Clarity: Keep code understandable
– Suitability for use: design for an intended purpose
– No Repetition: never repeat code
– No Extra Features: don’t build what is not needed
See the Whole
When individuals or organizations are measured on their specialized contribution rather than overall performance, sub-optimization is likely to result. So the focus should be on optimizing the whole rather then optimizing departments/sub- departments/ individuals.
- A “system” is not just a sum of it’s parts, it’s a product of those interactions
- When systems start to break down, rigid more sequential rules are usually put in place
- A sequential/rigid process may cure one symptom, but not the root cause. It will become increasingly difficult to keep up with changing needs.
Lean Software Development: An Agile Toolkit by Mary Poppendieck and Tom Poppendieck
Lean Software Development Principles: by John P Vajda