Wednesday, May 20, 2020

What type of industrial production is software engineering?

Where does software engineering fit within other modes of engineering production? Is it manufacturing? Is it artisanal crafting? Is it like architecture or built environment designing? Is it industrial design?

Three overarching perspectives characterise how these diverse professional/industrial capabilities are realised: product design practices, processes of production, and labour-relations practices.

We contend that software engineering is a hybrid capability, pragmatically drawing on aspects of computer science, artisan/craft, architecture, industrial design, and manufacturing process thinking. 

As a mode of production software engineering amplifies dependence on worker flow.
Software is more malleable than material objects (although within the constraints of its computing hardware).
The textual composition of software designs lends its artefacts to a level of indeterminacy and fragility that differs materially from physical goods.
And the summative complication and complexity of software constructions are orders of magnitude greater than other industrial productions.

We might reasonably ask how software systems achieve and maintain such stable robust performance in the wild if its underlying construct is so fragile, indeterminate, complicated and complex?
When a state machine computing device plus working software works, it just runs and runs. The instability in the process unfolds over the period of time between attaining stable configurations. But once a stable configuration is reached, the state machine runs deterministically and perfectly to design specification, subject to various limits on resources and conditions like hardware, bandwidth, storage, gamma radiation, and hard to find logic bombs.