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

Проект с большим количеством багов всегда тяжело поддерживать, он вызывает негатив у пользователей. И нет такой софтверной компании, в которой это было бы не так. Если вы откроете у себя JIRA и посмотрите фильтр «Created vs Resolved», т. е. соотношение созданных и исправленных багов, вы увидите непрерывно возрастающий график. Это означает, что неисправленных багов с течением времени становится только больше. Исправлять старые баги — большая головная боль. Их приоритет всегда ниже, чем у новых проектов, и нередко бывает так, что они остаются «ничьи» — сотрудник уже в компании не работает, а баг остался.

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

Описание механизма

Если коротко, то мы (GameTrek и наш партнер компания Evrone) написали модуль для JIRA, реализующий этакий «багфиксный» хакатон с элементами игры. Игра проходит три-пять дней и повторяется в компании раз в квартал или чаще. В течение недели, пока длится игра, все девелоперы и тестировщики откладывают в сторону текущие задачи (это обязательное условие) и дружно накидываются на баги, соревнуясь друг с другом и зарабатывая награды. Именно таким образом мы решили геймифицировать процесс исправления ошибок.

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

Мы же хотели были сделать так, чтобы разработчик воспринимал каждый исправленный баг как реальную помощь реально существующему пользователю. Чтобы вместо мысли «я пофиксил баг» он думал «я помог человеку». Ведь знаете, как вкратце формулируется сеттинг нашей игры? «IT-профессионалы спасают мир». Мы сделали видеоролик, в котором к девелоперам обращается Супермен и просит у них помощи, разместили в игровом интерфейсе фотографии реальных юзеров, испытывающих затруднения, чтобы, так сказать, придать багам «человеческое лицо». Это должно было повысить мотивацию разработчиков, и, как мы убедились впоследствии, так оно и оказалось.

Ещё одна вещь, предусмотренная в нашей игре, это «расфасовка багов». Чтобы не грузить разработчиков неподъёмным количеством ошибок, за которое просто страшно браться, им на каждый недельный раунд выделяется определённая часть багов, например, 100 штук, называемая «коробкой». За формирование коробки отвечают тестировщики, которые предварительно проверяют, что баги по-прежнему актуальны, и вместе с тимлидами назначают каждому игровую «стоимость» (об этом чуть позже).

Когда «коробка» вскрывается, разработчики начинают разбирать себе баги. Причём мы поставили условие, что можно одновременно брать на себя небольшое количество багов. Здесь, конечно, есть элемент лотереи, потому что один баг может оказаться простым, а другой — очень сложным. Но, как и в лотерее, у нас есть и призы. Каждому багу ставятся в соответствие «скиллы», которые он «прокачивает». Например, «JavaScript: +5 pts». И если разработчик этот баг исправляет, в его профиле соответствующий скилл увеличивается. Информация о прокачке отображается в ленте активности и накапливается от раунда к раунду, служа дополнительной мотивацией. Если разработчик хочет специализироваться на каком-то одном направлении, например, «качать» тот же JS, у него есть возможность использовать фильтр и брать именно баги, развивающие скилл JS.

За выдающиеся достижения в прокачке скиллов можно получать награды, которые тоже отображаются в ленте активности и видны коллегам и менеджерам. А после того, как компания «сыграет» несколько раз, менеджеры смогут увидеть «звёздную карту» компании, показывающую, кто насколько за время игры прокачался.

Помимо личного зачёта в игре предусмотрен и командный. Разработчики и тестировщики в любой момент могут образовать команду произвольного размера (обычно — не более 3-х человек), если они считают, что так они добьются лучших результатов. Команды тоже соревнуются не по количеству исправленных багов, а по суммарной величине прокачки. Механизмы формирования команд, отправки заявок и т. д. реализованы в нашем модуле для JIRA.

Результаты

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

Но самое главное — это то, что мы действительно добились вовлечённости разработчиков в процесс исправления ошибок. Во время игры доходило до того, что в чате мелькали фразы «До скольки сегодня рубимся? Успеем закоммитить пару багов ещё?». А поскольку по итогам каждой игры раз в месяц выпускался апдейт, все могли регулярно видеть зримые результаты своего труда, и это тоже сильно поднимало мотивацию.

Если же оперировать цифрами, то было исправлено примерно на 30% больше багов, чем удавалось раньше. А длительность цикла поставки (т. е. времени от начала исправления бага до его коммита в репозиторий) сократилась в разы.

Планы на будущее

Помимо уже реализованного «рейда» мы планируем ввести режим «захвата флага» (CtF). Флаг, или своеобразный «переходящий приз», получает тот, кто исправит самый сложный баг. И флаг будет приносить своему владельцу очки до тех пор, пока кто-то не исправит баг как минимум с такими же характеристиками. В дальнейшем будут появляться и другие режимы игры.

Попробуйте игрофикацию багфикса у себя

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