"People can and do develop software without formal training and there is little that can be done to change this"
Some people without formal training develop good software, some people with formal training develop execrable software. The critical thing is that software is put into a satisfactory state before release and that "satisfactory" is a high hurdle to cross.
"the user didn't bother to learn how to use the software"
Or the S/W wasn't sufficiently intuitive, the developer decided to depart from existing norms of user interfaces to "differentiate" themselves, the S/W was poorly/not at all documented, etc. There are lots of things to lay at the vendor's door.
"interaction between software that was written independently (the cookie example: is the bug in the browser or the web app?)"
Products A, B, C and D work fine in the browser. Product E has to have the cache cleared. Is the problem with the browser or E?
Who writes the specifications? For commercial software, usually the vendor.