I regularly come across people comparing the (mature and structured) production of industrial goods (mostly cars) to the (immature and chaotic) discipline of software development (or actually software engineering) .
I have to admit that I am not a fan of those kind of comparisons. Particular the analogy between software development and industrial production is falling short, that is apples vs. pears. If at all the comparison should be made between the design of industrial products (say cars) and software. Like software development the process of designing a new car is not as straight forward as the later production of the thing.
I do not want to belittle the challenges and performances of designing a new car by any means. Having said that, I think that the design analogy falls short also because of the complexity involved. The requirements of physical world products is constraint by a lot of facts. A car needs to fit for a human beeing, needs to be steerable and needs to fullfil some speed and security requirements. Within those limitations the designers can build the thing around the remaining degrees of freedom.
Software on the other hand has a lot more degrees of freedom (that is what soft means) aka a higher complexity (the same holds true for other “mental” products like e.g. art and movies). In a lot of domains the truth is even worst: requirements are not clear in the beginning (which can have a couple of reasons).
So what is my point here? Well, analogies do help us to capture certain concepts and building up a paradigm. However, you should clearly define the limitations and boundaries of a analogy. Further you could try to apply aspects of one domain to another, but you should always respect the character of the domain at hand (software in my case).
There are a lot of concepts and strategies out there that allow us to handle this complexity, but seeing software development as a industrial (production) process will not work…