Agile for Hardware

Agile methods create speed and flexibility in software projects.  Can the same methods also bring more speed and flexibility to hardware projects?   Practice has shown that agile software methods often…

Agile methods create speed and flexibility in software projects.  Can the same methods also bring more speed and flexibility to hardware projects?   Practice has shown that agile software methods often backfire on hardware projects – but hardware-specific methods based on agile principles can create major improvements.  To get the most mileage, you need to understand why agile software methods work – and what’s different about hardware.

Working in Small Batches Shortens Feedback Loops

Agile software development methods work by dramatically shortening feedback loops. To see how this works, think of a development process as a system for turning ideas into saleable stuff.  In traditional software methods, all the “stuff” moved together in one enormous batch through each activity in the development process.  No feature could be coded until all had passed design freeze.  No feature could go to testing until all had been coded.  This created extremely long, slow feedback loops.  After coding, it should be weeks or even months before that code was tested and defects found.   The application wasn’t functional until close to the end of the project, so customers couldn’t provide timely feedback on what they liked (or didn’t like).

In agile, the same “stuff” is split into numerous small batches, where each batch delivers a few fully functional features.  The team works on only one batch at a time, finishing it before starting another batch.  Suddenly a feedback loop of many months has been cut to a few weeks.  Bugs are found while the design is still fresh in the developer’s mind.  It’s possible to show sample features to users and learn what they really want.  Value is delivered earlier and with less effort.

In addition, the project is more flexible because each batch is relatively independent of the others.  This makes it easy to change the order of batches, drop batches which haven’t yet been started, and add in new batches.

In short, agile methods get great results primarily because the work has been split into small, independent batches and each batch is finished and delivers its value before another batch is started.  There’s more to it than that, but that’s the core principle.  Much of the rest consists of creative ways to optimize the throughput of these small batches.

Why the Same Thing Doesn’t Work in Hardware

Many people have tried to split hardware projects into batches of features, just like software, and apply agile software methods verbatim.  This usually runs into problems because those agile software development methods make some assumptions which aren’t necessarily true in hardware.  Namely, agile software methods assume that:

So How Can Hardware Development Be Agile?

So how can we possibly achieve agility – flexibility and speed – in hardware development?

The same workflow management tools which are used in software development can provide a great deal of benefit in hardware projects – if they are used to manage the right kind of batch.  The right kind of batch is one which can be finished and deliver value without waiting for every other batch to complete.  A set of features just doesn’t seem to be the right kind of batch for hardware projects.

In the book Agile Gets Physical, Katherine Radeka and myself describe splitting hardware work into other kinds of batches.

If you want to read more about batches and why they work, continue with the blog post What is Queueing Theory and Why Should I Care? .   If you want to know how agile methods can work in hardware development, take a look at our book Agile Gets Physical.