The biggest hindrance to good engineering is everyone not knowing everything. I know that sounds stupid. But I can't explain enough to most developers why they need to understand how to safely deploy database changes before they can even consider writing an application that uses a database. And I can't explain enough to the architects why the developers need to be given agency and options and allowed to make their own decisions and just implement what works. Both seem to be lacking critical insight and so we always end up with slightly-crappy things that work just enough to "ship", and spend the rest of the time trying to shore up why it always breaks.