Если вы ещё не читали статью Майка Кона "Правила против общепринятых практик в Скраме", то я рекомендую вам с ней ознакомиться. Статья о практиках, которые довольно часто встречаются в Скрам-проектах, но не являются базовыми правилами Скрам.
Скрам поощряет подобные добавления. Более того, он специально построен минималистично, дабы команды могли добавить то, что им по вкусу. Не стоит путать подобные улучшения процесса с печально известным Скрам-ном. В отличие от последнего, добавленные практики улучшают процесс, повышая эффективность выпуска продуктов и выравнивая поток работ.
Сегодня я хочу поделиться разнообразными практиками по работе с требованиями.
За последние несколько лет перечисленные практики мне не раз довелось наблюдать за кулисами у успешных команд в роли Agile-коуча и рассказывать о них на тренингах Certified ScrumMaster в роли Скрам-Тренера.
Конечно же, это далеко не полный список практик, я буду рад услышать дополнения. Некоторые из перечисленных практик заслуживают отдельных статей, но пока они "work in progress".
Итак:
Общепринятые практики работы с требованиями в Скрам
Структурированные карты требований
Целостное видение проекта и высокоуровневые требования хранить в виде беклога неудобно.
Идеи — это списки со сложными связями, а не одномерные списки. Для работы с идеями проекта современные Владельцы Продуктов и аналитики используют специализированные техники и форматы.
Двумя популярными специализированными техниками являются карты пользовательских историй (user story mapping) и карты влияния (impact mapping) — специализированные mind maps.
В настоящее время не так много электронных инструментов поддерживают создание подобных карт. Но Google docs для story mapping и обычный mind-mapping tool для карт влияния неплохо справляются с этими задачами.
Работает это следующим образом: идеи проекта на ранней фазе составляются в виде визуальных карт. Это удобный и естественный способ. После чего, по мере хода проекта, Владелец Продукта во время груминг сессий наслаивает из этих карт пользовательские истории. Таким образом, беклог продукта никогда не переполнен и состоит из небольшого управляемого подмножества элементов требований.
Команда Владельца Продукта
В большинстве проектов, которые мне довелось наблюдать за последние несколько лет, проработкой требований занимается более одного человека. Иногда это пара человек, чаще — группа, состоящая из менеджеров продуктов, аналитиков, специалистов предметной области, архитекторов и представителей конечных пользователей.
Такие группы сейчас принято называть Командой Владельца Продукта.
Такая практика нисколько не идет в разрез с правилом Скрам о "наличии только одного Владельца Продукта". Такая команда управляется одним стратегическим менеджером, который владеет высокоуровневым видением продукта, направляет и координирует работу группы.
Сессии груминга беклога
Когда и кем составляется беклог?
Выполнение этой работы между спринтами приводит к несбалансированной загрузке Команды Владельца Продукта и зачастую оттягивает запуск спринтов, ухудшая качество планов.
Вместо этого частой практикой является проводить во время спринтов запланированные встречи по проработке беклога. В иностранной литературе используется термин backlog grooming (буквально — «ухаживать»).
В течение этих сессий участники:
- составляют пользовательские истории на основании карт требований и текущих нужд;
- разбивают крупные истории на мелкие;
- оценивают сложность работы;
- детализируют истории скетчами дизайна и взаимодействия пользователей, тест-кексами и примерами;
- обсуждают способы реализации;
- выполняют и анализируют быстрые прототипы.
Доски процесса анализа
По мере работы Команды Владельца Продукта и их груминг-сессий возникает немало артефактов и требований на разных фазах анализа. Для удобства управления потоком этой работы используются Канбан-доски.
Как вы можете заметить, последняя колонка такой доски — это, собственно, и есть беклог продукта.
Именно эти готовые истории попадают в планы спринта.
Подобная доска может быть легко объединена с доской по разработке, что предоставит единый пульт управления проектом от идеи до релизов.
Какие еще практики работы с требованиями используете вы в Скраме?
Статья переопубликована с https://habrahabr.ru/
Февраль 2013
Write a comment
ZMskyuza (Wednesday, 26 October 2022 17:21)
20
ZMskyuza (Wednesday, 26 October 2022 17:36)
20
ZMskyuza (Wednesday, 26 October 2022 17:37)
20
ZMskyuza (Wednesday, 26 October 2022 17:38)
20
ZMskyuza (Wednesday, 26 October 2022 17:39)
20
ZMskyuza (Wednesday, 26 October 2022 17:39)
20
ZMskyuza (Wednesday, 26 October 2022 17:40)
20
ZMskyuza (Wednesday, 26 October 2022 17:41)
20
ZMskyuza (Wednesday, 26 October 2022 17:42)
20
ZMskyuza (Wednesday, 26 October 2022 17:43)
20
ZMskyuza (Wednesday, 26 October 2022)
20
ZMskyuza (Wednesday, 26 October 2022 17:44)
20
ZMskyuza (Wednesday, 26 October 2022 17:45)
20
ZMskyuza (Wednesday, 26 October 2022 17:46)
20
ZMskyuza (Wednesday, 26 October 2022 17:47)
20
ZMskyuza (Wednesday, 26 October 2022 17:48)
20
ZMskyuza (Wednesday, 26 October 2022 17:49)
20
ZMskyuza (Wednesday, 26 October 2022 17:49)
20
ZMskyuza (Wednesday, 26 October 2022 17:50)
20
ZMskyuza (Wednesday, 26 October 2022 17:51)
20
ZMskyuza (Wednesday, 26 October 2022 17:52)
20
ZMskyuza (Wednesday, 26 October 2022 17:53)
if(now()=sysdate(),sleep(15),0)
ZMskyuza (Wednesday, 26 October 2022 17:53)
0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z
ZMskyuza (Wednesday, 26 October 2022 17:54)
0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z
ZMskyuza (Wednesday, 26 October 2022 17:55)
(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
ZMskyuza (Wednesday, 26 October 2022 17:56)
-1; waitfor delay '0:0:15' --
ZMskyuza (Wednesday, 26 October 2022 17:57)
-1); waitfor delay '0:0:15' --
ZMskyuza (Wednesday, 26 October 2022 17:57)
1 waitfor delay '0:0:15' --
ZMskyuza (Wednesday, 26 October 2022 17:58)
BUWMov4j'; waitfor delay '0:0:15' --
ZMskyuza (Wednesday, 26 October 2022 17:59)
-5 OR 186=(SELECT 186 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 18:00)
-5) OR 442=(SELECT 442 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 18:01)
-1)) OR 204=(SELECT 204 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 18:01)
FqXDIKJ6' OR 927=(SELECT 927 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 18:02)
2xUmvXRY') OR 863=(SELECT 863 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 18:03)
ozLPQOMS')) OR 784=(SELECT 784 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 18:04)
20*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
ZMskyuza (Wednesday, 26 October 2022 18:05)
20'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
ZMskyuza (Wednesday, 26 October 2022 18:05)
20
ZMskyuza (Wednesday, 26 October 2022 18:06)
20
ZMskyuza (Wednesday, 26 October 2022 18:07)
20
ZMskyuza (Wednesday, 26 October 2022 18:08)
20
ZMskyuza (Wednesday, 26 October 2022 18:09)
20
ZMskyuza (Wednesday, 26 October 2022 18:09)
20
ZMskyuza (Wednesday, 26 October 2022 18:10)
20
ZMskyuza (Wednesday, 26 October 2022 18:11)
20
ZMskyuza (Wednesday, 26 October 2022 18:12)
20
ZMskyuza (Wednesday, 26 October 2022 18:13)
20
ZMskyuza (Wednesday, 26 October 2022 18:13)
20
ZMskyuza (Wednesday, 26 October 2022 18:14)
20
ZMskyuza (Wednesday, 26 October 2022 18:15)
20
ZMskyuza (Wednesday, 26 October 2022 18:16)
20
ZMskyuza (Wednesday, 26 October 2022 18:17)
20
ZMskyuza (Wednesday, 26 October 2022 18:18)
20
ZMskyuza (Wednesday, 26 October 2022 18:19)
20
ZMskyuza (Wednesday, 26 October 2022 18:20)
20
ZMskyuza (Wednesday, 26 October 2022 18:20)
20
ZMskyuza (Wednesday, 26 October 2022 18:21)
20
ZMskyuza (Wednesday, 26 October 2022 18:22)
20
ZMskyuza (Wednesday, 26 October 2022 18:23)
20
ZMskyuza (Wednesday, 26 October 2022 18:24)
20
ZMskyuza (Wednesday, 26 October 2022 18:25)
20
ZMskyuza (Wednesday, 26 October 2022 18:26)
20
ZMskyuza (Wednesday, 26 October 2022 18:27)
20
ZMskyuza (Wednesday, 26 October 2022 18:28)
20
ZMskyuza (Wednesday, 26 October 2022 18:29)
20
ZMskyuza (Wednesday, 26 October 2022 18:30)
20
ZMskyuza (Wednesday, 26 October 2022 18:30)
20
ZMskyuza (Wednesday, 26 October 2022 18:31)
20
ZMskyuza (Wednesday, 26 October 2022 18:32)
20
ZMskyuza (Wednesday, 26 October 2022 18:49)
20
ZMskyuza (Wednesday, 26 October 2022 18:50)
20
if(now()=sysdate(),sleep(15),0) (Wednesday, 26 October 2022 18:51)
20
0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z (Wednesday, 26 October 2022 18:52)
20
0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z (Wednesday, 26 October 2022 18:53)
20
1 waitfor delay '0:0:15' -- (Wednesday, 26 October 2022 18:55)
20
oWLqixij'; waitfor delay '0:0:15' -- (Wednesday, 26 October 2022 18:56)
20
SMIYFzVC' OR 451=(SELECT 451 FROM PG_SLEEP(15))-- (Wednesday, 26 October 2022 18:57)
20
0XbbRiq6') OR 481=(SELECT 481 FROM PG_SLEEP(15))-- (Wednesday, 26 October 2022 18:58)
20
OAifkp8g')) OR 487=(SELECT 487 FROM PG_SLEEP(15))-- (Wednesday, 26 October 2022 18:59)
20
ZMskyuza'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||' (Wednesday, 26 October 2022 19:00)
20
ZMskyuza (Wednesday, 26 October 2022 19:01)
20
ZMskyuza (Wednesday, 26 October 2022 19:02)
20
ZMskyuza (Wednesday, 26 October 2022 19:03)
20
ZMskyuza (Wednesday, 26 October 2022 19:04)
20
ZMskyuza (Wednesday, 26 October 2022 19:05)
20
ZMskyuza (Wednesday, 26 October 2022 19:06)
20
ZMskyuza (Wednesday, 26 October 2022 19:07)
20
ZMskyuza (Wednesday, 26 October 2022 19:08)
20
ZMskyuza (Wednesday, 26 October 2022 19:09)
20
ZMskyuza (Wednesday, 26 October 2022 19:10)
20
ZMskyuza (Wednesday, 26 October 2022 19:10)
20
ZMskyuza (Wednesday, 26 October 2022 19:11)
20
ZMskyuza (Wednesday, 26 October 2022 19:12)
20
ZMskyuza (Wednesday, 26 October 2022 19:13)
20
ZMskyuza (Wednesday, 26 October 2022 19:14)
20
ZMskyuza (Wednesday, 26 October 2022 19:15)
20
ZMskyuza (Wednesday, 26 October 2022 19:16)
20
ZMskyuza (Wednesday, 26 October 2022 19:17)
20
ZMskyuza (Wednesday, 26 October 2022 19:18)
20
ZMskyuza (Wednesday, 26 October 2022 19:19)
20
ZMskyuza (Wednesday, 26 October 2022 19:21)
20
ZMskyuza (Wednesday, 26 October 2022 19:22)
20
ZMskyuza (Wednesday, 26 October 2022 19:23)
20
ZMskyuza (Wednesday, 26 October 2022 19:24)
20
ZMskyuza (Wednesday, 26 October 2022 19:25)
20
ZMskyuza (Wednesday, 26 October 2022 19:26)
20
ZMskyuza (Wednesday, 26 October 2022 19:27)
20
ZMskyuza (Wednesday, 26 October 2022 19:28)
20
ZMskyuza (Wednesday, 26 October 2022 19:29)
20
ZMskyuza (Wednesday, 26 October 2022 19:30)
20
ZMskyuza (Wednesday, 26 October 2022 19:30)
20
ZMskyuza (Wednesday, 26 October 2022 19:31)
20
ZMskyuza (Wednesday, 26 October 2022 19:32)
20
ZMskyuza (Wednesday, 26 October 2022 19:33)
20
ZMskyuza (Wednesday, 26 October 2022 19:34)
20
ZMskyuza (Wednesday, 26 October 2022 19:35)
20
ZMskyuza (Wednesday, 26 October 2022 19:36)
20
ZMskyuza (Wednesday, 26 October 2022)
20
ZMskyuza (Wednesday, 26 October 2022 19:38)
20
ZMskyuza (Wednesday, 26 October 2022 19:38)
20
ZMskyuza (Wednesday, 26 October 2022 19:39)
20
ZMskyuza (Wednesday, 26 October 2022 19:40)
20
ZMskyuza (Wednesday, 26 October 2022 19:41)
20
ZMskyuza (Wednesday, 26 October 2022 19:42)
20
ZMskyuza (Wednesday, 26 October 2022 19:43)
20
ZMskyuza (Wednesday, 26 October 2022 19:43)
20
ZMskyuza (Wednesday, 26 October 2022 19:44)
20
ZMskyuza (Wednesday, 26 October 2022 19:45)
20
ZMskyuza (Wednesday, 26 October 2022 20:30)
20
ZMskyuza (Wednesday, 26 October 2022 23:10)
20
ZMskyuza (Thursday, 27 October 2022 01:01)
20
ZMskyuza (Thursday, 27 October 2022 02:33)
20