In 1981 Robert Cox came up with a slogan for Ford; “Quality is Job 1”.
It has always stuck with me.
In the software industry there are few slogans could be further from the truth. C-level’s and other customer facing types frequently proclaim the “quality” of their products, but they aren’t the ones making the product. They’re frequently not even the ones using the product.
In software there are two viable ways to release quality software. You can release it when everything you want done is done, or you can release what you happen to have done at a specific date. You can’t combine the two, although almost every software company tries to.
People outside of engineering tell clients X will be ready on Y date. That date is inevitably too soon for the promised features to be completed.
Realistically, there is only one way to combine promised dates and promised features in software. You compromise the quality. People could, promise a date generously far in the future, but that’s not very helpful meeting to this quarter’s sales goals.
In order to deliver quality an engineer needs the support of management to not deliver code that isn’t done. “Done” of course doesn’t mean “It seems to work.” or “QA didn’t complain.” Done means “I have tests to prove it works.” Done means “QA can prove it works when users get ahold of it.” Done means “It’s intuitive for users.” For multi-user systems Done means “We can prove it works when tons of users try to use it at the same time.”
Done might not mean “It does everything that was requested.” There are always more features to add. It does mean that everyone, even the client, agrees that the features that are Done, are “enough” for now.
I believe that there are a few companies out there that actually deliver “quality” software that even their engineers believe in. I’ve never worked for someone else’s company that did this. Features sure, but overall product quality? No.