Как справлялся с legacy кодом
Что проверяют
Поведенческий вопрос. Интервьюер смотрит на процесс: как кандидат снижает риск, договаривается о приоритетах и измеряет результат. Полное переписывание с нуля тут не сильный ответ, а тревожный сигнал.
Как отвечать
Один конкретный случай по схеме STAR, с числами.
Ситуация. Коротко про систему и в чём была боль: «админка на jQuery и Backbone, около 40 тысяч строк, без тестов, правка одной формы ломала соседнюю, релиз требовал полдня ручной регрессии».
Задача. Что требовалось именно от вас и в каких ограничениях. Ключевое ограничение почти всегда одно: продукт продолжает выпускать функциональность, окна на «две недели рефакторинга» не будет.
Действия. Здесь и живёт весь ответ:
- Замерить, а не оценить на глаз. Частота багов по модулям, время сборки, размер бандла, самые правимые файлы по истории git. Работа начинается там, где болит, а не там, где код субъективно некрасив.
- Закрепить поведение тестами до правок. E2E на критичные сценарии плюс характеризующие тесты на функции с непонятной логикой: они фиксируют текущее поведение вместе с его странностями, чтобы отличить намеренную особенность от бага.
- Никакого big bang rewrite. Strangler fig: новый код живёт рядом со старым, точки входа переключаются по одной. Для фронтенда это обычно монтирование новых компонентов в существующие DOM-узлы и тонкий адаптер между старым и новым состоянием.
- Механизировать массовое. Кодмоды (
jscodeshift), автофиксы линтера, постепенная типизация:allowJs, затемcheckJs, затем включение строгих проверок по каталогам. - Прикрыть выкатку. Фиче-флаги, наблюдение за ошибками в Sentry и за метриками производительности сразу после переключения, готовый откат.
- Договориться с командой. Правило бойскаута плюс зафиксированная доля спринта на техдолг, чтобы работа была видимой и плановой, а не подпольной.
Результат. Обязательно в цифрах: «ручная регрессия сократилась с 4 часов до 40 минут, ошибки в модуле оплаты упали на 70 процентов за квартал, новая форма стала делаться за два дня вместо недели».
Сильный дополнительный ход: рассказать, что решили не трогать и почему. Умение оставить работающий некрасивый модуль в покое ценится выше готовности переписать всё.
Где спотыкаются
Отвечают абстрактно («рефакторил, улучшал читаемость») либо гордо описывают полное переписывание без тестов и без метрик, что читается как обещание устроить то же самое на новом месте.