A final source of waste isn’t immediately obvious. The manufacturing industry calls it inventory. In software development, it’s unreleased software. Either way, it’s partially done work—work that has cost money but has yet to deliver any value.
Partially done work represents unrealized investment. It’s waste in the form of opportunity cost, where the investment hasn’t yet produced value but you can’t use the resources it cost for anything else.
Partially done work also hurts throughput, which is the amount of time it takes for a new idea to become useful software. Low throughput introduces more waste. The longer it takes to develop an idea, the greater the likelihood that some change of plans will invalidate some of the partially done work.
To minimize partially done work and wasted effort, maximize your throughput. Find the step in your process that has the most work waiting to be done. That’s your constraint: the one part of your process that determines your overall throughput. In my experience, the constraint in software projects is often the developers. The rate at which they implement stories governs the amount of work everyone else can do.
To maximize throughput, the constraint needs to work at maximum productivity, whereas the other elements of your process don’t. To minimize partially finished work, nonconstraints should produce only enough work to keep the constraint busy, but not so much that there’s a big pile of outstanding work. Outstanding work means ...