Сначала вы должны изолировать области, где могут возникнуть ошибки, и которые видны пользователю. Тогда вы можете документировать их. Это так просто.
Что ж, просто в теории ... на практике ошибки могут возникать повсюду, и сообщение о них может превратить приятный код в чудовище регистрации, создания и обработки исключений и передачи возвращаемых значений.
Я бы рекомендовал двухэтапный подход. Во-первых, чтобы войти, войти много и много.
Во-вторых, это определить основные компоненты и их интерфейсы, а также определить, в каких основных случаях возникновения ошибок эти компоненты могут оказаться. Затем вы можете войти в систему более наглядным образом, когда одна из этих ошибок (как вы обрабатываете внутреннюю ошибку, зависит от вас). - исключения или коды ошибок здесь не имеют значения). Пользователь обычно увидит ошибку и перейдет в журналы для получения более подробной информации.
Тот же подход используется для веб-серверов и вашего примера кода ошибки http. Если пользователь видит 404 и сообщает о его поддержке, он будет искать в журналах подробную информацию о том, что происходило, какую страницу посещали, когда, и будет собирать любую другую информацию, которую он может откуда-то еще иметь, имеет смысл находиться в БД, сети или приложении.