12 Mar 2021 - Thomas Depierre
Software engineering is the systematic application of engineering approaches to the development of software. 1
When I look at IT organisations around the world, I see a marvel of engineering. Dozens and dozens of complex projects, managed through well defined organisations and pipelines.
Specific professions and job roles to define projects. Gather requirements. Define them in written and drawn artefacts. Architect and design the complex interrelated components that will compose the final output. Separate them through well defined contracts, enforced through engineered tools. Define testing plans for them. Design the tools needed to run them. Build the components. Assemble them with a minutia and precision verifying the requirements. Integrate and test the final product and deliver them to the users, which will unlock tremendous benefits from this amazingly complex engineering marvel.
These steps are well defined. Studied. Embodied in books and procedures, that define the structure of every artefact and meeting that need to happen to get there over years.
I see the systemic application of science, process. A well auditable and defined machinery, honed by years of research and work on what allows to produce the safest and most value providing software systems for humanity.
As someone with experience and education in other aspects of engineering, coming from mechanical and Electronic Engineering, I can’t stop marvelling at the peak of engineering and systematics achieved by software. This degree of precision, codification and process can be found nowhere else in other engineering fields. These are usually based on folk knowledge, random trials of patterns found in obscure datasheets, adapted through wet finger estimation to the current situation.
The only reason the Tacoma Narrows Bridge was the first to fail this way was because every other engineer working on suspended bridges did not trust the science. None of them. So they all tripled their security margins, not believing what the formal model was telling them. On a hunch. They were wrong of course. The model was right. But the model was never meant to compute the impact of wind. So they saved dozens on lifes. On a gut feeling.
That is what most of the engineering profession, outside of software, use as a process. Folk knowledge, DIY and gut feeling. Nothing comes close to what software engineering achieved.
Software engineering is the only real engineering profession.
This post is part of a serie of two. It is, partially, a satire of the arguments I keep seeing about the relationship between engineering and writing software. My own position is that yes, writing software is engineering, but that the discipline called Software Engineering has nothing to do with Engineering. I also do not think that software engineering is “superior” to other forms of engineering. This is the argument of both side pushed to the extreme.