Technical debt

Технический долг — объем известных проблем, отложенных на потом.

В этом разборе

Technical debt — технический долг: особенности внутреннего устройства системы, из-за которых дальнейшие изменения требуют лишних усилий. Это метафора затрат на развитие, а не сумма, которую команда кому-то должна.

Если всё работает, где долг?

Приложение может выполнять свою задачу, но быть неудобным для изменения. Представьте, что одно правило продублировано в нескольких модулях. Чтобы изменить его, разработчику приходится находить и согласованно исправлять каждую копию.

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

The feature works, but changes to it take longer because of technical debt.

Функция работает, но из-за технического долга её изменения занимают больше времени.

Термин не является точным синонимом bug. Ошибка описывает проблему в работе; долг выделяет дополнительную нагрузку при развитии системы. В конкретном случае они могут быть связаны.

Что называют процентами и погашением

В метафоре долга «проценты» — лишние усилия при изменениях. «Погашение» — улучшение устройства системы, которое уменьшает эти усилия. Поэтому в рабочей речи встречаются pay down technical debt и короткая форма tech debt.

We need to pay down the tech debt in this module.

Нам нужно уменьшить технический долг в этом модуле.

Это не обещание перечислить деньги. И финансовую метафору не стоит переносить буквально: по объяснению Мартина Фаулера, дополнительные затраты возникают, когда приходится работать с проблемным участком, а не просто от течения времени.

Назначает ли термин виновного?

Нет. В обсуждениях долг часто связывают со спешкой или сознательным выбором в моменте, но выражение само по себе не говорит, было ли решение сознательным или кто его принял. Фаулер различает намеренно и ненамеренно возникший долг; причины нужно выяснять отдельно.

Проверьте себя

Подумайте над ответом и откройте объяснение.

1. Может ли долг быть у работающей функции?

Функция выдаёт правильный результат, но каждое изменение требует исправлять несколько дублирующих модулей.

It works, but we keep paying interest on the tech debt.

  1. Нет: technical debt возможно только после поломки функции.
  2. Да: речь может быть о дополнительных усилиях при изменении.
Показать ответ

Верный ответ — 2. Работающий результат не исключает неудобного внутреннего устройства. Interest в этой метафоре — дополнительные усилия, а не буквальные денежные проценты.

2. Что известно о виновнике?

В отчёте есть только эта фраза.

This module has technical debt.

  1. Конкретный разработчик сознательно испортил код.
  2. Из одной фразы нельзя установить ни виновника, ни сознательность решения.
Показать второй ответ

Верный ответ — 2. Technical debt называет проблему устройства и будущих изменений. Долг может возникнуть намеренно или ненамеренно; причины и ответственность требуют отдельного контекста.

Источники

  1. Martin Fowler: Technical Debt — метафора затрат
  2. Martin Fowler: Technical Debt Quadrant — намеренный и ненамеренный долг
  3. Вопрос новичка о термине technical debt — Reddit SaaS

Примеры без отдельной пометы составлены для объяснения.

Сообщить об ошибке