Бывало у вас такое, что приходилось вставлять не самое лучшее решение в код, только чтоб успеть сдать задачу перед условной выставкой? Или идет работа над проектом в течение уже пары месяцев, а документация откладывается на потом, когда все устаканится? Поздравляю, вы “счастливый” обладатель технического долга. Не стоит расстраиваться, это часть жизни, которую следует принять и проработать как на сеансе у психолога для комфортной жизни в будущем.

Для начала определим цель текущей работы. Это МВП для проверки бизнес-гипотезы - мы можем забыть о “техдолге” и бежать вперед для получения нужных метрик. Надо сделать пару задач, где сроки “вчера” - вставляем подходящие решения с мыслью о будущем рефакторинге. Тут главное правильно понять дальнейшее развитие проекта, чтобы после наших технических решений были понятны масштабы работ по накопившимся обязательствам. Это как с кредитом, который мы берем в банке и будем возвращать в будущем, да еще и с процентами. Проведите верхнеуровневый анализ проекта и поймите, на каком вы этапе и куда хотите прийти.  Картинка в помощь.

Текущая ситуация на проекте с техническим долгом
Текущая ситуация на проекте с техническим долгом

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

Жизненный цикл
Жизненный цикл

Давайте посмотрим, какие неприятности из прошлого нам могут помешать в будущем.

Можно попробовать разделить техдолг на несколько групп: 

  • Кодовый - дублирование, необходимость рефакторинга, обновление библиотек;

  • Архитектурный - выбрана неправильная архитектура, технологический стек;

  • Информационный - нет логов, мониторинга, документации, плохое покрытие тестами. 

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

  • Код - баги, рост сложности системы, трудности в масштабировании;

  • Команду - выгорание, сложность онбординга новичков;

  • Бизнес - недополучает прибыль из-за скорости поставки, влияние на репутацию.

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

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

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

Мы начали с того, что стали выписывать любые замечания по коду в issue к нашему проекту в Gitlab. Нам это показалось удобнее, чем создавать отдельные задачи в таск трекере. Это ближе к коду, можно добавить ссылки и комментарии из merge request-ов в которых найдены недочеты. Такое краткое описание проблемы, которое создают разработчики в процессе работы, а потом уже менеджеры по необходимости переносят их условную JIra, дополняют описание и добавляют в беклог продукта.

Пример описания issue в проекте
Пример описания issue в проекте

После закрытия таски мы закрываем issue в репозитории. Это позволяет наглядно увидеть объем открытых/закрытых задач по этому направлению работ. Можете сразу создавать задачи в ваших трекерах с определенным типом или лейблом, чтобы потом легко фильтровать по нему. Некоторые команды больше надеются на комментарии в кодовой базе. Соберите и визуализируйте их с помощью нескольких шагов из доклада для работы с этим показателем.

Мы пошли по другому пути и составили карту проекта с определением проблемных зон. За основу взяли разделы нашего продукта и по принципу светофора отмечаем текущее состояние отдельных компонентов. Если у компонента есть какие-то недостатки в текущей реализации - описываем в комментарии и понижаем цвет доступности к изменениям. Важно также определить критерии, по которым вы будете определять степень “качественности” компонентов и отталкиваться от него при просмотре кода.

Пример светофора для части функционала
Пример светофора для части функционала

Не стоит забывать, что технический долг прячется не только в коде. У нас была проблема с не всегда актуальной документацией: технической по проекту, тестовой, актуальностью макетов после изменений. Все члены команды понимали, что надо держать проект в порядке. Но иногда забывали обновить базу знаний, бывало не хватало времени на написание интересного кейса из тестирования. Для улучшения ситуации в этом аспекте мы пошли на популярный шаг - к каждой user story в проекте добавлять отдельные задачи на написание тест-кейсов, обновлении технической документации и актуализации макетов при необходимости. Эти задачи попадали на исполнителей после разработки функционала. Так у задач появлялся ответственный. Плюсом, после написания технической документации, наши тестировщики еще просматривают текст для добавления практических деталей  и тонкостей работы функционала. Ведь с этой докой в будущем работать всей команде и смежным подразделениям. Добавление отдельных задач делает понимание текущей ситуации понятнее для заинтересованных лиц.

Задачи на "не забыть"
Задачи на "не забыть"

Когда у вас появится список открытых вопросов -  поймите, за что взяться в первую очередь. Можно обратиться к матрице Эйзенхауэра и раскидать ваши задачи по четырем квадратам.

Исходя из ситуации на проекте и текущих задач, обратите внимание на такие аспекты:

  • Легкие маленькие фиксы. Это поможет быстро показать как это работает, поможет вдохновить всех причастных.

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

  • Критичный для бизнеса функционал. Например, вы разработчики “убийцы” ютуба.  Основной функционал - плеер и все, что с ним связано. Лучше держать кодовую базу, тесты и документацию по такому разделу на хорошем уровне.

  • Что болит у команды прямо сейчас. Если на ретро разработчик Игорь пожаловался на плохие куски кода в функционале Х - это может служить вам направлением для будущего рефакторинга этого участка. Это покажет команде, что ее слышат и улучшит настроение внутри коллектива.

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

Следующим важным этапом работы с техническим долгом - процесс закрытия.  Варианты:

  • Отдельные технические спринты. Вы предлагаете бизнесу, что целью каждого четвертого спринта будет стабилизация продукта.

  • 20% capacity на технические улучшения. Редко когда могут выделить спринт, но можно получить часть каждого спринта на такие доработки. Главное, чтобы хотя бы одна задача влезала в этот объем.

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

  • Добавление технических задач для выполнения квартальных планов, метрик. Если в компании есть KPI, OCR или другие формы построения целей на определенный период - добавьте туда и технические показатели проекта как одно из направлений развития.

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

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

Не затягивайте с выплатами процентов и старайтесь закрывать микрозаймы как можно скорее.

Комментарии (8)