The world’s most accurate software analogy

People need analogies to help understand how software development happens but all analogies are at some level inaccurate. For example, people talk about software as a craft, but this falls down because a craftsman creates a product that has value, while software engineers create code and the business does not sell the code as a product. I have also heard of software as gardening. Sometimes it feels like MBAs view software development as an assembly line, again with code as the product.

So, here is how to analogize software engineering:

Where does that leave software engineers? Software engineers are middle management. At the most debased, we merely translate directives from above into computer language. At the most pure, a team controls their service and ensures it is aligned with broaders goals.

In conclusion, I like to imagine it is similar to a factory. The software team is responsible for creating the instructions for the computer-workers, monitoring inputs and outputs, ensuring the data-product meets organizational quality standards, etc.