I agree with you on that one. IMHO it's because of that difficulty to know when to optimize for quality, but also because of sheer incompetence.
It's akin to pollution, really: Individual company making 'dirty' things won't see the consequences. But scale this mindset out and suddenly we wake up in a world when trillions of dollars are spend to counteract those effects.
I wonder where you get the confidence to make such a strong statement, which is clearly not warranted. I want to challenge you to broaden your view a bit: Not a lot of software is like Windows explorer. Not a lot of software is performance critical. A lot of software can do with bugs, with many many bugs, to be honest. A lot of code is run fewer than 100 times, before it's retired. Also, not a lot of software written has many users. Or enough users to support maintaining it. "Pollution" often affects just the author of the software themself. Software is just a means to an end, and the end decides, how much effort was warranted in the first place.
Not being performance critical doesn't mean it is justified to diss-respect users by wasting their time.
>A lot of code is run fewer than 100 times, before it's retired. Also, not a lot of software written has many users.
Obviously we aren't talking about some simple automation scripts here.
>"Pollution" often affects just the author of the software themself.
You are misunderstanding the pollution analogy. I'm not talking about polluting the codebase with code smell.
I am talking about costs of low quality being non obvious and only revealing themselves at global scale
This is moving the goalpost, and also ignores the fact that software exists on a spectrum from "simple automation script" to "messaging app used by millions". It seems you have a very narrow view of what software is, or what it is used for, and the constrains that apply when building it.
Running that kind of software for the central bank here. So kind of disputing your statement.
> So I am simply excluding this category as an extremum.
Which ignores the long tail. Great approach.
>Great aproach
Unironically better, then trying to make prescriptions as broad and general as possible, because those usually are too generic to carry any actual value
Also note that I wrote "code" originally, because there can be programs which are run very often, but certain code paths are not, so my statement applies even for some parts of popular software.
The image I think would be valuable for you to consider is a curve, where 20% of code has 80% of all executions, and 80% of code get's the rest. It makes sense to put in a lot of effort into writing the top 20%, but on any given day it is very likely you'll be working on the lower 80%.
I have written non-trivial systems deployed in 20 different sites that have never had a bug ever.
My best are usually second systems, focus on simplicity, standardisation and resist scope creep.
100% coverage with unit tests. 100% coverage with integration tests.
I've written a many things with zero bugs after delivery.
(and other that were never ending quality nightmares)
If I am under pressure to deliver I get strict with TDD, since no time for bug fixing.