Как стать автором
Обновить

Метрики как способ эффективного управления проектами

Время на прочтение7 мин
Количество просмотров9.3K

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

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

Но как сделать так, чтобы всеми метриками было удобно пользоваться? Чтобы не приходилось собирать всё вручную, а была бы единая точка входа к данным, и сама полученная информация помогала контролировать состояние дел и проводить верную оценку.

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

Какие метрики собираем?


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

1. Техподдержка

  • дашборд качества

  • поступающие задачи

2. QA

  • покрытие

  • тестовая документация

  • покрытия автотестами

  • результаты прогонов

  • нагрузочное тестирование

  • скорость написания автотестов

3. Безопасность

  • загруженность отдела

  • покрытие тестами безопасности

4. Процессные метрики

  • загруженность производства

  • сгорание задач

  • срывы сроков задач

  • сложность релизов

  • приближение дедлайна

Вместо дисклеймера

Существует заблуждение, что сбор метрик — это целиком и полностью ответственность менеджера, а значит он сам в состоянии собрать то, что ему необходимо для отчетов. Но по факту, менеджеры в большинстве своем не обладают такими техническими компетенциями. Мы учитываем это у нас в компании, и поэтому менеджер работает в связке с QA-специалистом. И уже QA работает с инструментами, про которые мы расскажем ниже, и воплощает в жизнь те метрики, которые необходимы менеджеру.

Как это реализовано?

Data Studio — инструмент для анализа данных, отслеживания KPI и генерации отчетов. Он может собирать «под одной крышей» информацию из множества сервисов, и это очень удобно. К большому сожалению среди этих сервисов нет Jira Cloud, поэтому нам пришлось придумать костыль хитрое решение. 

У Bob Swift Atlassian Apps есть плагин Database Exporter for Jira Cloud, который может выгружать все задачи в базу данных Postgres, а Google Data Studio может работать с Postgres. 

Таким образом у нас получилась следующая связка:

  • Задачи заводятся в таск-трекере Jira:

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

  • В Postgres хранятся все изменения задач (комментарии, статусы, сроки и т. д.) в актуальном состоянии. Эти данные мы можем использовать в разных целях, в том числе и для построения процессных метрик.

  • В Google Data Studio, используя PostgreSQL connector, подключаемся в нашу базу с задачами с помощью SQL запросов получаем данные и строим метрики.

    Для удобства, чтобы каждый раз не писать большие запросы, на стороне СУБД написали виртуальную таблицу (VIEW) со всеми необходимыми столбцами:

CREATE
OR REPLACE VIEW all_issues AS
SELECT DISTINCT "ISSUEKEY"        AS "issue_key",
                COALESCE(t1."СОЗДАНО", t1."CREATED") AS "create_date",
                COALESCE(t1."ОПИСАНИЕ", t1."DESCRIPTION") AS "description",
                COALESCE(t1."СРОК_ИСПОЛНЕНИЯ", t1."DUE_DATE") AS "deadline",
                COALESCE(t1."РЕШЕНО", t1."RESOLVED") AS "ready",
                COALESCE(t1."P_", t1."SUMMARY") AS "resume",
                t2."NAME"         AS "project",
                t3."NAME"         AS "status",
                t4."NAME"         AS "priority",
                t5."NAME"         AS "issue_type",
                t6."VALUE"        AS "severity",
                CASE
                    WHEN t7."TO_STRING" IS NULL THEN 'false'::boolean
                    ELSE 'true'::boolean
                    END           AS "reopen",
                t8."CREATED"      as "closed_date",
                case
                    when t10."NAME" is null then Null
                    else concat(t2."NAME", ' | ', t10."NAME")::CHARACTER VARYING
                end AS release_name,
                 CASE
                        WHEN t11."ID" IS NULL THEN 'false'::BOOLEAN
                        ELSE 'true'::BOOLEAN
                        END AS "bug_in_prod",
                 t8."CREATED" ::date-COALESCE(t1."СРОК_ИСПОЛНЕНИЯ"::date, t1."DUE_DATE"::date) AS deadline_breakdown,
                t13."DISPLAY_NAME" as responsible,
                "EPIC_LINK" AS epic_link,
                "СЛОЖНОСТЬ_ЗАДАЧИ" AS "story_points",
                t1."ISSUE_ID"::text AS issue_id,
                trunc(coalesce("СУММАРНОЕ_ЗАТРАЧЕНОЕ_ВРЕМЯ", "AGGREGATE_TIME_SPENT")/3600, 2) AS time_tracked,
                t14."DISPLAY_NAME" AS assignee,
                trunc(coalesce("СУММАРНАЯ_ПЕРВОНАЧАЛЬНАЯ_ОЦЕНКА", "AGGREGATE_ORIGINAL_ESTIMATE")/3600, 2) AS original_estimate,
                t1."START_DATE" AS start_date,
                t16."CREATED" AS "last_modification",
                CASE
                    WHEN t17."ID" IS NULL THEN 'false'::boolean
                    ELSE 'true'::boolean
                    END           AS "automation_task",
               CASE WHEN t10."RELEASED"='false'::BOOLEAN THEN NULL 
               	  ELSE t10."RELEASE_DATE" 
						  END AS release_date
FROM "ISSUE_FIELD_VALUES" t1
         LEFT JOIN "PROJECTS" t2 ON coalesce(t1."ПРОЕКТ_PROJECT_ID", t1."ПРОЕКТ_ID", t1."PROJECT_ID") = t2."ID"
         LEFT JOIN "STATUSES" t3 ON coalesce(t1."СТАТУС_STATUS_ID", t1."СТАТУС_ID", t1."STATUS_ID") = t3."ID"
         LEFT JOIN "PRIORITIES" t4 ON coalesce(t1."ПРИОРИТЕТ_PRIORITY_ID",  t1."ПРИОРИТЕТ_ID", t1."PRIORITY_ID")= t4."ID"
         LEFT JOIN "ISSUE_TYPES" t5 ON coalesce(t1."ТИП_ЗАДАЧИ_ISSUE_TYPE_ID", t1."ТИП_ЗАДАЧИ_ID", t1."ISSUE_TYPE_ID") = t5."ID"
         LEFT JOIN "FIELD_OPTIONS" t6 ON t1."СЕРЬЕЗНОСТЬ_FIELD_OPTION_ID" = t6."ID"
         LEFT JOIN (SELECT *
                    FROM "ISSUE_HISTORY"
                    WHERE "TO_STRING" = 'Reopen') t7 ON t1."ISSUE_ID" = t7."ISSUE_ID"
         LEFT JOIN done_issues t8 ON t1."ISSUE_ID" = t8."ISSUE_ID"
         LEFT JOIN "ISSUE_FIX_VERSIONS" t9 ON t1."ISSUE_ID" = t9."ISSUE_ID"
         LEFT JOIN "PROJECT_RELEASES" t10 ON t9."PROJECT_RELEASE_ID" = t10."ID"
         LEFT JOIN "ISSUE_БАГ_НА_ПРОДЕ" t11 ON t11."ISSUE_ID"=t1."ISSUE_ID"
         LEFT JOIN (SELECT DISTINCT ON ("ISSUE_ID") *
                    FROM "ISSUE_HISTORY"
                    WHERE "FROM_STRING" IN ('Open','To Do','To do') AND "TO_STRING" IN ('InProgress', 'In Progress', 'В работе')
                    ) t12 ON t1."ISSUE_ID" = t12."ISSUE_ID"
        LEFT JOIN "USERS" t13 ON t13."ID"=t12."AUTHOR_USER_ID"
        LEFT JOIN "USERS" t14 ON t14."ID"=t1."ASSIGNEE_USER_ID"
        LEFT JOIN (SELECT DISTINCT ON ("ISSUE_ID") t15."ISSUE_ID", "CREATED"
							FROM (SELECT * FROM "ISSUE_HISTORY" WHERE "FIELD" !='Workflow' ORDER BY "CREATED" ASC) t15) t16 ON t16."ISSUE_ID"=t1."ISSUE_ID"
		  LEFT JOIN "ISSUE_ЗАДАЧА_АВТОМАТИЗАЦИИ" AS t17 ON t17."ISSUE_ID" = t1."ISSUE_ID" 

Теперь мы можем использовать эту виртуальную таблицу в Google Data Studio для получения нужных данных. Например, тренд по багам за период:

SELECT to_char(create_date, 'MM.YYYY') AS month, project, severity, count(severity) FROM all_issues
WHERE issue_type IN ('Bug','Ошибка') AND severity IS NOT NULL
GROUP BY 1, 2, 3

Как внедрить свои первые метрики? Пошаговая инструкция

После того как мы собрали все инструменты вместе, самое время создать свою первую метрику. Собрали пошаговую инструкцию, чтобы построить отчет в Google Data Studio для количества задач в разрезе статусов и типов в процентах. Ниже мы используем стандартные поля в Jira. В вашем конкретном случае настройки в таблицах могут отличаться.

Пошаговая инструкция
  1. Установить плагин Database Exporter for Jira Cloud в Jira. Необходимо иметь права администратора Jira

  1. Настроить подключение к базе PostgreSQL:

  1. После настройки подключения начнется синхронизация. Когда пройдет полная синхронизация задач в базе появятся следующие таблицы (основная информация по задачам находится в таблице ISSUE_FIELD_VALUES ):

  2. Перейти в Google Data Studio и создать отчет:

  1. Выбрать источник данных:

  1. Настроить подключение до базы с задачами и написать запрос для получения данных:

SELECT t1."ISSUEKEY" AS "issue_key",
       t2."NAME"         AS "status",
       t3."NAME"         AS "project",
       t4."NAME"         AS "issue_type"
FROM "ISSUE_FIELD_VALUES" t1
LEFT JOIN "STATUSES" t2 ON coalesce(t1."СТАТУС_STATUS_ID", t1."СТАТУС_ID", t1."STATUS_ID") = t2."ID"
LEFT JOIN "PROJECTS" t3 ON coalesce(t1."ПРОЕКТ_PROJECT_ID", t1."ПРОЕКТ_ID", t1."PROJECT_ID") = t3."ID"
LEFT JOIN "ISSUE_TYPES" t4 ON coalesce(t1."ТИП_ЗАДАЧИ_ISSUE_TYPE_ID", t1."ТИП_ЗАДАЧИ_ID", t1."ISSUE_TYPE_ID") = t4."ID"
  1. Готово. Если предыдущие шаги выполнены правильно, то должна появиться таблица с задачами на пустой странице:

  1. Нажать на эту таблицу и в правой стороне страницы добавить дополнительные параметры для отображения, удалить показатель и передвинуть немного вниз. Названия столбцов можно менять нажав на «ABC» правее от названия параметра:

  1. Добавить круговую диаграмму которая показывает процент задач в разрезе статусов:

  1. Добавить еще одну такую же диаграмму для отображения процента задач в разрезе типов:

  1. Добавить управляющий элемент для выбора проекта (фильтр по проекту для построения метрик в отчете):

  1. Добавить текст в шапке отчета и настроить стиль:

  1. Выбрать цвет фона заголовка таблицы и цвет шрифта:

  1. Изменить название отчета и нажать открыть для просмотра результата:

  1. Готово:

Почему именно эта связка инструментов?


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

По сути, мы используем полностью бесплатное решение. Его несложно доработать и адаптировать под собственные цели и особенности проекта.

Какие результаты приносят метрики?


Использование метрик приносит определенные плоды. С точки зрения менеджмента видим следующие плюсы:

  • У менеджеров складывается актуальное представление о том, чем занимается отдельно взятый сотрудник, команда или отдел. Если задачи выполняются медленно, это повод поговорить и понять, что не так — может сотрудник начинает перегорать или испытывает трудности

  • Позволяет грамотно планировать релиз и не срывать сроки

  • Получается оперативно реагировать на ошибки и сбои

  • Единая точка входа — ничего не разбросано по чатам и трекерам, а собрано в одном месте

  • Если сотрудник уходит из офиса на удаленку, его прогресс хорошо виден

Плюсы для ребят в команде тоже имеются:

  • Растет удовлетворенность слаженной работой команды и процессами

  • Дает возможность как контролировать себя, так и помочь другому сотруднику

  • Мотивирует на достижение результата

Что дальше?

У этого инструмента большой потенциал развития внутри компании.

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

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

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Какие инструменты используете Вы для сбора метрик? Напишите в комментарий, если здесь нет вашего варианта
33.33% Готовыми решениями: Google Data Studio, статистика от Jira/Youtrack, etc., Tableau или Grafana3
44.44% Собственными разработками и плагинами4
22.22% Не используем совсем2
Проголосовали 9 пользователей. Воздержались 2 пользователя.
Теги:
Хабы:
Всего голосов 2: ↑1 и ↓10
Комментарии4

Публикации

Истории

Работа

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань