Если еще не знаешь: технический долг

Что такое технический долг

22 Aug 2021


...

Что вообще происходит?

Технический долг (technical debt) – это образ/аналогия, чтобы думать о хаосе, который накапливается в проекте.

Как выглядит техдолг

Обычный долг: беру сейчас, пользуюсь, отдаю потом (с процентами).

Технический долг в IT-проекте: принимаем решение, которое сейчас экономит время или усилия, и за которое будем “платить с процентами” потом.

Например:

  • сделать copy-paste метода сейчас, а аккуратно абстрагировать потом
  • выпустить новую фичу сейчас, а автотесты дописать потом
  • запустить проект без эксплуатационной документации сейчас, и дописать документацию потом

Отложенная несделанная работа в проекте – это и есть технический долг.

Интересно, что не обязательно технический долг создается действиями. Типичный случай техдолга – откладываемые обновления (библиотек, фреймворков, компиляторов и т.д.) Здесь мы как команда не делаем ничего сейчас и этим ничегонеделанием создаем себе работу потом.

В этом отношении накопление техдолга может быть больше похоже не на получение кредита в банке, а на набор избыточного веса: происходит постепенно, незаметно, когда ничего особенного казалось бы не делаешь.

Проценты

А где здесь “проценты”?

“Основной долг” – это работа, которую мы делаем не сейчас, а потом.
“Проценты” – это дополнительная работа, которую мы вынуждены делать все то время, пока не сделана отложенная работа (не выплачен “основной долг”).

В примерах выше:

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

Что здесь важно: выплату “основного долга” можно откладывать неопределенно долго, а “проценты” мы как команда платим постоянно и неизбежно.

Это плохо?

Мне кажется, сам по себе технический долг – это не хорошо и не плохо.

Когда мы (команда) откладываем определенную работу на потом, мы покупаем для себя дополнительное время сейчас. Если мы используем это дополнительное время достаточно выгодно, и делаем отложенное достаточно быстро, то в итоге остаемся в выигрыше.

Если же мы откладываем работу на “когда-нибудь потом” бессистемно и хаос в проекте накапливаем неконтролируемо, то когда-нибудь этот хаос “взорвется” и развитие проекта совсем застопорится. Продолжая банковскую аналогию, можно назвать такую ситуацию “техническим банкротством”: новые фичи невозможно реализовать за разумное время из-за накопленной отложенной работы.

Ссылки