
Yes, there are stack traces for when an error gets raised, but stepping through a stack looking for the cause of a generic error is tedious and sometimes error-prone, and makes for some terrible log messages. We often don’t surface information to users, other than some cryptic error message or an unannotate…
…O anywhere), it’s still good practice that leads to better software. Falling out of this principle: the caller should have the power to decide what to do with an error state, inverting the responsibility of alerting or handling to the caller.