Автоматизация · 10 мин чтения

Технический долг: что это и почему сайт и системы со временем дорожают в поддержке

Технический долг простыми словами для владельца бизнеса: признаки на сайте и в CRM, откуда берётся, квадрант Фаулера, как оценить и гасить по плану с подрядчиком.

Обложка статьи о техническом долге: на глубоком сливовом фоне слева крупный заголовок «Технический долг» и подпись «почему поддержка дорожает», справа башня из блоков сайта и систем, несколько блоков треснули и перемотаны лаймовой лентой, над башней лаймовая линия стоимости поддержки уходит вверх
Коротко

Технический долг это цена быстрых и временных решений в сайте или системе: отложенные обновления, тесты, документация и переделки. Как у кредита, у него есть проценты: лишние часы на каждую доработку в проблемной части. Метафору ввёл Уорд Каннингем в 1992 году, а Мартин Фаулер разделил долг на осознанный и случайный, разумный и безрассудный. Проценты платятся только там, где систему меняют, поэтому гасить долг стоит в первую очередь в часто изменяемых частях и там, где есть риск для данных и безопасности. Рабочая схема: реестр долга у подрядчика, строка о нём в ежемесячном отчёте, доступы и код у компании и договорённая часть времени на погашение каждый месяц.

Технический долг это цена быстрых и временных решений в сайте или программе, которую вы платите позже: каждая новая правка идёт дольше, ломается чаще и стоит дороже, чем могла бы. Долг появляется, когда что-то сделали «пока так», не обновили вовремя, не описали или не проверили тестами. Сам по себе он не катастрофа: иногда его берут осознанно, чтобы быстрее запуститься. Проблема начинается, когда долг никто не видит и не гасит. Тогда поддержка дорожает из месяца в месяц, а владелец бизнеса не понимает, за что платит.

Что такое технический долг простыми словами

Технический долг похож на кредит: вы экономите время сейчас, а потом платите проценты в виде лишних часов на каждую доработку. Метафору придумал программист Уорд Каннингем в 1992 году. В докладе на конференции OOPSLA он написал, что выпустить первую, ещё сырую версию кода похоже на то, чтобы взять в долг. Немного долга ускоряет работу, если его быстро вернуть, переписав код. Опасность в том, что долг не возвращают, и тогда каждая минута работы в обход неудачного кода становится процентами по нему.

Мартин Фаулер, автор известных книг о проектировании программ, объясняет это на примере. Допустим, новая функция при понятном устройстве системы заняла бы 4 дня, а из-за путаницы в коде занимает 6. Два лишних дня это проценты. Расчистка путаницы стоит 5 дней: это возврат основной суммы. Ради одной функции расчищать невыгодно, а если таких функций впереди три, расчистка окупается.

Финансовый долгТехнический долгКак это выглядит в малом бизнесе
Основная суммаРабота, которую отложили: обновление, тесты, документация, переделкаСайт пять лет не обновляли, «потом опишем, как устроена интеграция»
ПроцентыЛишние часы на каждую правку в этой части системыПоменять поле в форме заявки стоит как новая страница
ПросрочкаСбой или уязвимость, которую уже нельзя отложитьХостинг отключает старую версию PHP, и сайт перестаёт открываться
РефинансированиеПлановая расчистка или замена модуляПереписать модуль заказов, не трогая остальное

Важное отличие от банковского кредита: проценты по техническому долгу платятся только тогда, когда вы меняете эту часть системы. Код, который годами работает и никто его не трогает, почти ничего не стоит, даже если он некрасивый. Фаулер прямо советует гасить долг в первую очередь там, где правки идут чаще всего.

Признаки технического долга на сайте и во внутренних системах

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

  • Простые правки стали дорогими. Добавить поле в форму или новый статус в CRM оценивают в несколько дней, хотя раньше это делали за час.
  • Одно чинят, другое ломается. После исправления корзины перестаёт приходить письмо о заказе.
  • Подрядчик боится обновлять. «Лучше не трогать, всё развалится» звучит при каждом вопросе про обновление движка или модулей.
  • Систему знает один человек. Без конкретного программиста никто не может сказать, где лежит код и как работает обмен с 1С.
  • Нет описания и доступов. Пароли от хостинга, домена и репозитория у подрядчика, а не у компании.
  • Данные сверяют руками. Сотрудники каждый день проверяют, все ли заявки дошли, потому что интеграция иногда теряет записи.
  • Сроки и оценки растут. Каждая следующая доработка по похожей задаче оценивается дольше предыдущей.

У каждой части IT свои типичные долги. Посмотрите вкладку, которая ближе к вашей ситуации.

Где копится технический долг в небольшой компанииТипичные примеры по частям IT. Выберите то, что у вас есть, и сравните с признаками.
Типичный долгстарый движок и модули
Признак«лучше не обновлять»
Первый шагсписок версий и копия
  • Пример: правки вносят прямо в файлы шаблона, поэтому обновление темы стирает их.
  • Проверьте: какая версия PHP и движка стоит и поддерживается ли она сейчас.

Вывод: долг есть почти везде, вопрос в том, где он начисляет проценты прямо сейчас. Начинайте с той вкладки, где признак вам знаком по последнему месяцу.

Откуда берётся долг: четыре вида по Мартину Фаулеру

Долг бывает осознанным и случайным, разумным и безрассудным. Так его разделил Мартин Фаулер в заметке о «квадранте технического долга» 2009 года. Две оси дают четыре вида, и с каждым нужно обращаться по-своему.

Квадрант технического долга по Мартину Фаулеру на светлом фоне в сливовых и лаймовых тонах: по горизонтали ось от безрассудного к разумному, по вертикали от осознанного к случайному; четыре клетки с примерами из малого бизнеса: безрассудный осознанный, некогда думать, делаем как попало; разумный осознанный, запускаемся сейчас и записываем, что переделать; безрассудный случайный, сайт собрал человек без опыта и не знал, как правильно; разумный случайный, через год работы стало понятно, как надо было устроить систему; разумная половина выделена лаймовым
Разумный долг берут осознанно и записывают. Безрассудный появляется от спешки или неопытности и копится незаметно.
ВидКак звучитПример в небольшой компанииЧто делать
Разумный осознанный«Запускаемся сейчас, переделаем после проверки»Первая версия кабинета клиента без автоматических тестов, чтобы успеть к сезонуЗаписать в реестр долга и назначить срок возврата
Безрассудный осознанный«На архитектуру нет времени»Каждую новую услугу добавляют копией старой страницы с ручной правкой ценОстановить рост: договориться, как делать правильно с этого дня
Безрассудный случайный«А что, так нельзя было?»Интеграцию собрал знакомый без журнала ошибок, заявки иногда пропадаютСделать аудит и начать с того, что угрожает деньгам и данным
Разумный случайный«Теперь мы знаем, как надо было»Через год работы CRM стало ясно, что сделки и счета надо было разделитьНормальная часть развития: планировать переделку, когда она окупится

Осознанный долг часто берут при запуске новой услуги или продукта: проверить идею важнее, чем сделать идеально. Это разумно, если долг записан. Подробнее о том, как ограничить первую версию и не утонуть в ней, рассказано в статье о MVP.

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

Не каждая проблема в IT это техдолг, и путаница мешает договариваться с подрядчиком. Если всё называть долгом, слово перестаёт что-то значить.

  • Ошибка. Кнопка не работает. Это просто дефект, его чинят по гарантии или в рамках поддержки.
  • Новая функция. В CRM нет отчёта по менеджерам. Это доработка, а не долг.
  • Старый, но стабильный код. Раздел сайта не меняли три года, и он работает. Проценты не начисляются, пока его не трогают.
  • Вкусовые претензии. Новый программист хочет «переписать всё на другом языке». Это не долг, пока он не может показать, какие правки сейчас стоят дороже и почему.

Простой тест: долг это то, что делает будущие изменения медленнее или рискованнее. Если на будущие правки не влияет, это что-то другое.

Чем технический долг грозит бизнесу

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

Условный график на светлом фоне в сливовых и лаймовых тонах: по горизонтали месяцы работы с системой, по вертикали время на одну типовую доработку; сливовая линия без погашения долга плавно растёт и к концу уходит круто вверх, лаймовая линия с регулярной расчисткой небольшой частью времени каждый месяц остаётся почти ровной; между линиями закрашена область с подписью проценты по долгу; пометка, что схема условная и показывает форму, а не статистику
Условная схема: без регулярного погашения время на типовую правку растёт, с расчисткой остаётся ровным.
РискКак проявляетсяЧем платите
Дорогие доработкиОценки растут, сроки срываютсяДеньги и упущенные запуски
Неподдерживаемые версииДвижок, модули или язык без обновлений безопасностиВзлом, срочное обновление в аврале
Зависимость от одного человекаТолько он знает, как всё устроеноМесяцы на разбор, если он уйдёт
Потери данныхИнтеграция без журнала теряет заявкиКлиенты и ручная сверка
Невозможность растиНовую услугу, оплату или кабинет «не встроить»Переделка вместо доработки

Пример с версиями. По официальной таблице php.net ветка PHP 8.2 получает только исправления безопасности до 31 декабря 2026 года, а версии 8.1 и старше уже не поддерживаются вовсе. Многие сайты малого бизнеса до сих пор работают на старых ветках. Обновление само по себе обычно небольшая работа, но если модули сайта давно не обновляли, оно тянет за собой переделку несовместимых частей. Это и есть накопленные проценты.

Самый дорогой момент для погашения долга это авария. Обновлять версию в спокойном режиме с проверкой на копии сайта в разы безопаснее, чем в день, когда хостинг отключил старую ветку и сайт не открывается. Перед любой расчисткой нужна свежая резервная копия: как её настроить, рассказано в статье о бэкапе.

Как оценить технический долг без программиста в штате

Оценить долг можно и без чтения кода: нужен реестр, в который записывают каждую проблему и её цену. Реестр это обычная таблица или задачи в трекере с пометкой «техдолг». Заполняет его подрядчик, а вы проверяете, понятны ли формулировки.

Колонка реестраЧто писатьПример
Что не такЧеловеческим языком, без жаргонаОбмен заказами с 1С не пишет журнал ошибок
Где мешаетКакие задачи из-за этого дольше или опаснееКаждый сбой ищут вручную по 2–3 часа
Как часто трогаемСколько правок в этой части за месяц или кварталРаз в неделю
РискЧто будет, если не трогать: потеря данных, взлом, остановкаПотерянные заказы
Цена расчисткиОценка в часах16 часов
РешениеГасим сейчас, по плану или оставляемГасим в этом месяце

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

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

Калькулятор: окупится ли расчистка технического долгаСравнивает разовую расчистку одной части системы с переплатой за доработки в ней. Наборы в кнопках: примеры с условными цифрами, а не прогноз и не цены. Подставьте оценки своего подрядчика.
Окупаемость расчистки…
Задач в месяц, где мешает долг…
Задач в месяц, где переплата уйдёт (в пересчёте на полные)…
Экономия в месяц за вычетом поддержания порядка…
Итог через 12 месяцев…
Нужно задач в месяц, где мешает долг, чтобы окупиться за год…

Как считается: экономия в месяц = доработки × доля, где мешает долг × доля лишнего времени, которую уберёт расчистка × переплата за задачу × доля сэкономленных часов, которые уходят в дело, минус поддержание порядка. Переплату за задачу посчитайте так: лишние часы на задачу × ставка часа вашего подрядчика. Например, 4 лишних часа при условной ставке 2 000 ₽ дают 8 000 ₽. Лишние часы спросите у подрядчика: сколько заняла бы задача, если бы этой проблемы не было. Калькулятор не учитывает риски аварий и взлома, их оценивайте отдельно.

Как гасить технический долг по плану

Долг гасят понемногу и регулярно, а не одним большим проектом «переписать всё». Большая переделка останавливает развитие на месяцы и сама создаёт новый долг, а маленькие шаги видны в каждом ежемесячном отчёте.

  1. Стабилизировать. Резервные копии, мониторинг сайта и форм, журнал ошибок интеграций. Сначала перестаём терять данные.
  2. Забрать доступы и описать. Домен, хостинг, репозиторий, сервисы на компанию. Короткая карта: какие системы есть и как они связаны.
  3. Обновить то, что вышло из поддержки. Версии языка, движка, модулей. На копии, с проверкой основных сценариев.
  4. Добавить проверки. Автоматические тесты или хотя бы список ручных проверок для заказа, оплаты и заявки.
  5. Расчищать по реестру. Сначала части, которые меняют чаще всего. Каждую доработку в таком месте используют, чтобы заодно навести порядок рядом.

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

Переписывать систему с нуля стоит редко. Это оправдано, если платформа больше не поддерживается и обновить её нельзя, если почти каждая правка ломает что-то ещё, или если бизнес так изменился, что старая логика мешает больше, чем помогает. Даже тогда лучше заменять систему частями: сначала один модуль, потом следующий, пока старая и новая работают рядом.

Как договориться о техдолге с подрядчиком

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

Вопросы, которые стоит задать подрядчику сейчас:

  • Какие решения в нашей системе были временными и где они записаны?
  • Какие версии движка, языка и модулей у нас стоят и когда у них заканчивается поддержка?
  • Что станет самым дорогим через год, если ничего не делать?
  • Сможет ли другой программист разобраться в системе по документации без вас?
  • Где журнал ошибок интеграций и кто его смотрит?

Что прописать в договоре на поддержку или в техническом задании на новую систему:

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

Требования к документации и передаче кода лучше записать ещё до разработки: как это сделать, разобрано в статье о техническом задании на разработку программы. Если сайт уже работает и копит долг, начните с аудита и плана расчистки в рамках доработки и поддержки сайта.

Чек-лист: под контролем ли ваш технический долг

Отметьте то, что у вас уже есть. Чем больше отметок, тем меньше шанс, что долг неожиданно выставит счёт.

Под контролем ли ваш технический долг: 14 пунктовОтметьте то, что уже есть. Отметки сохраняются в этом браузере.
0 из 14

Типичные ошибки

  • Не признавать долг. «Сайт же работает» звучит до первой аварии. Долг растёт именно тогда, когда его не замечают.
  • Гасить всё подряд. Расчищают красивые, но стабильные части, а модуль, который правят каждую неделю, остаётся в прежнем виде.
  • Переписывать с нуля без причины. Полгода без доработок, а новая система копит свой долг.
  • Наказывать за честность. Если подрядчик за каждый названный долг получает претензию, он перестанет о нём говорить.
  • Держать доступы у подрядчика. Смена исполнителя превращается в расследование.
  • Обновлять в аварии. Версия вышла из поддержки год назад, а обновление делают в день, когда сайт уже не открывается.

Частые вопросы

Что такое технический долг простыми словами?

Это отложенная работа в сайте или программе: обновления, тесты, описание, переделка временных решений. Пока её не сделали, каждая новая правка в этой части идёт дольше и рискованнее. Эти лишние часы и есть проценты по долгу.

Кто придумал термин «технический долг»?

Программист Уорд Каннингем в докладе на конференции OOPSLA в 1992 году. Он сравнил выпуск сырого кода с займом: долг ускоряет работу, если его быстро вернуть, и тормозит её, если не возвращать.

Технический долг это всегда плохо?

Нет. Осознанный долг при запуске, например первая версия без части тестов, бывает разумным. Плохо, когда долг не записан, о нём никто не знает и его не гасят. Тогда проценты растут незаметно.

Как понять, что на нашем сайте есть технический долг?

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

Как оценить технический долг, если в штате нет программиста?

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

Нужно ли переписывать систему с нуля?

Редко. Это оправдано, если платформа больше не поддерживается, почти каждая правка ломает что-то ещё или логика бизнеса сильно изменилась. Даже тогда безопаснее заменять систему по частям, а не останавливать развитие на месяцы.

Что прописать о техдолге в договоре с подрядчиком?

Реестр долга в ежемесячном отчёте, письменную фиксацию осознанного долга с планом возврата, доступы, код и документацию на компанию, срок установки обновлений безопасности и долю времени на погашение каждый месяц.

Том Холоденин разбирает проект
Разбираю каждый сайт личноЭто не менеджер и не бот: ты сразу говоришь со мной.
Бесплатно · лично · ответ за 24 часа

Бесплатный разбор твоего сайта: найду реальные точки роста прибыли и оптимизации затрат

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

Где теряются заявки и деньгиТочки роста прибылиКакие затраты можно сократитьПлан первых шагов

Бесплатно и ни к чему не обязывает. Если улучшать нечего, так и скажу.

Спасибо! Разбор пришлю лично в течение рабочего дня.

Или сразу: как выглядит разбор и онлайн-проверка · записаться на созвон · собрать задачу в калькуляторе

Получить бесплатный разбор →