I truly believe that this is one of the hardest problems in software:
How do you bubble up errors in a system so that the user can see them, make sense of them, and knows what to do?
It's so hard and I've bumped into it in nearly every project I worked.