Хенрик Книберг - Scrum и XP: заметки с передовой
Конечно, есть и другой вариант: не вести переговоры с product owner'ом по поводу технических историй, а просто поставить его перед фактом, что у нас фокус-фактор такой-то. Но это не правильно даже не попытаться достичь компромисса.
Если product owner оказался сообразительным и компетентным (нам в своё время с этим действительно повезло), я бы рекомендовал информировать его как можно лучше и дать ему возможность определять общие приоритеты. Ведь прозрачность — это один из основополагающих принципов Scrum'а, верно?
Как мы используем систему учёта дефектов для ведения product backlog’а
Есть ещё одна непростая задача. С одной стороны, Excel очень хороший формат для product backlog’а. С другой стороны, вам всё равно нужна система учёта дефектов, и Excel здесь явно не тянет. Мы используем Jira.
Итак, как мы переносим задачи из Jira в планирование спринта? Не можем же мы просто их проигнорировать и сосредоточиться только лишь на историях.
Мы пробовали следующие подходы:
1. Product owner распечатывает самые высокоприоритетные задачи из Jira, выносит их на планирование спринта и вешает их на стенку с другими историями (неявно указывая их относительный приоритет).
2. Product owner создаёт истории, соответствующие задачам из Jira. Например, «Исправить самые критические ошибки отчётности в админке, Jira-124, Jira-126, и Jira-180».
3. Работы по исправлению ошибок не включаются в спринт, то есть команда определяет довольно низкий фокус-фактор (например, 50 %), чтобы хватало времени на исправления. Затем, вводится предположение, что команда в каждую итерацию будет тратить определённую часть времени на ошибки в Jira.
4. Заносим product backlog в Jira (просто переносим из Excelе). Считаем баги обычными историями.
Мы ещё не определились, какой подход для нас самый лучший; в действительности он может отличаться в разных командах и меняться от спринта к спринту. Я больше склоняюсь к первому подходу: он прост и понятен.
Свершилось! Планирование спринта закончено!
Ух, я и не думал, что глава по планированию спринта будет такой длинной [4]! Полагаю, этот факт отражает моё мнение: планирование спринта — самая важная вещь в Scrum’е. Вложите побольше усилий в планирование — и всё остальное пойдёт как по маслу.
Планирование спринта прошло успешно, если все (и команда, и product owner) с улыбкой завершают встречу, с улыбкой просыпаются следующим утром и с улыбкой проводят первый ежедневный Scrum.
Затем, конечно, всё может пойти криво, но вы, как минимум, не сможете списать всю вину на планирование спринта: o)
Как мы доносим информацию о спринте до всех в компании
Важно информировать всю компанию о том, что происходит в вашей команде. Если этого не делать, то остальные начнут жаловаться, или — что ещё хуже — придумывать всякие ужасы про вас.
Мы для этой цели используем «страницу с информацией о спринте».
Иногда мы также добавляем к названию истории поле «как продемонстрировать»
Сразу же после встречи по планированию спринта эту страницу создаёт ScrumMaster. Он помещает её в wiki, и тут же спамит на всю компанию:
Кроме этого у нас есть «панель» в wiki, в которой содержаться ссылки на текущие спринты всех команд.
В дополнение ко всему этому наш ScrumMaster распечатывает страницу информации о спринте и вывешивает её на стену в коридоре. Таким образом кто угодно, проходя мимо, может взглянуть на эту страницу и узнать, чем же занимается наша команда.
Когда спринт подходит к концу, ScrumMaster напоминает всем про приближающуюся демонстрацию
Если всё это делать, то ни у кого не получится сказать, что он не мог узнать, чем занимается команда.
Как мы создаем sprint backlog
Уже добрались до этой главы? Отлично!
Итак, мы только что закончили планирование и протрубили на весь мир про начало нашего новоиспечённого спринта. Теперь настал черёд ScrumMaster'а создать sprint backlog. Это необходимо сделать после планирования спринта, но до начала первого ежедневного Scrum’а.
Формат sprint backlog’а
Мы поэкспериментировали с разными форматами sprint backlog’а, включая Jira, Excel, не забыли попробовать и обычную настенную доску. Сперва в основном использовали Excel, в интернете можно найти довольно много Excel'евских шаблонов для sprint backlog’а, с авто-генерацией burndown диаграмм и всякими другими примочками. Я мог бы долго рассказать про sprint backlog’а, созданные при помощи Excel, но я не буду. Даже не стану приводить примеров.
Вместо этого я опишу во всех подробностях формат sprint backlog’а, который мы сочли наиболее эффективным — доску задач на стене.
Найдите большую стену, на которой либо ничего нет, либо висит всякая ерунда вроде логотипа компании, старых диаграмм или ужасных картинок. Очистите её (если необходимо, спросите разрешения). Склейте скотчем большущее полотно бумаги (как минимум 2x2 или 3x2 метра для большой команды). А потом сделайте что-то вроде этого:
Как вариант, можно использовать белую доску. Но такое её использование неэффективно. Если это возможно, сохраните белую доску для набросков будущего дизайна, а в качестве доски для задач используйте «бумажные стены».
Примечание: если вы пользуетесь стикерами для задач, не забудьте прикрепить их скотчем, или же в один «прекрасный» день вы найдете их аккуратной кучкой на полу.
Как работает доска задач
Вы, конечно, можете добавить любые дополнительные поля. Например, «В ожидании интеграционного тестирования» или «Отменённые». Но прежде чем всё усложнять, хорошенько подумайте, действительно ли эти дополнения так уж необходимы?
Я понял, что простота крайне ценна в такого рода вещах, поэтому я делаю усложнения только в случае, если цена неделания слишком велика.
Пример 1 — после первого ежедневного Scrum’а
После первого ежедневного Scrum'a доска задач может выглядеть примерно так:
Как видно, три задачи находятся «в процессе», то есть команда будет заниматься ими сегодня.
Иногда, в больших командах, задача зависает в состоянии «в процессе» потому, что никто не помнит, кто над ней работал. Если такое случается часто, команда обычно принимает меры. Например, отмечает на карточке задачи имя человека, который взялся над ней работать.
Пример 2 — еще через пару дней
Через пару дней доска задач может выглядеть примерно так:
Как видно, мы закончили историю «Депозит» (т. е. она была зафиксирована в системе контроля версий, протестирована, отрефакторена и т. д.) «Автоматическое обновление» сделано частично, «Админка: вход» начат, а «Админка: управление пользователями» еще нет.
У нас возникло 3 незапланированные задачи, как видно справа внизу. Об этом полезно будет вспомнить на ретроспективе.
Вот пример настоящего sprint backlog’а ближе к концу спринта. Он, в самом деле, становится довольно беспорядочным по ходу спринта, но ничего страшного, так как это ненадолго. На каждый новый спринт мы начинаем sprint backlog с чистого листа.
Как работает burndown-диаграмма
Давайте присмотримся к burndown-диаграмме:
Вот о чем она говорит:
• В первый день спринта, 1-го августа, команда определила, что работы осталось примерно на 70 story point’а. Это как раз и есть прогнозируемая производительность на этот спринт.
• 16-го августа работы осталось примерно на 15 story point’а. Пунктирная направляющая показывает, что они на верном пути, то есть в таком темпе они успеют закончить все задачи к концу спринта.
Мы пропускаем выходные по оси X, так как в это время редко что-то делается. Раньше мы их включали, но burndown при этом выглядел странновато, так как он «выравнивался» на выходных, и это походило на повод для беспокойства.
Тревожные сигналы на доске задач
Беглый взгляд на доску задач должен дать возможность любому человеку понять, насколько успешно продвигается итерация. ScrumMaster несёт ответственность за то, чтобы команда принимала соответствующие меры при обнаружении первых тревожных симптомов:
Эй, как насчет отслеживания изменений?
Лучший вариант отслеживания изменений, который я могу предложить при данном подходе — это делать фотографию доски задач каждый день. Делайте так, если это необходимо. Я тоже иногда так делаю, хотя ещё никогда не возникало необходимости пересматривать эти фотографии позже.
Если отслеживание изменений для вас очень важно, тогда возможно подход с доской задач вам вообще не подходит.