← Back to context

Comment by mlindner

4 years ago

Once upon a time fixing bugs in production didn't happen because the product got all the bugs out before production. If it had bugs in production, the product failed.

You used the phrase "once upon a time", a common opening for fairy tales, which seems apropos for describing a magical land where products achieved a 100% bug detection rate before release. I suppose this might have been true 50 years ago, at the dawn of the electronic calculator, but that is now an age of legend...

I've often wondered about this commonly repeated belief that software of ~30 years ago was less buggy than software today, because it doesn't really line up with my memories. There's definitely part of it that comes from a standard "back in my day", rose-tinted glasses sort of thing.

But I actually think a lot of it comes from the fact that modern software can be easily patched, whereas older software couldn't. It is easy to believe that software today is buggier because of just how many patches we get for it. But back in the day, any bugs that existed in the product were not as visible, because we weren't getting weekly updates where the patch notes say "Bug fixes."

How many massive vulnerabilities existed in major products of the day, and continued to persist unnoticed by all of us because of the relative impossibility of patching them out?

On top of that, modern software is simply more complex -- often times an order of magnitude more complex. (Whether this increased complexity is always needed/appropriate is a separate question.) I'm not sure what metric you would use to be able to do a "bugs per complexity unit" sort of comparison between then and now, something that attempts to control for increased complexity, but my intuition is that it would be pretty flat.

When that was true, several decades ago, products generally had upwards of 2 years of design/architecture/engineering effort and definitions prior to another 3-5 years of development.

It still (sometimes) happens for medical, aerospace and other transportation software that interfaces with hardware where safety is a concern.