How to Advance Lean Software Development (Beyond the 'Toyota Way')

21.05.2012

Traditional manufacturing methods reduce cost per part by pressing large batches of parts at the same time. Ironically, optimizing one part of the process leads to inefficiencies and a decrease in overall flow. Lean manufacturing focuses on delivering one part, end-to-end. This is sometimes called one-piece flow.

To get to one-piece flow, we'll eliminate multi-tasking. Technical contributors (or pairs) will work on one thing at a time. But what happens when developers want to hand off work, but the testers are busy?

Instead of "pushing" work to the next step in the chain, we pull it. This means testers don't take on work until they are ready for it. The programmers in the example above can't pull work, though, as that would break the work in progress limits. They have to figure out how to help the testers-- by testing themselves, perhaps, or by writing test tools or "drivers." Rather than identify a bottleneck and complain about it, you pull systems expose the bottleneck and fix it, thus increasing throughput. See how it's starting to work together?

The classic example is a worker walking several feet to grab a letter, sort it into one of five bins and repeat the process for a whole pile of mail. Instead, bring all the work items together so he can sort without walking.

The objects in software are different--compilers, databases, continuous improvement (CI) frameworks and version control--but the reality is the same. Too many programmers live with code on different environments, with build systems that take too long and with design changes sent via email and out of date before they are even read.