Lean software development isn’t a set of procedures but rather a set of principles. Every software development team would be well-served by studying these principles:
- Eliminate Waste (focus on value creation)
- Create Knowledge (keep improving)
- Build Quality In (test and refactor continually)
- Defer Commitment (maintain loose coupling throughout)
- Optimize the Whole (don’t be dragged down by the weakest link)
- Deliver Fast (define small chunks of functionality)
- Respect People (push decision-making down)
Waste is a huge issue in any business process or manufacturing line. If we can eliminate waste, big increases in productivity and value will follow. It’s a simple and intuitive concept but not so simple to implement.
Let’s examine waste more closely because it’s an insidious problem.
Here are the seven types of waste recognized by lean experts.
- Production Defects
- Waiting Time
- Over-Production
- Excessive Transportation
- Excess Inventory
- Complexity
- Extra Motion
Defects – Manufacturers learned years ago that fixing defects after the assembly process finishes is costly. It is far more efficient to build quality in. This applies to software too. Software development needs to be rigorous and structured. Code modules need to be thoroughly tested before integration with the target system. These are not lone ranger activities.
Waiting – Time spent waiting is lost. Waiting for meetings, waiting for approvals, waiting for manual steps that could be automated, … Find the wait points and eliminate them.
Over-Production – Adding features just because you can or just because someone asks creates bloated software. Writing more documentation than is valuable to the team and the customer is wasteful. Focus on what matters by defining a minimum viable product and a minimum document set.
Transportation – Handoffs (or transitions) from one team member to another, or from one team (e.g. development) to another (e.g. QA) introduce delays, complexities and failure points. Minimize them. Integrate as many workflows as you reasonably can.
Inventory – Any software module or feature that’s in-progress and therefore incomplete (not done) is inventory. If too much inventory builds up, the team will struggle under the weight (and wait). Finish what you start before moving on to the next big thing.
Complexity – Overly complex software is hard to maintain and is likely to be drowning in technical debt. Keep software modules as simple as possible. Also keep the number of steps involved in getting to done at a minimum.
Extra Motion – Any action or artifact that does not increase the value delivered to the customer is extra motion. Question the value of everything the team does and everything the team delivers.
If you condition yourself and your team to “think lean”, the job you save might be your own.