Современное программное обеспечение содержит много багов. Программисты по мере сил их исправляют. Приходится это делать и мне. Самые легкие баги легко воспроизводятся людьми. Я могу их воспроизвести в тестах и поправить код.

Есть более серьезные насекомые. Это когда вообще не понятно, что происходит. Тогда я стараюсь придерживаться следующей последовательности действий.

  • Читаем код поломавшегося приложения, если понятно где есть ошибка, ее можно покрыть тестами и исправить.
  • Часто после чтения кода остаешься в недоумении. Все должно работать и так. Но не работает.
  • Тогда надо подключаться и дебажить код. В дебаге можно найти почти все, кроме проблем с параллельным выполнением потоков. Но продакшен систему не подебажишь, из-за того, что ее нельзя останавливать.
  • И тогда нам на помощь приходят логи, которые кстати можно читать до чтения кода. И которые помогают быстро найти нужные участки кода. Я дописываю недостающие информацию для выведения в логи. Писать логи это огромное искусство, делая это идешь по лезвию бритвы. Слишком мало логов, не разобраться что происходит. Слишком много логов невозможно разумно обработать, особенно если вы ищете ошибку на тысячи серверов.

Очень важно не зависать на чтение кода программы, надо активно диагностировать проблему. Дебажить, добавлять логи, писать тесты. Это ускоряет понимание.