Code Anarchy

The Software Assembly Line

Let's look at how Google Chrome is manufactured:

Think I’m being facetious? Let’s look at what an assembly line does.

Assembly lines are great for manufacturing a lot of the same or very similar things, quickly and cheaply. They put raw materials through a chain of carefully planned steps to ensure the same thing always comes out, and that anything that isn’t the same is rejected.

Before an assembly line can get to work manufacturing millions of copies of the next iPhone, a bunch of people have to sit down and design the product and come up with a way to set up an assembly line to build millions of them. This is design and engineering.

Software development is not manufacturing. It’s just not. Software development is design. Stop trying to treat software development like manufacturing. It’s not going to work.

Ok… I take that back, sort of.

Some “software development” really is a bit like manufacturing. If you’re a contracting firm building simple Web front-ends to simple databases, you can probably set up something that looks a lot like an assembly line and get away with it. And it makes sense to invest the time and money to figure this out and set it up, because your whole business objective is to make as many of these Web front-ends as you can sell. You’d want to streamline the process as much as possible.

But if you’re not in that position—if you’re not out to make thousands of versions of almost exactly the same thing—why are you even tempted to build an assembly line? So you can get away with hiring cheaper, less skilled people to do the actual manufacturing?

Someone, somewhere still has to do the actual design work. On top of that, you’re now spending time and money figuring out how to reduce the design to a set of instructions less skilled people can follow to build your software. You’re bringing up an entire assembly line (hopefully complete with rigorous quality control) to manufacture one copy. To save money.

Who does that‽