posted: August 10, 2019
tl;dr: The fundamental reason bad software exists is economic...
Part Two of a two part series on the causes of bad software
Part One: Ruminations on the causes of bad software
If I take a step back and judge the quality of the software being produced over the decades I’ve been in the industry, I don’t think we’re getting any better.
Sure, the capabilities of the software being produced have risen dramatically: we now have applications and systems that can deliver much of the world’s information to a device we hold in the palm of our hands. Software can do truly amazing things: voice and image recognition; split-second searches of massive amounts of information; immersive interactive experiences; and sophisticated machine control. Yet software systems are still plagued by failures: applications crash and hang; fail to accept input or deliver the desired output; fail to guard against security breaches that expose sensitive information; or behave in unexpected ways that endanger human lives and property, as in the case of the Boeing 737 MAX crashes.
At the root of any software failure is a technical issue. The technology used in software development has changed dramatically over the decades. The programming languages I use most nowadays didn’t even exist when I graduated college. In many ways today’s development tools and systems are far superior to what we were using decades ago. IDEs, linters, static code analysis, automated test tools, continuous integration pipelines, and better bug tracking systems all help. Yet this hasn’t solved the challenge of delivering highly reliable software.
The systems being developed today are much more complex than those of the past. Even an apparently simple smartphone app will usually rely upon the phone operating system and multiple sensors; a broadband connection to the Internet, with all of its routing, security, and authentication mechanisms; back end infrastructure in a cloud service provider; and likely other third party back end services and databases. The number of layers of software used to create an application, and the number of dependencies, keeps growing. This growing complexity creates challenges and can cause unforeseen issues, as the programmers developing the application likely don’t realize all the things that can possibly go wrong at the different layers and with all the various dependencies. Furthermore, they likely don’t directly control many of these other systems: they rely upon other technologists at other companies to deliver quality software.
Growing technical complexity is a component of the problem, but it is not the root cause of our collective failure to improve software quality. The fundamental reason, I think, is economic. In all too many cases, there is not sufficient economic reason to spend the additional time needed to deliver a high-quality software system.
I’ve always prided myself on working for companies that emphasized quality. As a result, I’ve not worked at other, even more financially successful companies, that took a different approach to quality. Back in the late 1990s there was a highly successful Internet startup company named Ascend Communications, which became successful building dial-in modem banks for Internet Service Providers. Ascend’s quality mantra, according to many of their users, was “Ship Shit Fast”. They were infamous for shipping systems which barely worked well enough to win the deal, and then having to fix the problems which inevitably erupted in the field. Their customers were highly critical of Ascend’s quality, yet they kept buying Ascend products by the truckload. A more current example would be Facebook, with its initial motto of “Move fast and break things”. Facebook has been fined billions of dollars for breaking things, especially in the privacy realm, yet they are one of the most valuable companies on the planet. The “fake it until you make it” motto propagated by the Harvard Business Review also supports a mindset that doesn’t exactly emphasize quality work.
Technical challenges will always be with us. But when economic forces reward companies for shipping lower quality products, the impetus to do so will often carry the day.