Технический долг: что это такое
Что вообще происходит?
Технический долг (technical debt) – это образ/аналогия, чтобы думать о хаосе, который накапливается в проекте.
Как выглядит техдолг
Обычный долг: беру сейчас, пользуюсь, отдаю потом (с процентами).
Технический долг в IT-проекте: принимаем решение, которое сейчас экономит время или усилия, и за которое будем “платить с процентами” потом.
Например:
- сделать copy-paste метода сейчас, а аккуратно абстрагировать потом
- выпустить новую фичу сейчас, а автотесты дописать потом
- запустить проект без эксплуатационной документации сейчас, и дописать документацию потом
Отложенная несделанная работа в проекте – это и есть технический долг.
Интересно, что не обязательно технический долг создается действиями. Типичный случай техдолга – откладываемые обновления (библиотек, фреймворков, компиляторов и т.д.) Здесь мы как команда не делаем ничего сейчас и этим ничегонеделанием создаем себе работу потом.
В этом отношении накопление техдолга может быть больше похоже не на получение кредита в банке, а на набор избыточного веса: происходит постепенно, незаметно, когда ничего особенного казалось бы не делаешь.
Проценты
А где здесь “проценты”?
“Основной долг” – это работа, которую мы делаем не сейчас, а потом.
“Проценты” – это дополнительная работа, которую мы вынуждены делать все то время, пока не сделана отложенная работа (не выплачен “основной долг”).
В примерах выше:
- пока в коде живет скопированный метод, при каждом изменении метода-оригинала надо не забыть внести правки и в скопированный метод тоже
- пока нет автотестов, придется либо вручную проверять в каждом релизе, что фича не сломалась, либо обнаруживать неожиданные поломки в продакшене
- пока нет документации, каждый, кому надо изучить систему, будет тратить дополнительные усилия: придется расспрашивать коллег, перечитывать старую переписку на рассылке, разбираться в исходном коде и т.д.
- в необновленных библиотеках нет новых полезных фич и наоборот, находятся баги; вокруг всего этого приходится строить обходные решения
Что здесь важно: выплату “основного долга” можно откладывать неопределенно долго, а “проценты” мы как команда платим постоянно и неизбежно.
Это плохо?
Мне кажется, сам по себе технический долг – это не хорошо и не плохо.
Когда мы (команда) откладываем определенную работу на потом, мы покупаем для себя дополнительное время сейчас. Если мы используем это дополнительное время достаточно выгодно, и делаем отложенное достаточно быстро, то в итоге остаемся в выигрыше.
Если же мы откладываем работу на “когда-нибудь потом” бессистемно и хаос в проекте накапливаем неконтролируемо, то когда-нибудь этот хаос “взорвется” и развитие проекта совсем застопорится. Продолжая банковскую аналогию, можно назвать такую ситуацию “техническим банкротством”: новые фичи невозможно реализовать за разумное время из-за накопленной отложенной работы.
Ссылки
- Мой конспекто-перевод одной презентации с давней конференции: https://blog.liruoko.ru/ru/2010-02/get-out-of-technical-debt-now-translation/
- Статья от Atlassian про технический долг (англ.): https://www.atlassian.com/agile/software-development/technical-debt