Технический долг, рефакторинг, миграция легаси

↑ 9.1 Техлид на бэкенде · ← Предыдущая · → Следующая

Обязательно~3 мин чтенияУровень: senior

Зачем это на собесе

Как вы убеждаете бизнес выделять время на долг и безопасно меняете старую систему.

Объяснение

Технический долг — решения, ускорившие поставку сейчас за счёт стоимости изменений в будущем. Как финансовый долг: «проценты» — замедление разработки и рост рисков.

ТипПример
Осознанный«сделаем быстро, вернёмся»
Неосознанныйнеопытность, незнание практик
Архитектурныйневерные границы, общая БД
Тестовыйнет тестов, хрупкие тесты
Инфраструктурныйустаревшие зависимости, ручной деплой
Документационныйнет знаний о системе

Как управлять:

  1. Сделать видимым: реестр долга (issue-теги, ADR) с оценкой «стоимости» (замедление, риск).
  2. Приоритизировать по влиянию: что мешает чаще всего или создаёт риск инцидентов.
  3. Выделять бюджет: постоянная доля времени (например, 15–20% спринта) + долг рядом с изменяемым кодом («правило бойскаута»).
  4. Говорить языком бизнеса: «фича X занимает 3 недели вместо 1 из-за модуля Y; исправление за 2 недели окупится за квартал».
  5. Не делать «большой переписывание».

Рефакторинг: небольшими шагами под защитой тестов; сначала характеризационные тесты (фиксируют текущее поведение), затем структурные улучшения без изменения поведения.

Миграция легаси:

ПодходСуть
Strangler Figновый функционал в новой системе, постепенный перенос маршрутов через прокси
Branch by abstractionабстракция над старым кодом, переключение реализации флагом
Anti-Corruption Layerизоляция старой модели
Параллельный запуск (shadow, dark launch)сравнение результатов старого и нового
Feature flagsпостепенное включение
Миграция данныхдвойная запись, синхронизация, переключение чтения

Нюансы и подводные камни

  • «Переписывание с нуля» обычно дороже и дольше, чем кажется, и теряет неявные требования.
  • Рефакторинг без тестов и без ограничений по времени превращается в бесконечный проект.
  • Долг без владельца не закрывается.
  • Не любой «плохой код» — долг: если код не меняется, его исправление может не окупиться.

Практика

  1. Заведите реестр из 10 долгов с оценкой влияния и стоимости.
  2. Составьте план Strangler Fig для одного модуля.
  3. Подготовьте аргументацию для менеджера: цена бездействия в днях разработки.

Вопросы с ответами

Связанные темы