Самый эпичный фикс, который я когда-либо делал, сложно будет превзойти.
Бизнес-логика отрабатывала в целом правильно, но вот, как в истории выше, "что-то где-то ломалось". На тот момент я работал, наверное, ещё меньше полугода и в целом с кодовой базой проектов был, мягко говоря, не знаком, поэтому вооружившись правилом "глаза боятся, а руки делают" отправился в путешествие, как мне казалось тогда, в один конец.
Ни трейс, ни лог не выдали никаких симптомов. Отладка в модулях, где в основном сосредоточена бизнес-логика, показала, что всё работает добросовестно. А модули, которые работают со входными данными, тоже не признались, что у них есть баги. Где-то пять часов отладки спустя, я начал что-то подозревать. Я уже очень долго не мог найти объяснение происходящему. В мыслях, эмоционально, я возвращался в моменты, когда я только начинал программировать, и очень часто попадал, как мне казалось, в тупик. И это ощущение меня убеждало в том, что ошибка должна быть самой идиотской, которую только можно придумать. Ситуацию не проясняла даже отладка по шагам. Я уже говорил тебе, что такое безумие? Безумие — это точное повторение одного и того же действия раз за разом в надежде на изменение. Это. Есть. Безумие. Похрен! Я начал разговаривать сам с собой, и вдумчиво читал код, прослеживал модификацию данных, объяснял себе, что делает сейчас код функции, на которую я смотрю. Буквально, читал каждую строчку и интерпретировал ее, а потом в дебаггере сверял, что я все правильно интерпретировал.
И вот, зашел я в который раз в функцию, в самый грязный модуль, который занимался стягиванием данных из базы в бомбическую иерархию классов, которая, считай, в ядре бизнес-логики как ложка гуано мамонта в бочке с вискарем. Я вернулся в одну из функций, которую я всегда пытался как можно быстрее в проскочить в дебаггере, потому что глаза начинали кровоточить от нагромождения if else и кошмарного кода с нарушением всех возможных принципов программирования, и наверное, парочки международных конвенций. Но я понимал, что в этот раз все нужно делать без исключений и придется строчка за строчкой объяснить, что в этой функции происходит. Где-то на половине функции, на строке с номером где-то около 1700, я начинаю чувствовать, что что-то не так. То ли я обговорился, то ли потерял мысль. Как я могу потерять мысль, если я просто интерпертирую то, что уже написано? Присмотревшись к коду, зашёл на точку останова повыше, и оказалось, не показалось. Увидел я очень интересную, мать вашу, локальную переменную. Локальную переменную, #!&@, с именем, которое идентично имени поля класса, за исключением префикса к полям "m_"! По факту, логика обработки была правильной, но вот для одного случая, была маленькая, такая, ошибочка. Для одного действия, вместо чтения поля класса, нужно было читать эту локальную переменную-самозванца. То есть другими словами, для фикса нужно было "всего лишь" удалить две буквы! Как удачно получилось, что код настолько старый, что пережил ни одну миграцию на новую систему версионирования и просто так теперь не узнать, что за гений это сделал!
Очень забавно было смотреть ревью в конце дня — кто-то выкатил фичу, кто-то сделал правки для случаев использования в нескольких модулях, а на джуна посмотрите - за целый день всего лишь две буквы удалил!
После этого случая, я начал немного по другому смотреть на профессию разработчика в принципе.
P.S.: технического долга много, и его разрешают ликвидировать, только если это блокирует выполнение какой-то бизнес задачи. Например, к этой либе подпустили человека только через год, когда начали работы в рамках задачи по увеличению быстродействия.