Баг был не в Java
Когда что-то ломается, первое, что делает большинство из нас, — смотрит в собственный код. Я тоже. Но есть баги, ответ на которые в Java-коде не найдётся, сколько его ни перечитывай.
Соединение с базой, Docker-образ, переменная окружения, кодировка, сетевой таймаут или ответ другого сервиса могут часами выглядеть как Java-исключение. А в самом приложении при этом нет никакой ошибки.
Stacktrace говорит не всё
Увидеть исключение — не значит найти причину. Stacktrace показывает, где проблема проявилась. Причину приходится искать отдельно.
Проблема из базы данных может проявиться исключением на уровне приложения. Неполадка в пуле соединений — на вызове репозитория. А сетевая проблема приходит как исключение от Feign-клиента.
Поэтому при отладке я теперь стараюсь задавать не столько вопрос «где возникла эта ошибка?», сколько «через какие слои системы она сюда добралась?».
Отладка — тоже инженерия
Мне кажется, хороший разработчик измеряется не только новыми фичами. Спокойно разобраться, что происходит в существующей системе, — не меньшая часть той же работы.
Иногда лучшее решение — не написать больше кода, а доказать, где проблемы нет.