Software Developers Do Not Build Widgets...
This post will be quite different from my normal posts. It is not a quick how-to, or a design pattern, but a rebuttal...
I was recently reading the introduction to a book on enterprise architecture. And the author tried to make the point that software development is a cottage industry because the "widgets" we create (software) does not have the associated factories, structures, and automation that making cars or cookies has. He points out that the auto industry spends 80% of its time designing the factory and only 20% designing the cars. At the end of building a particular type of automobile, the factory line is thrown away (or massively retooled) for the next model of car.
That author, and almost every other like-minded author or speaker I've ever heard of is building a case for their "software creation" automation tools, process, or methodology (shudder). And their analogy is completely wrong.
The truth is, we don't build cars or cookies. Every custom developed piece of software is different, every car or cookie is the same. We are not the mindless robots in the production line.
We are the engineers designing both the car and the production line.
In the world of software development, the factory is the application or system. The car (product) is the data that is being processed. Whether for internal or external consumption.
The purpose of of the factory is to take in supplies (raw materials, parts, widgets) and to produce product (more parts, or processed materials, and widgets), our software takes inputs (user inputs, inputs from other systems) and produces product (more data, or outputs to other systems).
The efficiency of the factory is completely dependent upon the architect, the effectivity of the system is dependent upon the software architect and developers.
Our tools resemble those of the design engineer or the automation process engineer. We model flows and structures. We specify tolerances and dimensions and interfaces. We are concerned about parallel and serial processes. We are the engineers that we have euphamistically claimed to be.
So, no, dear author, we don't design and build widgets, we design and build factories. Our factories interact with and are operated by users. Do we need process? Yes. Do we need procedures? Yes. Do we need tools? Yes.
Compare the number of moving parts in enterprise software to the moving parts in the factory that builds cars if you must, but do not compare websites and say that they are as similar as two cars rolling off of an assembly plant
If anything at all, compare building entertainment software development and production to the production of movies, and the development of e-commerce software to the development of a new commercial franchise.
Is it any wonder that in an information age, we would need to build information factories?