Рабочие процессы

Для решения задач мы используем элементы Story Mapping, Scrum и Kanban:

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

Три уровня планирования

Весь наш процесс разработки проходит 3 уровня:

  1. Заводим карточки историй на карте историй в сервисе StoriesOnBoard. Запланированые истории выгружаются в Backlog.
  2. Берем истории/задачи/баги из Backlog'а. Истории декомпозиреум.
  3. Все задачи взятые из Backlog'а появляются на Kanban доске.

Карта историй

Структура карты

Для знакомства с картами, можно почитать статью https://storiesonboard.com/user-story-mapping-intro.html В целом, структура карты подстраивается под специфику проекта, нет жестких ограничений.

Рекомендации по работе с картами историй

  1. Все карточки историй заводятся изначально в на карте в Unscheduled блоке.
  2. При планировании создается следующий Релиз. Релизом тут может быть номер следующей версии, месяц или номер недели. В Jira релизы называются как Версии (Versions). Карточки можно добирать в релиз, если текущих оказалось недостаточно.
  3. Чтобы отправить карточку в Jira, нужно нажать "Push to Jira".
  4. После деплоя или завершения периода релиза, нужно зайти в детали версии и нажать "Release".
  5. Старые релизы отправляются в архив (нужно нажать на "Archive Release").

Backlog

Задачи из Backlog'а берем в 2х случаях:

  1. При планировании следующего спринта.
  2. При завершении всех взятых ранее задач или появлении критически важных задач.

Разработка Истории

  1. Поставьте себя как Assignee истории. Переведите в состояние Active.
  2. Декомпозируйте Историю:
    • Разбейте разработку истории на подзадачи.
    • Каждая должна занимать 2-4 часа, максимум 8 часов (1 рабочий день).
    • Подзадачи можно заводить постепенно, по мере работы над историей.
  3. Заведите ветку по идентификатору Истории. Если у истории назначена версия релиза, то ветка делается от ветки релиза, в ином случае от master.

Обратите внимание, что карточка с Историей не попадает на Kanban доску. На доске появляются только поздачи, которые переведены в состояние Planned.

Kanban доска

На доске всего 4 колонки, которые соответствуют статусам задач:

  • Planned — запланировано в работу на ближайшее время. Алиас статуса "Reopened".
  • In Progress — идет работа над задачей.
  • Done — выполнено и ожидает подтверждения или деплоя.
  • Deployed/Confirmed — изменения получили клиенты.

У карточек могут быть и другие статусы и такие карточки не видны на доске.

  • Backlog — задача в Бэклоге.
  • Delayed — отложена и находится в Бэклоге.
  • Closed — задача закрыта.
  • Cancelled — задача не актуальна, отменена.

Как работать с карточками на Kanban доске

  1. Когда начинаете работать над задачей, переносите карточку в "In Progress".
  2. Если останавливаете работу или переключаетесь на другую, возвращайте карточку в первую колонку.
  3. После выполнения, переводите в "Done". Напишите коротко о том, что было сделано.

Теперь, в зависимости от специфики проекта, нужно еще перенести карточку в "Deployed/Confirmed":

  1. Если багфикс - после деплоя или выкатки обновления.
  2. Задача из Support - когда клиент подтвердил, что его проблема решена.

Задачи из колонки "Deployed/Confirmed" убираются с доски через сутки.

Как выглядит разработка с точки зрения разработчика

Если над Историей работает один человек:

  1. Заводить ветки на каждую подзадачу не обязательно.
  2. Открываем канбан доску в Jira и перекидываем карточку задачи/подзадачи в колонку In Progress.
  3. После выполнения первой задачи в Истории, нужно оформить MR (Merge Request) ветки истории в ветку master или релизную ветку. В заголовке добавить спереди "WIP: " — это отметка Work In Progress.

Если над Историей работает несколько человек:

  1. Заведите новую ветку от ветки Истории по идентификатору задачи.
  2. Перекиньте карточку подзадачи в колонку In Progress.
  3. После завершения задачи, оформите MR в ветку Истории.
  4. Когда все подзадачи выполнены, оформляйте MR в master или ветку следующего релиза:

Читайте также страницу Apliteni git-flow.

Специфика задачи с типом "Bug"

Если задача с типом "Bug":

  1. В поле Carrotquest URL пропишите ссылку на диалог клиента, который зарепортил баг.
  2. Заведите новую ветку от master (если только это не специфический баг бета-версии).
  3. После выполнения, оформите MR.
  4. Когда баг-фикс доступен в качестве обновления, уведомляем об этом клиента, который зарепортил баг.

Специфика задач в проекте SUPPPORT

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

Поэтому, необходимо сделать процесс решения прозрачным для остальных: пишите комментариями процесс решения. Пример, "Проверил диск сервера, проблем нет", "Жду от клиента доступа более высокого уровня", "Не удалось найти причину, передаю задачу Ивану".

Создание задач в Jira

  1. Для заведения задачи/истории слева по кнопке "+"
  2. Выберите проект. Ниже специальные проекты, которые используется с разными целями:
    • Apliteni — для организационных задач
    • Support — для запросов от клиентов, которым требуется помощи
  3. Тип:
    • Story — рекомендуемый. Рекомендуется начинать создание истории в StoriesOnBoard.
    • Task — микро-задача, которая не связана с существующими Историями. В проекте SUPPORT заводятся задачи именного этого типа.
    • Bug – если это подтвержденный баг.
  4. Priority:
    • Ставим High для критических багов или серьезной проблеме у клиента. В остальных случаях Medium.
    • Если задача метит на уровень Low и ниже, то подумайте, не завести ли ее только в StoriesOnBoard.
  5. Заголовок:
    • Очень важно, чтобы заголовок максимально коротко описывал суть задачи. Это нужно, чтобы в бэклоге легко можно было понять о чем задача и регулировать порядок в очереди на выполнение.
  6. Описание
    • Опишите более подробно цель задачи. Кладите сюда также доступы, ссылки на переписку или саму переписку с клиентом.
  7. Due Date:
    • Если клиенту назвали сроки выполнения, укажите его в этом поле.
  8. Исполнитель (Assignee) назначается, только если задача предназначена конкретному человеку.

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

FAQ

Если закончились задачи

  1. Сначала проверяем, нет ли еще подзадач у Истории, над которой вы работаете. Если есть, берем из Истории.
  2. Переходим в Бэклог и берем задачу сверху, которую вы сможете выполнить. Сверху можно наложить фильтр, чтобы проще было отыскать.

Если у вас сомнения по выбору задачи, напишите через Slack лиду проекта.

Если задача требует больше 8 часов работы

Такую задачу лучше разбить на более мелкие (декомпозировать):

  • В случае, если это подзадача, нужно добавить подзадачи в ту же Историю.
  • Если это Task, необходимо перевести карточку в тип Story. Это делается через действие Move.

Как не допускать старения карточек

На канбан доске, у каждой карточки есть индкатор "старости" - это ряд точек. Чем больше зарточка находится в одном состоянии, тем больше красных точек у карточки. Чтобы не допускать устревания, нужно держать в In Progress только те задачи, на которыми сейчас идет работа. В Planned держите только те задачи, которые собираетесь делать в ближайшие дни. В остальных случаях, лучше убрать в Backlog.

Случается, что задача оказалась крупнее, чем ожидалось. В таких случаях мы делаем разбивку на несколько - декомпозицию (смотрите раздел [Уровень 2: Бэклог](#Уровень 2: Бэклог)).