It is amazing anything works at all. A rant on software development
twitter.com
twitter.com
Just spitballing here.
I think sidlls was talking about industries where lives are at stake, like aviation , where things move slowely and follow a strict QA process. There you have formally verified systems and the like, but you also have to make tradeoffs like working with a limited subset of C because that is formally verifiable.
- Gerald Weinberg
The customer literally never reported a single bug.
Every requirement was fully tested and fully traceable from requirements document to the exact page of the design document that was going to meet it to the exact lines of code that met it to the module level tests that tested that code to the verification test that tested the requirement at a higher level.
The documentation was beautiful; a document that compiled into two other documents, one being the source code and one being an interlaced design and discussion document with source code in it - one could read this document, read the design, see linked requirements documents, see linked test documents, read the explanations and justifications, interspersed with the source code that then implemented that design. Nobody wrote pure code; we wrote interspersed design and discussion and code, which was then reviewed as a whole.
Even though the project ran for a decade, a newcomer could fully understand everything about the code from reading this document. Within a week, a newcomer fully understood, and if they ever saw code they didn't understand, this document would show them what it was trying to achieve, what requirements it was supporting, how it was being tested. It was 100% waterfall, and fantastically high quality. The customer, after suing one of their other contracted suppliers for failure to deliver working software over a period of years, then came to us to ask if we could make that software too. The high-quality of the work meant that we actually spent less; once designs were approved following review, they were very rarely revisited or changed. Once code was written that met that design, it very rarely needed reworking. Large pieces of the software were written once, correctly, and five years later were still working, exactly as they had been written. When you know what you're supposed to be making in advance, the level of quality you can reach and the low cost of doing it can be astounding.
It all relied on a very high quality of customer without shifting requirements. Sad but true; high quality customers are in very short supply.
I frequently find myself saying at my current workplace "If you don't know what you're meant to be making, the odds of getting it right are very slim." It seems incredible that I have to say it, but I do, and we frequently start making things without a clear picture of what it's meant to be. Still, if customers can't decide what they want, they pay the price.