Предисловие

Периодически слышу, как мне говорят: «В Jira неудобно управлять бэклогом, стандартный список задач мне не нравится». Дело доходит даже до выписывания задач в Excel. Тогда зачем нам таск‑трекер?)

Сегодня попробую рассказать о решении, которым сам пользуюсь, а именно применение Structure.

К действиям

Очень кратко о нашей декомпозиции задач. Это пригодится в дальнейшем.
1 уровень. Инициатива. Она вмещает в себя несколько эпиков
2 уровень. Эпик. Он вмещает в себя несколько историй, тасок, багов и т.д.
3 уровень. Таски. Он может дробиться на подзадачи
4 уровень. Подзадачи. Самая минимальная единица, которая не может быть самостоятельной.

Не буду долго рассказывать про Structure в Jira. Об этом есть много информации в интернете. Хочется, чтобы статься получилась краткой, без лишней информации.
И так, что я сделал.

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

Подробнее о блоках.

  1. Бэклог с инициативами. Это будет полностью декомпозированный бэклог с правильной иерархией задач. Как создать:

    1. Здесь свой JQL, который выводит все инициативы и задачи нижних уровней. Чтобы его создать используйте такой запрос:
      project = "ВАШ ПРОЕКТ" AND type = Initiative AND resolution = Unresolved

    2. Также дополняем структуру такими стандартными запросами:

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

    1. Здесь также свой JQL? который выглядит так:
      project in ( "ВАШ ПРОЕКТ") AND type = Epic AND "Parent Link" is EMPTY AND resolution = Unresolved

    2. Не забудем дополнить его стандартным запросом:

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

    1. Здесь всего лишь один запрос, который выглядит так:
      project in ("ВАШ ПРОЕКТ") AND type not in (Epic, Initiative) AND "Ссылка на эпик" is EMPTY AND resolution = Unresolved

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

    1. JQL: Спринт in openSprints()

    2. Добавляем фильтрацию задач

      1. В атрибуте "Формула" указываем это:
        with assigned = sprint.FILTER($.state = "active" OR $.state = "future"): IF statuscategory != "DONE" AND assigned.SIZE() > 0: _assigned.LAST() ELSE IF statuscategory = "DONE": LAST(sprint.name) ELSE: "Backlog"

    3. Добавляем подзадачи стандартным запросом:

  5. Будущие спринты. Эта папка, судя из названия отображает все будущие спринты команды. В основном нужна для планирования спринтов.

    1. JQL: Спринт in futureSprints() AND resolution = Unresolved

    2. Группируем задачи по формуле, что указана в пункте 4.2.1.

    3. Отфильтровываем задачи с названием спринта, содержащим название вашей команды

    4. Дополняем задачи стандартными запросами:

Итог

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