# Управление техническим долгом
# Описание
Технический долг – это несделанная в проекте работа, которая будет мешать его развитию в будущем, если так и не будет выполнена. В технический долг не включаются баги или отложенные низкоприоритетные фичи. Технический долг – это, например, плохо спроектированная архитектура или запутанный код.
Управление техническим долгом – это его постоянный поиск, подсчёт стоимости и постепенное устранение.
# Почему ветка важна?
- В будущем команде проще будет поддерживать разрабатываемый ею проект
- Появляется возможность прогнозировать стоимость технических компромиссов
- Весь текущий технический долг переводится в разряд видимого и известного
# Что будет, если её не делать?
- Будет расти время на разработку и стоимость поддержки системы
- Усложняется анализ кода, требуется много времени, чтобы разобраться в нём
- Тяжелее вносить изменения – системы с техническим долгом отличаются хрупкостью
- В какой-то момент станет невозможной дальнейшая поддержка системы
- Её придётся выводить из использования или переписывать с нуля
# На кого может быть делегирована?
На ответственного за проект разработчика или архитектора
# Примеры поведения
# Примеры плохого поведения
- Программист делает ошибки при разработке проекта, которые не отлавливаются на code review или статическим анализом
- Когда ситуация вынуждает осознанно писать код быстро и некачественно, к нему в будущем не возвращаются для рефакторинга
- Объем технического долга не известен руководству
- В команде не выделяется время на периодическое исправление технического долга
- Разработчики игнорируют мелкие дефекты качества и не пытаются их исправить на месте по правилу бойскаута
# Примеры хорошего поведения
- В каждом спринте выделяется определённый процент времени на решение технического долга
- Весь крупный технический долг инвентаризирован
- Неумышленный технический долг отлавливается ручными и автоматизированными проверками качества
# Способы прокачки
# Практика
# Контроль качества внешним аудитом
Для того, чтобы оценить текущее состояние технического долга на проекте, можно привлечь внешних консультантов. Этот способ часто применяется при передаче проекта от одной компании к другой или при полной смене команды разработки.
Минусы:
- Внешние аудиторы не погружены в специфику проекта
- Это разовая проверка, которая позволяет получить только текущий срез состояния проекта
- Это довольно дорого
- Результат аудита сильно зависит от компетентности людей, которую трудно проверить
Плюсы:
- Глаз внешних людей не замылен
# Code Review
Процесс code review детально описан в отдельной ветке.
# Автоматизация оценки качества кода
Лучше всего бороться с кратковременным техническим долгом позволяет автоматизация проверки качества кода в CI. Для этого можно использовать подходящий для вашего языка статический анализатор. Точно стоит посмотреть на SonarQube – скорее всего там уже есть подходящий вам плагин.
Минусы:
- Статические анализаторы не спасут от того, чтобы инвентаризировать крупный технический долг самостоятельно – о пробелах в вашей архитектуре и выбранном стеке технологий они не скажут
- Чтобы автоматическая оценка приносила пользу, нужно делать так, чтобы её показатели со временем улучшались, а обозначенный ею технический долг решался
- Численный показатель, который выдаётся наружу такими системами, скорее всего, очень далёк от реальности
Плюсы:
- Отлавливается много мелких ошибок и проблем, которые можно пропустить на code review
- Не отнимает много времени, не считая первичной настройки
- Можно задавать гибкие правила для своей команды
- Можно отслеживать увеличение или понижение технического долга
# Консультации
# Теория
# Статьи
- Технические долги
- Wikipedia on Technical Debt
- Martin Fowler on Technical Debt
- TechnicalDebtQuadrant
- Управление техническим долгом - Концепция Continuous Inspection