В  Lamoda Tech мы работаем не только над e-comm платформой и приложениями, но и создаем продукты для внутренних пользователей. Например, системы для пунктов выдачи заказов, приложения для пеших курьеров и так далее.

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

В какой-то момент ситуация стала критической: в списке скопилось больше 100 задач. Для двух небольших команд это стоило бы пары лет разработки, если брать по 2 задачи в каждый спринт.

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

Откуда столько багов?

Задачи, которые скопились в бэклоге, — это баги, которые не ломали бизнес-процессы и не блокировали прибыль. Им присваивали средний или низкий приоритет, который говорил о том, что проблема существует, но не ломает ничего критичного. Часто в задачки с низким приоритетом команды даже не заглядывали, и они долго лежали незамеченными на дне бэклога. Тревогу подняли, только когда там скопилось больше сотни багов.

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

Конечно, объем бэклога расстраивал. Команду демотивировало, что появляется все больше задач, которые мы возьмем в работу «никогда-нибудь». Я задумывалась о введении Zero Bug Policy, когда есть только два варианта работы с багом: или признать его критическим и сразу исправить, или просто не заводить, если баг не так серьезен, чтобы бросать на него все силы. Но команда не поддержала эту идею. При возникновении похожих ошибок нам было важно знать, когда с проблемой столкнулись впервые и как часто она повторялась после. 

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

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

А после мы планировали изменить систему работы с багами.

Подготовка к багатону

Готовиться мы начали в конце ноября. Я была проджект-менеджером и договорилась с заказчиком, что мы выделим ребятам время на фикс багов, объяснила важность этой задачи. Основным аргументом была мотивация команды: когда мы закроем бэклог, всем станет спокойнее и легче работать. Кроме того, исправление ошибок должно было сделать работу пользователей удобнее.

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

Вся подготовка проходила в три этапа:

Шаг 1. Посмотреть бэклог и выбрать подходящие для мероприятия баги по определенным требованиям.

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

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

В итоге мы отобрали 35 различных багов. 

Шаг 2. Придумать систему оценки.

Мы выбрали оценку по времени: участники могли получить столько баллов, во сколько часов работы оценен баг. Командам мы не сразу рассказали про багатон. Поэтому мы смогли провести груминг для оценки багов, пока никто не знал про мероприятие — чтобы никто не накинул лишних часов-баллов. 

Шаг 3. Организовать удобный способ отслеживания статуса багов для мероприятия.

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

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

Не кодить по ночам

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

Равные по силам команды

Всего нас было 20 человек вместе с тимлидами, и мы решили поделить команды по тестировщикам — их было 4. Получилось по три разработчика и одному тестировщику на команду.

Тестировщики тоже могли получить баллы

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

Багатон проходил онлайн

Команды сами выбирали, где и в каком формате им общаться. Подарки всем участникам и победителям тоже были виртуальные: мы вручали сертификаты на покупки в одном популярном маркетплейсе. 

Общий и командный зачет

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

Зачет обновлялся несколько раз в день, на третий день с утра мы объявляли итоги. 

Работать над задачей могла только одна команда

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

Оценки менялись в зависимости от статуса задачи

За баг, который был оценен в 8 часов, команда могла максимально получить 8 баллов — в случае, если задача была доведена до статуса ready to merge. Статус testing/need testing/need fixing (работа проделана, но не до конца) давал 3/4 от общей оценки задачи. Задача, доведенная до статуса code review, давала команде 1/2 от оценки. За невоспроизводимый баг команда получала 4 балла вне зависимости от оценки в часах.

Проведенное review давало 1/8 оценки задачи, но только для тимлидов. Мы установили это правило, так как тимлиды будут тратить время на ревью задач, при этом не занимаясь самими багами. 

Наша турнирная таблица выглядела просто, а название выбрала всего одна команда из четырех :)
Наша турнирная таблица выглядела просто, а название выбрала всего одна команда из четырех :)
Баги мержились, и релиз с ними был уже в спринте после Нового года
Баги мержились, и релиз с ними был уже в спринте после Нового года

После багатона: как мы изменили работу с техподдержкой

В спринте багатона было 35 багов. В итоге мы закрыли 26 из них. Это крутой результат за два дня, тем более, что там были баги и на 16 часов, и на 8: мы фактически закрыли годовой бэклог. Ощущения от проделанной работы — непередаваемые.

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

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

Благодаря Support Weekly нам удается: 

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

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

  • Связывать между собой баги, возникшие по одним и тем же причинам. 

  • Замечать системные проблемы: мы видим, каких проблем много, куда стоит обратить внимание.

  • Держать бэклог в актуальном состоянии. 

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

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

Поделитесь, как вы работаете с неприоритетными багами? Если у команды нет ресурса фиксить все на 100%, вводите ли Zero bag policy или действуете как-то еще?

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


  1. Hungryee
    05.10.2023 15:01
    +5

    1. Заголовок статьи взяли из опыта другой компании или просто из башки? Откуда цифры в 50 багов и 2 недели, если в итоге закрыли 26 за 2 дня

    2. > «Научились не копить»

      > «нуу у нас висит еще 20 неприоритетных багов, мы их не фиксим, но про них помним. А так мы прошли через большие изменения, и даже новый митинг создали

      Проблема всех таких статей в том, что они ни о чем. Это болтология как минимум потому, что невозможно описать универсальный порядок действий при таких ситуациях. Каждая команда и ее ситуация- уникальны, различны процессы и внутренние подходы. Единственный универсальный метод - обсуждать с командой на локальном уровне. А проводить багатон со всеми разрабами чтобы закрыть четверть бэклога за 2 дня - как минимум изнурительно, как максимум - идиотизм.


    1. funca
      05.10.2023 15:01

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

      Единственный универсальный метод - обсуждать с командой на локальном уровне.

      Ну вот автор поделился своим решением, какое получилось. Значит не единственный. Можно ещё ввести SLA для решения задач, в зависимости от приоритета, и мотивировать команды укладываться в сроки. Можно организовать "bug retirement" и просто закрывать, если ни у кого так и не дошли руки. Можно конечно сказать, что все есть в ITIL, но не все организации к этому готовы.


  1. Shortki
    05.10.2023 15:01

    Вам нужна "система основанная на правилах"

    1. Для каждой задачи назначается срок решения.

    2. Срок можно переносить дважды, но после проговаривания проблемы, общим решением.

    3. Если лимит переносов исчерпан, то задача либо берётся в работу, либо удаляется. Инициатор задачи ставится в известность, восстановить задачу в том же виде/контексте он уже не может.

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


  1. mello1984
    05.10.2023 15:01

    Основным аргументом была мотивация команды

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

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

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

    Мы договорились, что на багатон у нас есть два дня: в понедельник и вторник фиксим баги, в среду утром подводим итоги и награждаем победителей.

    Двухдневный спринт - 26 багов... Возникает вопрос, если они настолько мелкие - почему они не фиксились раньше... Либо недостаток тестирования по итогу, либо завышенные оценки на груминге...

    За статью спасибо - интересно посмотреть, где как выстроены процессы.