Software isn't engineering unless you're in aerospace, most software is so fragile if you look under the hood it should properly scare you. Some code you look at and you wonder how on earth it made it this long in production without breaking or anybody stumbling into it.
So we should take much more care about how software systems are developed to get out of this lack of robustness and predictability in the presence of unexpected inputs.
But that's not how we deal with software at all. The big trick is to read a couple of tutorials and one of those learn 'x' in 24 days books and you're off to the races, the money is good and never mind the ethics or the basic principles of good design.
So we get a very large amount of crap code (more so on the web than elsewhere, though every segment has it's horrors (embedded, banking, telco)), and the reviewers typically either don't have time or don't care as long as it checks off the feature set boxes. Or they downright don't understand what they are taking delivery of themselves.
Most software is ugly, most of it works (but barely so) and very little of it is actually understood completely. If we want to change that we're going to have to SLOW DOWN considerably, but that would leave the field wide open to the competition that doesn't give a damn. So you're damned if you do and you're damned if you don't.
If anybody has a real solution to the economic problem then I'm all ears but until we make it expensive to produce junk I see no way out of this. See also: ethics come at a price.