I call myself a software engineer, and I consider what I do a type of engineering. There are arguments against such a characterization, and some corresponding defense for how software development can legitimately compare to other engineering disciplines.
Somehow software engineering always seems to be compared to building bridges.
Hey, I get why bridges are the canonical engineering example: everyone understands the difficulty in constructing a massive bridge, appreciates the necessary, and marvels at the precision of construction as well as the longevity of craftsmanship. Whereas programmers are stereotyped as darkroom residents with growing monitors, traffic cones and hard hats and mechanical cranes ooze engineering authority.
Comparing bridges to apps feels like contrasting two levels of intensity because that’s the real difference between the two activities irregardless of discipline. The parameters and expectations for a Golden Gate Bridge are vastly different than that of the software that most of us write. Whether it’s in the planning, the budget, the amount of workers, the timeline for construction as well as for use, the accepted amount of fault tolerance, or even the materials and standardized techniques, the scale involved bears little resemblance to a run-of-the-mill software project, one that inevitably gets sacrificed on the alter of “not engineering.”
To compare apples to apples would require looking at software that has similar scope and breadth, but that type of software is much less understood, particularly in contrast to the majesty of bridges. Microsoft Windows may be a valid if distant analog: over a decade ago, it required two thousand developers and another two thousand testers two years time to deliver 50 million lines of operating system code.
Another example would be programming for spacecraft at NASA. A program running in space needs to account for all kinds of failures, work for years if not decades, and be largely self-autonomous; the requirements are, unsurprisingly, much more strict. The amount of scrutiny given to each line of code, each function and module is much higher than your typical app or web service. The processes governing programming at NASA sound outright foreign compared to how we build software for our websites, laptops and smartphones.
The right comparisons to make for software engineering to other types of engineering – not just civil, but medical, bio-, chemical, mechanical, and other types of engineering based on the physical sciences – have to account for scope and scale. In fact, it’s slightly ironic that much of the early calculations and design and prototypes for these aforementioned fields is done in software, taking advantage of software’s abilities for fast iteration and precise simulation.
Unfortunately, the engineering required to build a popsicle stick bridge doesn’t provoke the same levels of inspiration, but not every app can or should be built as if it were the Golden Gate Bridge.