Getting a bit off-topic, but I appreciate the perspective.
In general, I would always advocate running a development/test copy of production, where you try any upgrades and changes before doing it live. That should help catch issues before they become much bigger issues. Routine backups are a good idea regardless. That being said:
I feel your pain. Lack of backwards-compatibility is definitely a big issue (my other app was plagued by it for a while, in one case they tweaked a feature three different ways in three consecutive releases), and contributor rants on the subject are long and numerous. There's not much to be done about it. IPS insists on being able to refactor and fix framework bugs as deemed necessary, at any time. To their credit, they have made an effort to try maintaining BC, post about breaking changes in advance, and make pre-release builds available. That's an improvement over what it was. Still, always unintended side-effects (see: this).
I understand their perspective, and they do what they have to do for their own business interests. Telling people, 'hey, we won't be able to fix this bug until the next major release in a year or two because it might break other stuff' isn't an option as far as they're concerned.
The flip side, of course, is that they've created an ecosystem with little semblance of stability. It's cumbersome to maintain anything substantial on it, and I think the number and state of contributors around is demonstrative.
It may be there are different design decisions they could've made to alleviate these issues--a more rigid and compact core, or a formal API and semantic versioning, or TDD, or using a common framework like Symfony... but that's largely immaterial. Not the reality we live in.
As for me, I try to fix my stuff when it breaks, but I've moved on to other pastures.