У термина «технический долг» проблема: его обычно произносят с эмоциональной окраской. «Тут такой долг, что страшно». «Срочно надо рефакторить». Эта подача мешает принимать решения. В реальности долг - это банальная финансовая метафора: вы взяли «в кредит», теперь решаете, гасить ли и в каком темпе.
Четыре типа долга
- Сознательный осторожный: «делаем сейчас грязно, потому что нам важна скорость, в спринте N+2 переделаем».
- Сознательный безответственный: «знаем, что грязно, но никогда не вернёмся».
- Несознательный: «делали как умели - оказалось, что это плохо».
- Эволюционный: «было хорошо, потом задача поменялась - теперь не подходит».
Главный вопрос: сколько он стоит в месяц
Долг становится проблемой, когда платежи по нему становятся сравнимы с разработкой новой функциональности. Если каждая новая фича в условном модуле X занимает в полтора-два раза больше времени, чем должна, - у вас проблема. Если фичи в этом модуле просто редкие - проблемы нет.
Когда платить
- Долг находится в hot zone: модуль, где ведётся активная разработка.
- Долг блокирует более чем одну запланированную фичу.
- Долг создаёт регулярные баги, которые тратят время на воспроизведение и фикс.
- Долг мешает онбордингу новых разработчиков (важно для растущей команды).
Когда не платить
- Долг в коде, который не трогали полгода и не планируют.
- Стабильный legacy-модуль, который работает и не нуждается в развитии.
- Чужой grand-style рефакторинг «по красоте», без бизнес-обоснования.
- Долг, фикс которого требует переписать половину системы.
Как мы это считаем на проектах
Раз в квартал команда проходит по бэклогу долга и у каждой записи отвечает на три вопроса: сколько часов уйдёт на фикс, сколько часов в месяц мы теряем сейчас, и через сколько месяцев фикс окупится. Всё, что окупается дольше 12 месяцев - отправляется в архив без обсуждения.