Стратегии работы с техническим долгом

Стратегии работы с техническим долгом #

Статья вдохновлена докладами с TechLead Conf и личным опытом системной работы с техдолгом.

Что такое техдолг и зачем он мне? #

Техдолг — это аналог кредита в банке: ускорение разработки сейчас путём замедления в будущем.

Техдолг увеличивает энтропию ПО:

Энтропия ПО (Software Entropy) — это деградация эффективности дальнейшей разработки программного обеспечения с течением времени.

Если техдолг игнорировать, то энтропия ПО уничтожит команду:

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

Управление техдолгом позволит продукту жить намного дольше.

А почему нельзя без техдолга? #

Есть метафора из сферы финансов: код — это пассив, а не актив.

  • Код забирает деньги и требует затрат на сопровождение
  • Продукт может принести деньги, окупив затраты на код

На практике, как только вы решаете проблему с помощью кода — вы сразу получаете в довесок техдолг в той или иной форме.

Оценка и учёт техдолга #

Допустим, у разработчика Васи в команде Продукта X появилось время на техдолг.

  • Какую именно задачу он возьмёт?
  • А способен ли он её сделать ?
  • Насколько она полезная в сравнении с другими?
  • Сколько времени она займёт согласно оценке?
  • Какова точность этой оценки?

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

Поэтому техлиду надо копить заметки о техдолге заранее:

  1. В личных заметах техлида
  2. В общей электронной таблице или на внутренней странице команды
  3. В трекере задач под отдельным тегом, эпиком или другим способом группировки

Занимайтесь не только добавлением в бэкелог техдолга, но и груммингом (триажем).

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

Как найти время на техдолг #

На техдолг нужно время. Есть 6 способов найти время на исправление технического долга:

  1. Налог на фичу — вы берёте техдолг как часть плановых работ над фичей, появлению которой мешает техдолг
    • пример: перед добавлением арабской версии сайта привести в порядок механизм интернационализации
    • пример: перед редизайном уведомлений, отправляемых на email клиентам, сделать новый механизм генерации писем из шаблона: с i18n, удобным языком шаблонов, снапшотными тестами
    • риск: налог на фичу может сильно увеличить оценку или добавить неопределённости
    • возможность: иногда с налогом на фичу оценка либо не меняется, либо становится стабильнее
  2. Квота X% — вы договаривайтесь с владельцами/менеджерами продуктов, что 10/25/50% в времени будет уходить на технические задачи
    • риск: технические задачи могут включать не только техдолг, но и дежурства, решение проблем производительности, инфраструктурные задачи и так далее
    • риск: на практике могут быть попытки «откусить» часть квоты под бизнес-задачи, поскольку в моменте они выглядят важнее
  3. Остаток периода — вы договариваетесь с владельцами/менеджерами продуктов, что в конце квартала или года остаток времени уйдёт на техдолг
    • минус: этого остатка очень мало
    • риск: остаток будет «съеден» текущими бизнес-задачами и «долгами» команды по ним
  4. Выходные дни — разработчик исправляет проблемы вне рабочего времени
    • очевидно, что это будет либо добровольно по желанию разработчика, либо с нарушением ТК
    • риск: борьба с техдолгом во внеурочное время крайне демотивирует
    • работает, наверное, только с техническими улучшениями, если разработчик очень хочет их получить
  5. Выделенная команда — в продукте выделяют подкоманду, которая занимается техдолгом
    • риск: не все разработчики в восторге от такой роли
    • такой команде по-прежнему надо определять приоритеты и грамотно расходовать время
    • такие команды часто называют «командой ядра» (core team)
  6. Когда нечем заняться — когда разработчику в моменте нечего делать, он берётся за техдолг
    • риск: неочевидная нагрузка на другие узлы в цепочке создания ценности (value stream) снизит продуктивность команды
    • риск: задачу на техдолг берёт кто угодно, а не тот, кто сделал бы её лучше
    • риск: крупный техдолг сделан не будет

Из личного опыта:

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

От техдолга к техническому улучшению #

Суть идеи такова:

  • исправлять техдолг нужно, чтобы ускорять команду (устранять препятствия в работе)
  • тех же целей иногда достигает техническое улучшение, даже если это — не техдолг
  • значит, мы можем рассматривать любые улучшения, устраняющие препятствия в работе, как эквивалент техдолга

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

Примеры технических улучшений:

  • Выделить общие CI/CD Components в Gitlab для похожих сервисов
  • Автоматизировать публикацию из markdown-файлов репозитория в корпоративную Wiki
  • Автоматизировать генерацию описаний Merge Request в корпоративном Gitlab с помощью AI (LLM)

Внедрение метода «налог на фичу» #

Этот метод прекрасно внедряется снизу вверх.

  1. Начните вести бэклог техдолга и технических улучшений заранее
  2. Оценивайте, сколько времени добавит конкретное улучшение к оценке фичи
    • бывает так, что и с разработкой технического улучшения, и без него оценка фичи примерно одинакова
    • в этом случае смотрите на риски: насколько вы уверены, сделать техническое улучшение получится? А какие проблемы появятся без него?
  3. Занимайтесь «продажей» конкретных улучшений и команде, и руководству

Внедрение метода «квота X%» #

Этот метод внедряется только решением или разрешением «сверху».

  1. Начните вести бэклог техдолга и технических улучшений заранее
  2. Аккуратно выбирайте конкретные задачи — иначе вы дискредитируете свою квоту
  3. Показывайте результаты, чтобы защитить квоту времени от посягательств
  4. Будьте готовы адаптировать квоту в обе стороны
    • завышенная квота времени должна быть честно снижена
    • заниженную квоту можно повысить, «продавая» эту идею руководству

Сайт atdd.ru — блог разработчика.