Все разработчики знают, что такое техдолг.
Но практика показывает, что даже в рамках одной команды люди могут по разному трактовать понятия техдолга, технических задач и пр.
Предлагаю разобраться, что же это такое, откуда берется и что с этим всем можно делать.
В первом приближении техдолг - это некоторое количество задач, которые мы должны сделать. Отсюда возникает два вопроса:
Что это за задачи?
Почему мы становимся должны их сделать?
Технические задачи (техтаски) - задачи, которые:
не реализуют функциональные требования к системе;
влияют на процесс разработки или нефункциональные требования. Естественно, что такое определение требует знания как ФТ/НФТ к системе, так и процессов разработки. Если процессы разработки становятся медленнее или система перестает удовлетворять НФТ - у нас, как у команды, появляются проблемы. Появляются они из-за того, что мы своевременно (или заблаговременно) что-то не сделали, и теперь должны приложить усилия(порой и сверхусилия) для стабилизации ситуации. Набор таких не сделанных своевременно задач и является техдолгом команды.
Почему задачи могли быть не выполнены своевременно:
О них не было известно;
Не начали работу вовремя;
Оптимистично оценили свои силы/время на выполнение;
Нехватка людей/экспертизы;
Внешние факторы: ургенты/катаклизмы/больничные и т.п.
Внешние факторы скорее относятся к рискам - команда может влиять на них далеко не всегда, поэтому перейдем к тем пунктам, которые относятся непосредственно к процессам в команде и вне ее.
Техбэклог. Узнаем о задачах заранее
Если задача стала частью техдолга, потому что команда о ней не знала - нужно научиться знать о задачах как можно раньше.
Само по себе незнание может иметь разные корни:
Знали, да забыли. Годами висящие тудушки в коде, забытые сроки обновлений версий БД, упущенные договоренности "сделать, как надо" после выпуска бизнес фич (особенно таким грешат задачи категории "срочно и вчера") - большинство команд сталкиваются с подобными ситуациями.
Не собирали/не анализировали метрики. Не следили за потреблением ресурсов, и вдруг очередной релиз не раскатывается из-за превышения лимитов. Не следили за bug rate и не заметили необходимость рефакторинга. Не следили за пулом коннектов к БД и начали падать при клиентской нагрузке. И так далее.
Не подумали/не предусмотрели. Не знали, что фича будет развиваться быстро и не заложили архитектуру. Не знали, что потребитель будет закидывать в топик 100500 событий в секунду и нам это нужно быстро обрабатывать. Ясно, что нельзя предусмотреть все - но попробовать то стоит.
Внешнее не дошедшее (заранее) до команды требование. Переезды инфраструктуры, апдейты версий брокеров/БД. Взлом конкурента и последующие проверки ИБ - мир вокруг движется и развивается, неизбежно затронет и нас.
Все это можно в значительной степени решить посредством "простых" вещей:
Знать "настоящее": где мы сейчас и что у нас не так.
Смотреть в будущее. Будущее фичи, проекта, технологий.
Фиксировать имеющиеся и потенциальные проблемы.
Смотреть по сторонам: ИБ, смежники, комьюнити, геополитика, новости предметной области и т.д.
Место, куда складируются задачи на решение обнаруженных проблем - технический бэклог команды (техбэклог). Его полнота позволяет минимизировать проблему незнания (если, конечно, бэклог не становится "долгим ящиком", в который никто не смотрит).
Не все из этих задач потенциально перейдут в категорию техдолга: только те, задержка по которым негативно повлияет на бизнес или текущие процессы команды. Разного рода улучшения могут "не выстрелить" никогда, и это нормально - не получится сделать все идеально и поддерживать в таком состоянии на длинной дистанции.
Важно отметить, что есть команды/проекты, где не разделяют бизнес и тех бэклог - обычно в таком случае нет выделенной квоты на тех задачи ввиду сквозного приоритета.
К сожалению, мне в таком режиме поработать не довелось, буду рад увидеть мнения по поводу в комментариях. Но со стороны кажется, что в таком случае необходимость ведения технической части бэклога только возрастает - интересанты на бизнес задачи есть всегда, а вот про техтаски до известного всем момента с домашней птицей никто, кроме команды, и не вспомнит.
Планирование. Стремимся начинать работу вовремя
Мало вести техбэклог - нужно еще что-то из него делать. При правильном ведении задач в нем всегда будет больше, чем мы можем взять в работу, и методика отбора выходит на первый план.
Методик этих огромное множество, каждый может придумать свою - лишь бы работала и выполняла возложенное. На практике встречалось несколько, со своими преимуществами и недостатками. Вот лишь некоторые возможные варианты:
Планирование силами лида;
Выделение отдельной роли;
Автоматизация через расчет score (RICE/ICE и т.п);
Демократия (выбирает вся команда);
Анархия (что хочу - то и беру).
Оценка. Учимся на своих ошибках
Часто разработчики промахиваются в оценках в худшую сторону. Более того, техтаски порой и вовсе не оцениваются. Частично проблема решается качественным планированием и приоритизацией - все таки набор задач на итерацию подразумевает учет затрат на их выполнение. Тем не менее, проблема полностью не решается (ну или я не знаю применимых в жизни решений) - все равно будут недооцененные задачи.
Поэтому тут стоит идти итеративно - периодически оглядываться назад, проводить рефлексию и учитывать полученный опыт в дальнейшей работе. Главный друг в таком подходе - фиксация ожиданий/реальности. Иначе выводов будет делать не из чего, а субъективные ощущения могут быть обманчивы.
Конечно, можно еще и на чужих ошибках учиться. У меня получается с трудом, буду рад, если у вас дела с этим лучше)
Ресурсы/экспертиза. Аргументируем, ищем, выращиваем.
Случаются ситуации, когда проблема есть, а решить ее некому - либо никто не в курсе технологии (или предметной области), или банально все заняты. Без построенного планирования подобные задачи гарантированно попадают в разрад техдолга. При построенном планировании решение ложится на плечи менеджмента в команде - найти ресурс/экспертизу к нужному моменту:
Объяснить риски/профиты руководству/бизнесу и высвободить ресурсы(это про человекочасы и т.п.) и (или) привлечь внешнюю экспертизу;
Запланировать получение экспертизы внутри (изучить/научиться самим до начала выполнения задачи). Для любого из вариантов нужно каким-то образом понимать, насколько хорошо мы справляемся c входящим потоком тех задач:
Сколько их у нас;
Сколько из них уже стали техдолгом;
Какая доля задач становится техдолгом сразу в момент появления;
Какая доля задач "эволюционирует" в техдолг;
Насколько быстро изменяется объем техдолга и тех бэклога. Наблюдая за этими метриками, можно многое узнать об эффективности работы команды в контроле техдолга и получить почву для размышлений о том, что можно сделать для улучшения ситуации.
Что в итоге
Техдолг победить практически невозможно. Все, что остается - контролировать его масштаб и влияние на команду, процессы и продукт.
Это требует времени и постоянной работы:
Формирование тех бэклога;
Приоритизация и планирование;
Ретроспективы, пост мортемы и прочие методы рефлексии;
Сбор и контроль метрик;
Управление ресурсами и экспертизой.
В обмен команда получает возможность работать более предсказуемо, спокойно и уверенно.
По крайней мере мне с введением всего описанного жить и работать стало гораздо комфортнее, чего и вам желаю)
Комментарии (5)

Yuvitch
05.11.2025 19:19Задачи низкого приоритета не выполняются никогда
Ну, где-как.. Задача, если она поставлена, выполняется всегда. Если задача имеет низкий приоритет и она долго не выполняется (полгода, год), ее отменяют.
А отмененная задача -- все равно что выполненная.

Yuvitch
05.11.2025 19:19Вроде все правильно написано, но, мне кажется, техдолг -- это не несделанные задачи, а сделанные, но не оптимально, на "скорую руку", иногда с таким комментарием: "сделано через ж0пу -- не было времени", -- это я лично видел при анализе кода.

scome Автор
05.11.2025 19:19Пласт задач такой природы тоже можно поделить на две части:
В этом участке появляются новые задачи, скорость их выполнения ниже, чем если бы было отрефакторено. В таком случае задача на рефакторинг - техдолг
Этот функционал сделали один раз и бизнес не намерен его развивать. Тогда задача на рефакторинг - техбэклог.
С течением времени бизнес может снова вернуться и попросить добавить что-то новое в наскоро спроектированное решение. И вот примерно тут и помогает то, что описано в статье:
задача есть в техбэклоге;
Мы реагируем на изменяющиеся условия и планируем задачу в работу;
Делаем задачу до попадания в работу хотелки от бизнеса
Таким образом мы предотвратили появления техдолга или его потенциального увеличения

Yuvitch
05.11.2025 19:19Не известно, чем будет некоторое решение задачи.
Если запустили и забыли, то решение -- или техдолог, или паттерн, но это не известно в момент запуска.
Если бизнес решил развивать предмет и решение нужно переделывать, то это не техдолг.
Если же решение мешает реализации других задач, но пара "костылей" помогает, то это и есть техдолг.Таким образом мы предотвратили появления техдолга ...
Появление техдолга предотвращается использованием паттернов. Паттерн -- проверенное временем и реальной эксплуатацией решение для некоторой части предметной области. Он документируется. В инструкции приводятся различные варианты применения. Знаю компанию, где проводится обучение разработчиков таким типовым решениям, требуется их применение.
Иногда паттерн меняется, но не в рамках погашения техдолга, а вот результат погашения техдолга, чаще всего, становится паттерном.
Dhwtj
Задачи низкого приоритета не выполняются никогда