It is amazing to see a hacker produce some working prototype in a week or two, but how long will it take to make it run reliably? Soon you are getting tired of serving as a beta tester, and wonder “why can’t they get it right?” But there is a better way available.
Modeling can find the hard errors
Some kind of errors can only be avoided with modeling, not with testing. Think about multithreading, where we suddenly have infinite crossing points between them.
Normal good practices reduce slip through rates
A lot of errors can be prevented by careful choice of programming tools, that simply do not allow problematic behavior. Processor performance has come so far that a bit of extra runtime cost for extra safety is a good tradeoff.
Costs of repair much higher than visible
It is not only the extra cost to fix the software. There is also lost service, lost goodwill, and the cost to fix the mess the error left behind
Well behaved software is a building block
If you only need to learn the interface to a piece of software, and not all the edge cases and bugs in the implementation, it suddenly becomes much easier to work with it and to integrate it with other software