Предлагаю вашему вниманию перевод небольшой статьи Гойко Аджича на тему разделения пользовательских историй от 2012 года, с иллюстрациями и примерами автора: "Splitting User Stories: The Hamburger Method" — сделал его, в первую очередь, для себя.
Проблематика: История слишком велика и процесс разбиения и оценки слишком сложен; бизнес-пользователей не устраивает ни один вариант разбивки, предложенный командой разработки; команда не имеет достаточного опыта и использует только техническое разделение историй; запущен новый проект и у команды не выходит сформулировать достаточно простые пользовательские истории.
Решение: Метод гамбургера
В течение последних нескольких месяцев я разработал новую технику разбиения пользовательских историй,бессовестно украв пересмотрев и использовав метод составления пользовательских историй Джеффа Паттона и идеи, описанные Крейгом Ларманом и Басом Водде в Практиках масштабирования Lean и Agile-разработки. Я думаю, что эта техника особенно хорошо работает в ситуациях, когда команда не может разрушить традицию технического разделения задач на истории. У неё есть визуальный игровой аспект, как в Инновационных играх, и её просто запомнить. Я называю её Юзер Стори-Гамбургер.
Неопытные команды зачастую не могут понять, каким образом нужно разбивать пользовательские истории, сохраняя при этом бизнес-ценность, и вместо этого упорно разбивают истории на технические задачи и компоненты. Мне нравится идея Карты пользовательских историй, которая отображает общую картину, разбитую в соответствии с бизнес-процессами. Мы можем делать то же самое на более низком уровне, для задач, составляющих пользовательскую историю, тем самым не выводя команду из её зоны комфорта. В этом случае мы разбиваем историю для определения различных уровней качества для каждой итерации и создаём вертикальные срезы для определения критериев выпускаемого функционала. Ниже – о том, как составить гамбургер.
ШАГ 1: Определение задач — слоёв гамбургера
Команде необходимо определить технические этапы верхнего уровня, которые будут присутствовать в реализации истории. На данной стадии разбиение на технические задачи либо компоненты – это нормально. Такие задачи становятся слоями в гамбургере – мясом, салатом, помидорами, сыром – можно добавить немножко бекона для лучшего вкуса.
Например, если мы работаем над историей, смысл которой в установлении связи с неактивными клиентами по электронной почте, то этапы могут быть следующими: выборка неактивных клиентов из базы данных; отправка писем по данной выборке; получение отчёта о доставке; удаление некорректных контактов; маркировка успешных контактов.
ШАГ 2: Определение различных способов реализации задач
Разбейте команду на несколько небольших групп и попросите их определить способы реализации различого уровня качества для каждой задачи. Пусть они запишут на стикерах несколько таких уровней.
Например, скорость исполнения и точность результатов могут быть показателями качества выборки неактивных клиентов из базы данных. В этом случае есть два пути – подготовить медленный и относительно неточный запрос из всей базы, либо же готовить выборки на базе ежесуточных транзакций, не отражающие внутридневные изменения. Еще одним способом увеличить точность будет запуск ночной задачи, присваивающей признак неактивности, и удалять признак неактивности для каждой выполненной транзакции, что позволит нам добиться большей точности и выполнять задачу быстрее. Первый вариант будет работать только в случае ежемесячной отправки писем, второй вариант подойдёт без ограничений.
Другой пример – это объем рассылаемой почты, персонализация контента и защита от попадания в анти-спам-фильтры. Первая опция – медленная и малопродуктивная ручная рассылка. Вторая – автоматическая рассылка неперсонализированных писем с возможностью ручной отписки. Третий путь – это авторассылка персонализированных писем, но с ручной отпиской. Четвёртый – персонализированная авторассылка с автоотпиской. И еще одной опцией может быть интеграция со сторонним сервисом, который предусматривает все описанные возможности.
ШАГ 3: Объединение результатов
Объедините полученную информацию в общий гамбургер на доске. Пускай представители каждой группы вклеят свои стикеры в нужные места внутри гамбургера, кратко описывая представляемые опции. Удалите с доски дублирующие наклейки. Выстройте стикеры слева направо, основываясь на возрастании уровня качества.
ШАГ 4: Обрежьте гамбургер
Пройдитесь всей командой по найденным опциям, сравните их между собой, основываясь на сложности реализации, и отметьте сложность каждой опции на стикере. Можно сгруппировать задачи по размеру для лёгкости сравнения. Подумайте над тем, какие опции более низкого качества можно выкинуть, оставив при этом варианты, примерно равные по объему, но высшего качества.
Также необходимо определиться с максимально необходимым уровнем качества для каждой задачи. Например, реализация процесса удаления некорректных адресов в риалтайме не будет намного более ценной опцией, чем ночная задача по удалению этих адресов. Вынесите стикеры с опциями, превышающими максимальный уровень качества, за пределы гамбургера – это то, что останется после того, как вы «съедите» гамбургер.
ШАГ 5: Сделайте первый укус
Теперь, когда гамбургер готов, решите, насколько большой кусок вы готовы откусить. Определитесь с минимально приемлемым уровнем качества для каждого слоя гамбургера. Например, будем считать ручную рассылку неприемлемой ввиду низкой эффективности, но ежемесячная отправка может быть вполне приемлемой. Если вариант с меньшим уровнем качества является более-менее близким к опции высшего качества по сложности реализации, тогда вам стоит откусить сразу кусок побольше. Например, реализация авторассылки неперсонализированных писем с ручной отпиской не будет гораздо более сложной, чем интеграция с MailChimp. Обратный пример – обновление клиентской активности в реальном времени может оказаться более трудоёмким, чем медленный запрос из базы по требованию. А для некоторых этапов, например, для задачи по удалению некорректных адресов, отсутствие реализации уже может быть минимальным требованием.
ШАГ 6: Откусите еще раз… и продолжайте
В дальнейшем каждый новый «укус» гамбургера должен обеспечивать более высокое качество – например, даже простейшая реалиация удаления некорректных адресов повышает качество, так же, как и более частая рассылка. Всегда сравнивайте сложность реализации возможных вариантов перед тем, как определить величину «откушенного» куска гамбургера.
Этот метод неплохо работает в первую очередь благодаря тому, что он достаточно визуален, и это помогает команде обдумывать альтернативные пути, оставаясь в своей зоне комфорта. Также хорошо работает аналогия с «откусыванием» гамбургера. Пользуясь этим методом, вы можете достаточно легко объяснить, почему реализация отдельного компонента в рамках истории не имеет смысла, ведь обычно люди не выбирают из гамбургера только салат. По крайней мере, пока они голодны.
Проблематика: История слишком велика и процесс разбиения и оценки слишком сложен; бизнес-пользователей не устраивает ни один вариант разбивки, предложенный командой разработки; команда не имеет достаточного опыта и использует только техническое разделение историй; запущен новый проект и у команды не выходит сформулировать достаточно простые пользовательские истории.
Решение: Метод гамбургера
В течение последних нескольких месяцев я разработал новую технику разбиения пользовательских историй,
Неопытные команды зачастую не могут понять, каким образом нужно разбивать пользовательские истории, сохраняя при этом бизнес-ценность, и вместо этого упорно разбивают истории на технические задачи и компоненты. Мне нравится идея Карты пользовательских историй, которая отображает общую картину, разбитую в соответствии с бизнес-процессами. Мы можем делать то же самое на более низком уровне, для задач, составляющих пользовательскую историю, тем самым не выводя команду из её зоны комфорта. В этом случае мы разбиваем историю для определения различных уровней качества для каждой итерации и создаём вертикальные срезы для определения критериев выпускаемого функционала. Ниже – о том, как составить гамбургер.
ШАГ 1: Определение задач — слоёв гамбургера
Команде необходимо определить технические этапы верхнего уровня, которые будут присутствовать в реализации истории. На данной стадии разбиение на технические задачи либо компоненты – это нормально. Такие задачи становятся слоями в гамбургере – мясом, салатом, помидорами, сыром – можно добавить немножко бекона для лучшего вкуса.
Например, если мы работаем над историей, смысл которой в установлении связи с неактивными клиентами по электронной почте, то этапы могут быть следующими: выборка неактивных клиентов из базы данных; отправка писем по данной выборке; получение отчёта о доставке; удаление некорректных контактов; маркировка успешных контактов.
ШАГ 2: Определение различных способов реализации задач
Разбейте команду на несколько небольших групп и попросите их определить способы реализации различого уровня качества для каждой задачи. Пусть они запишут на стикерах несколько таких уровней.
Например, скорость исполнения и точность результатов могут быть показателями качества выборки неактивных клиентов из базы данных. В этом случае есть два пути – подготовить медленный и относительно неточный запрос из всей базы, либо же готовить выборки на базе ежесуточных транзакций, не отражающие внутридневные изменения. Еще одним способом увеличить точность будет запуск ночной задачи, присваивающей признак неактивности, и удалять признак неактивности для каждой выполненной транзакции, что позволит нам добиться большей точности и выполнять задачу быстрее. Первый вариант будет работать только в случае ежемесячной отправки писем, второй вариант подойдёт без ограничений.
Другой пример – это объем рассылаемой почты, персонализация контента и защита от попадания в анти-спам-фильтры. Первая опция – медленная и малопродуктивная ручная рассылка. Вторая – автоматическая рассылка неперсонализированных писем с возможностью ручной отписки. Третий путь – это авторассылка персонализированных писем, но с ручной отпиской. Четвёртый – персонализированная авторассылка с автоотпиской. И еще одной опцией может быть интеграция со сторонним сервисом, который предусматривает все описанные возможности.
ШАГ 3: Объединение результатов
Объедините полученную информацию в общий гамбургер на доске. Пускай представители каждой группы вклеят свои стикеры в нужные места внутри гамбургера, кратко описывая представляемые опции. Удалите с доски дублирующие наклейки. Выстройте стикеры слева направо, основываясь на возрастании уровня качества.
ШАГ 4: Обрежьте гамбургер
Пройдитесь всей командой по найденным опциям, сравните их между собой, основываясь на сложности реализации, и отметьте сложность каждой опции на стикере. Можно сгруппировать задачи по размеру для лёгкости сравнения. Подумайте над тем, какие опции более низкого качества можно выкинуть, оставив при этом варианты, примерно равные по объему, но высшего качества.
Также необходимо определиться с максимально необходимым уровнем качества для каждой задачи. Например, реализация процесса удаления некорректных адресов в риалтайме не будет намного более ценной опцией, чем ночная задача по удалению этих адресов. Вынесите стикеры с опциями, превышающими максимальный уровень качества, за пределы гамбургера – это то, что останется после того, как вы «съедите» гамбургер.
ШАГ 5: Сделайте первый укус
Теперь, когда гамбургер готов, решите, насколько большой кусок вы готовы откусить. Определитесь с минимально приемлемым уровнем качества для каждого слоя гамбургера. Например, будем считать ручную рассылку неприемлемой ввиду низкой эффективности, но ежемесячная отправка может быть вполне приемлемой. Если вариант с меньшим уровнем качества является более-менее близким к опции высшего качества по сложности реализации, тогда вам стоит откусить сразу кусок побольше. Например, реализация авторассылки неперсонализированных писем с ручной отпиской не будет гораздо более сложной, чем интеграция с MailChimp. Обратный пример – обновление клиентской активности в реальном времени может оказаться более трудоёмким, чем медленный запрос из базы по требованию. А для некоторых этапов, например, для задачи по удалению некорректных адресов, отсутствие реализации уже может быть минимальным требованием.
ШАГ 6: Откусите еще раз… и продолжайте
В дальнейшем каждый новый «укус» гамбургера должен обеспечивать более высокое качество – например, даже простейшая реалиация удаления некорректных адресов повышает качество, так же, как и более частая рассылка. Всегда сравнивайте сложность реализации возможных вариантов перед тем, как определить величину «откушенного» куска гамбургера.
Этот метод неплохо работает в первую очередь благодаря тому, что он достаточно визуален, и это помогает команде обдумывать альтернативные пути, оставаясь в своей зоне комфорта. Также хорошо работает аналогия с «откусыванием» гамбургера. Пользуясь этим методом, вы можете достаточно легко объяснить, почему реализация отдельного компонента в рамках истории не имеет смысла, ведь обычно люди не выбирают из гамбургера только салат. По крайней мере, пока они голодны.
corwin7
Еще бы менее искуственный пример… Реальные эпики, особенно если говорить про IB object domain, далеко не столь тривиальные. Плюс, стейкхолдеры ждут что каждая стори будет нести в себе business value, а не будет чем-то глубоко техническим и непонятным с их точки зрения. В большинстве случаев они не будут сайноффить стори, если мы будет импользовать только горизонтальный подход к разбивке эпика