Содержание

Технический долг — это накопленные упрощения и устаревшие решения в коде, из-за которых каждое новое изменение стоит дороже, чем могло бы. Бизнесу его объясняют не через «плохой код», а через деньги и сроки: сколько времени команда теряет на обходы, как часто релизы ломают работающее и какие риски несут устаревшие зависимости. Управляют долгом регулярно — выделенной долей времени и приоритетами, а не разовой «большой переделкой».

Разберём, откуда берётся долг, как его измерить и как договориться с бизнесом о его погашении.

Откуда берётся технический долг?

Технический долг берётся из осознанных компромиссов ради скорости и из неосознанного старения кода: продукт меняется, а архитектура и зависимости остаются прежними. Сам по себе долг — нормальный инструмент: быстро выпустить MVP с упрощениями часто правильно. Проблема начинается, когда долг не возвращают.

Типичные источники:

  • упрощения ради срока, которые обещали «потом переделать»;
  • требования изменились, а код подгоняли под них заплатками;
  • фреймворк и библиотеки не обновлялись годами;
  • нет тестов, и любое изменение требует долгой ручной проверки;
  • знания о системе остались у людей, которые ушли.

Как понять, что долг стал проблемой?

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

Признак Как измерить Что это значит для бизнеса
Задачи становятся дольше Время от начала до выкладки растёт Функции выходят медленнее и дороже
Релизы ломают работающее Число ошибок после релиза Клиенты сталкиваются с проблемами
Устаревшие зависимости Отставание версий, известные уязвимости Риск взлома и вынужденного срочного обновления
«Опасные» модули Задачи в этих модулях оценивают с большим запасом Часть продукта фактически заморожена
Долгий онбординг Время до первой самостоятельной задачи новичка Дорого расширять команду

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

Маркер рядом со стикерами Фото: Unsplash

Как объяснить технический долг бизнесу?

Технический долг объясняют бизнесу на языке денег, сроков и рисков: не «код плохой», а «функции в этом модуле обходятся нам вдвое дороже», «устаревшая версия фреймворка перестанет получать исправления безопасности в конце года», «каждый третий релиз требует срочного исправления». Хорошо работает аналогия с кредитом: проценты — это время, которое команда платит на каждой задаче.

Как сформулировать предложение

  1. Опишите проблему через влияние: время, ошибки, риски.
  2. Покажите данные: метрики за последние месяцы, примеры задач.
  3. Предложите конкретную работу с оценкой и ожидаемым эффектом.
  4. Предложите вариант поэтапного погашения без остановки продуктовой разработки.
Предложение по техдолгу
Проблема: модуль заказов без тестов, любая правка — 2–3 дня регрессии вручную
Данные: за квартал 5 из 12 релизов потребовали срочных исправлений
Работа: тесты на ключевые сценарии и рефакторинг расчёта цен, ~3 недели
Эффект: регрессия — часы вместо дней, меньше ошибок после релиза
План: 20% времени команды в течение двух месяцев

Как управлять техническим долгом регулярно?

Долгом управляют регулярно: выделяют постоянную долю времени команды, ведут список долга рядом с продуктовым бэклогом и гасят его вместе с продуктовыми задачами в тех же модулях. Большие «проекты по переписыванию» обычно проигрывают постепенной работе.

Практики, которые работают:

  • постоянная доля времени на технические задачи — например, пятая часть итерации;
  • правило бойскаута: оставлять код, который трогаешь, немного лучше, чем он был;
  • технический долг в том же бэклоге и с той же приоритизацией — о методах в статье приоритизация бэклога;
  • регулярное обновление зависимостей небольшими шагами;
  • автотесты перед рефакторингом, чтобы изменения были безопасными.

Когда долг проще не гасить?

Долг проще не гасить в коде, который скоро будет удалён, в модулях, которые почти не меняются и работают стабильно, и в прототипах, которые проверяют гипотезу. Гасить стоит там, где долг реально мешает: в часто изменяемых и критичных частях продукта.

Где погашение окупается быстрее всего:

  • модули, которые меняются в каждой итерации;
  • платежи, авторизация, расчёты — где ошибки дороги;
  • устаревшие зависимости с известными уязвимостями;
  • места, из-за которых новые разработчики долго входят в проект.

Коротко

  • Технический долг — упрощения и устаревшие решения, из-за которых изменения дорожают.
  • Долг — нормальный инструмент для скорости, проблема — когда его не возвращают.
  • Объясняйте долг бизнесу через деньги, сроки и риски, с данными и конкретным предложением.
  • Гасите регулярно: доля времени команды, общий бэклог, небольшие шаги и тесты.
  • Начинайте с часто меняющихся и критичных модулей, стабильный код можно не трогать.

Частые вопросы

  • Можно ли вообще не иметь технического долга?

    Практически нет: продукт и технологии постоянно меняются, и часть решений неизбежно устаревает. Цель — не нулевой долг, а долг под контролем, который не мешает развивать продукт.

  • Сколько времени команды отдавать на техдолг?

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

  • Когда лучше переписать систему, а не гасить долг?

    Редко: переписывание дорогое и рискованное. Оно оправдано, когда технология больше не поддерживается или архитектура принципиально не подходит под новые требования, и даже тогда его лучше делать постепенно.