There certainly are systematic solutions to at least _some_ of the real problems, based on formal methods, of which Rust's checkers are a simple example, and it's an inexcusable moral failure that they are not used more widely.
Reliable software is expensive to develop; more expensive than we are willing to admit. You can either take the expense at development time by increasing development cost, or you can shift it until later and externalise the cost by making the end-user and society at large suck it up in terms of unreliability and occasional disaster.
We are at the stage the Victorians were with exploding boilers, or people in early Medieval times were with collapsing cathedrals. They fixed their problems, and so can we.