# Управление техническим долгом

# Описание

Технический долг – это несделанная в проекте работа, которая будет мешать его развитию в будущем, если так и не будет выполнена. В технический долг не включаются баги или отложенные низкоприоритетные фичи. Технический долг – это, например, плохо спроектированная архитектура или запутанный код.

Управление техническим долгом – это его постоянный поиск, подсчёт стоимости и постепенное устранение.

# Почему ветка важна?

  • В будущем команде проще будет поддерживать разрабатываемый ею проект
  • Появляется возможность прогнозировать стоимость технических компромиссов
  • Весь текущий технический долг переводится в разряд видимого и известного

# Что будет, если её не делать?

  • Будет расти время на разработку и стоимость поддержки системы
    • Усложняется анализ кода, требуется много времени, чтобы разобраться в нём
    • Тяжелее вносить изменения – системы с техническим долгом отличаются хрупкостью
  • В какой-то момент станет невозможной дальнейшая поддержка системы
    • Её придётся выводить из использования или переписывать с нуля

# На кого может быть делегирована?

На ответственного за проект разработчика или архитектора

# Примеры поведения

# Примеры плохого поведения

  • Программист делает ошибки при разработке проекта, которые не отлавливаются на code review или статическим анализом
  • Когда ситуация вынуждает осознанно писать код быстро и некачественно, к нему в будущем не возвращаются для рефакторинга
  • Объем технического долга не известен руководству
  • В команде не выделяется время на периодическое исправление технического долга
  • Разработчики игнорируют мелкие дефекты качества и не пытаются их исправить на месте по правилу бойскаута

# Примеры хорошего поведения

  • В каждом спринте выделяется определённый процент времени на решение технического долга
  • Весь крупный технический долг инвентаризирован
  • Неумышленный технический долг отлавливается ручными и автоматизированными проверками качества

# Способы прокачки

# Практика

# Контроль качества внешним аудитом

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

Минусы:

  • Внешние аудиторы не погружены в специфику проекта
  • Это разовая проверка, которая позволяет получить только текущий срез состояния проекта
  • Это довольно дорого
  • Результат аудита сильно зависит от компетентности людей, которую трудно проверить

Плюсы:

  • Глаз внешних людей не замылен

# Code Review

Процесс code review детально описан в отдельной ветке.

# Автоматизация оценки качества кода

Лучше всего бороться с кратковременным техническим долгом позволяет автоматизация проверки качества кода в CI. Для этого можно использовать подходящий для вашего языка статический анализатор. Точно стоит посмотреть на SonarQube – скорее всего там уже есть подходящий вам плагин.

Минусы:

  • Статические анализаторы не спасут от того, чтобы инвентаризировать крупный технический долг самостоятельно – о пробелах в вашей архитектуре и выбранном стеке технологий они не скажут
  • Чтобы автоматическая оценка приносила пользу, нужно делать так, чтобы её показатели со временем улучшались, а обозначенный ею технический долг решался
  • Численный показатель, который выдаётся наружу такими системами, скорее всего, очень далёк от реальности

Плюсы:

  • Отлавливается много мелких ошибок и проблем, которые можно пропустить на code review
  • Не отнимает много времени, не считая первичной настройки
  • Можно задавать гибкие правила для своей команды
  • Можно отслеживать увеличение или понижение технического долга

# Консультации

# Теория

# Статьи

# Подкасты

# Видео