Я знаю, что этот вопрос помечен как «независимый от языка», но он во многом зависит от языка, который вы используете, в котором вы должны следовать шаблонам и практикам, наиболее часто используемым на этом языке (и, следовательно, наиболее знакомым для разработчики).
Например, прочитайте Рекомендации по обработке и обработке ошибок (MSDN) для некоторых рекомендаций Microsoft .Net по обработке исключений. (который я только что заметил, на самом деле устарел, например, он рекомендует наследовать от ApplicationException
).