Девять месяцев разработки рухнули из-за скрытого куска говнокода
Хочу рассказать о том, как девять месяцев разработки могут разбиться об один скрытый кусок чужого говнокода.
Мы пообещали бизнесу, что переезд на новый движок контента пройдет бесшовно. Но за два дня до релиза меня и всю команду лишили прав на прод. Не в наказание, просто в холдинге планово меняли доступы.
Мы сидели и просто смотрели на графики подготовки. Позади было почти девять месяцев разработки, интеграции и тестирования. Самый сок был в том, что единой схемы данных для блоков не существовало: параметры отступов и ширины элементов в JSON-конфигах разные команды годами записывали кто как горазд. В одном месте могло быть "16", в другом 16, в третьем 16.0.
И вот суббота, день икс. Сами мы ничего не деплоили, кнопку запуска должны были нажимать админы после нашего одобрения. Мы просто контролировали, как на тестовом контуре разворачивают код смежники.
Ребята с фронтенда переключали свои компоненты на наше новое API и на ходу подставляли дефолтные значения туда, где мигрированные данные отдавали NULL. Вот тут выяснилось прекрасное: кусок критичной бизнес-логики отображения страниц годами жил в старом UI-компоненте, где его никто не ожидал увидеть. В документации — пустота.
В районе обеда на стенде запустили скриншот-тестирование, чтобы сравнить старый рендер сайта и новый. Сразу же полезли расхождения: где-то верстка поплыла из-за несовместимого формата данных, а около 10% страниц вообще начали отдавать 500-ю ошибку, потому что новый код не смог корректно обработать часть старых JSON-конфигураций.
В три часа дня к нам зашел начальник. Молча встал у двери и уставился в тот же дашборд. Напряжение было такое, что хоть топор вешай. Наконец, кто-то свернул вкладку с графиками, и я сказал боссу:
— Пиши админам, отбой. Трафик не переключаем, эту логику мы к себе быстро не перенесем.
Никто даже спорить не стал. Релиз, который готовили почти год, отменили в самый последний момент. И в понедельник мы начали все сначала.