Comment by ryandrake

17 hours ago

> > We know how to write software with very few bugs

> Do we, really? Because a week doesn’t go by when I don’t run into bugs of some sort.

I mean, we do know how to do it, but we don't because business needs tend to throw quality under the bus in exchange for almost everything else: (especially) speed to develop, but also developer comfort, feature cram, visual refreshes, and so on always trump bugs, so every project ends up with bugs.

I have a few hobby projects which I would stick my neck out and say have no bugs. I know, I'm going to get roasted for this claim, but the projects are ultra simple enough in scope, and I'm under no pressure to ever release them publicly, so I was able to prioritize getting them right. No actual businesses are going to be doing this level of polish and care, and they all need to cut corners and actually ship, so they have bugs. And no ultra-complex project (even if it's done with love and care) is capable of this either, purely due to its size and number of moving parts.

So, it's not like we don't know how to do it, but that we choose not to for practical reasons.

The simplest recipe for writing "almost bug-free" software is:

  1.  Freeze the set of features.
  2.  Continue to pay programmers to polish the software for several years while it is being actively used by many people.
  3.  Resist adding new features or updating the software to feel modern.

If you do that, your program will asymptomatically approach zero bug.

Of course, your users will complain about missing features, how ugly and ancient your products look, and how they wished you were more like your buggy competitors.

And if your users are unhappy, then you probably lose the "used heavily by a lot of people" part that reveals the bugs.

  • There is no system without exploitable breaches, whether technical or social ones. The biggest point is, who have the incitives to exploit them, how much resources it costs to run a trial, how much resources do they control and are they ready to throw at attempts.