Have you ever thought about a good metaphor for software?
Up until today on some occasions I have explored the metaphor that software is a building, where architects build from standard components and when a new requirement to “the building” comes, we can alter parts of the building. This metaphor has never been compelling to me, so luckily, on a trip from “Toyota Commemorative Museum of Industry and Technology” to the Toyota Motomachi plant in Japan I found another: Software is a factory.
I needed to know more clearly, what software development is really trying to build, so what does it require to build a successful factory? Well Toyota certainly can provide a good deal of inspiration with their factories where the Toyota Production System takes place.
Generally speaking a factory supports processes which consists of input, an operation and output. One overall process of a car factory is input (parts for a car) and the operation of assembling the car which gives an output of a car. This process of course can be divided in subprocesses, also with input, an operation and output.
If software is a factory, it takes information as input, performs an operation producing information as output.
An important attribute of a Toyota factory is that it can support
Jidoka: to detect an abnormality instantly, stop, fix and correct the immediate condition and install a countermeasure. This is how quality is built into what ever the factory is producing. Detecting an abnormality instantly in a software factory, is not the same as logging an exception, and waiting for someone to look at the log...
In this view we as software developers, in a broad sense, are factory builders. We supply our customer with an information factory that can process information. So what implications does this have?
What for example is software architecture? It is an act of planning factories - not a trivial task I believe.
I want to explore this metaphor and find out more about which methods are used to build factories, because I believe we can use this experience in software development.
By Jesper Thaning