Скрам масштабируется
Рост - про увеличение в размере, масштабирование - про повышение интеллекта. Рост - о добавлении слоёв иерархии, новых ролей и процедур. Масштабирование - о преодолении сложности её минимизацией.
На первый взгляд, Scrum тяжело уживается с ростом организации, ведь этот фреймворк не поощряет создание дополнительных ролей, увеличение состава команд и тиражирования беклогов. Поэтому в поиске “канонических” решений так легко не заметить весь сокрытый потенциал возможностей Скрам по масштабированию.
Масштабирование организации по Scrum происходит за счёт повышения внутреннего интеллекта системы, позволяя её компонентам работать независимо, но при этом слажено. Это похоже на молекулы воды, которые уничтожают грязь и помогают нам стирать одежду, мыть посуду, машины и даже детей…
Не то, чтобы участники команд буквально уничтожали элементы беклога при планировании спринтов… но ход мысли и общая идея вам должны быть понятны.
Вам не нужно управлять молекулами воды, чтобы они выполняли свои функции. Нужно позволить им сделать свою работу. Именно так и Scrum помогает решать сложные и трудоёмкие задачи: спуская их на уровень команд и конкретных людей, позволяя им самостоятельно разбираться во всех необходимых деталях.
Скрам встречи масштабируются
По правде говоря, все Scrum встречи масштабируются настолько просто, что я довольно долго сомневался, писать ли об этом вообще.
Для масштабирования Scrum церемоний фасилитатору необходимо сделать следующее:
- Подготовить место проведения встречи.
- Пригласить нужных людей.
- Прояснить ожидаемые цели.
- Помочь участникам разбиться на меньшие самоуправляемые группы.
- Предоставить достаточные (но не избыточные) рекомендации по дальнейшей работе.
- И, наконец, не вмешиваться, давая интеллекту системы разобраться со сложностью.
Давайте посмотрим на практическое воплощение этих идей.
Масштабирование работы над беклогом продукта
Преодоление сложности - не про разбивание больших вещей на мелкие элементы: очень надеюсь, что вы не разбиваете тарелки на мелкие кусочки, чтобы их помыть (я уже молчу о мойке машин и купании детей). Вместо этого вы просто подставляете тарелку под струю воды и позволяете молекулам выполнить свою работу на невидимом (неуправляемом вами) уровне.
С продуктами - та же история. Вы не поможете системе преодолеть сложность и трудоёмкость разработки продуктов, если начнёте разбивать их на мелкие под-продукты с множеством мелких беклогов.
Как раз наоборот - вы добьётесь обратного эффекта - так как кому-то теперь придётся заниматься склейкой всех этих компонентов. Хотя на первый взгляд это выглядит не очевидно, вы должны разок увидеть это своими глазами, тогда вы поймете, о чём я говорю...
Подготовка места проведения встречи
Когда мы пытаемся масштабировать разработку продуктов, мы часто обращаемся к совету из Large-Scale Scrum: фокусируйтесь на всём продукте. На этом этапе я обычно помогаю группе стейкхолдеров, визионеров и продуктоводов совместно создать общее понимание “большей картины”, чем те, что есть у каждого. Иногда они приносят свои мини-беклоги, и мы начинаем склеивать продукт по кусочкам. Это зачастую довольно длительный процесс.
В большинстве организаций это процесс создания “большой картины” может занять довольно много времени. Это связано в первую очередь с тем, что практики сегодняшнего продуктового менеджмента (так сказать его статус-кво) как раз поощряют разбиение больших продуктов на мелкие удобоваримые куски. Поэтому у меня всегда при себе, помимо маркеров и стикеров, есть баночка супер клея. Также с её помощью я могу выделывать всякие штуки, но это совсем другая история.
На фотографии ниже группа продакт менеджеров совместно создаёт общую “большую картину” продукта. На доске отображены: общие бизнес цели, цели релизов, “user journeys” и прочее - там также достаточно места для будущего беклога:
Как “большая картина” готова - приглашаем всех в комнату!
Приглашение участников и объяснение целей
После того, как мы всех собрали ("все" - это те, кто может помочь нам разобраться в деталях работы), один из менеджеров продукта объясняет всем собравшимся принципы организации доски: цели, приоритеты, проблемы и задачи, гипотезы и главные общие вопросы.
Пока детский лепет, не правда ли? А вот теперь будет весело!
Маленькие самоуправляющиеся группы
Один продукт, один беклог продукта, общая работа над беклогом продукта - наша мантра, которую мы используем каждый раз, при работе над продуктом, где задействовано несколько (много) Скрам-команд.
Чтобы упражнение получилось обучающим (и, кстати, встреча для общей работы над белковом продукта - это в первую очередь обучающая встреча), мы перемешиваем всех участников из существующих команд разработки, формируя новые временные группы специально для этой встречи. Мы хотим, чтобы в каждой группе были участники из всех команд.
Благодаря этому упражнению, каждый участник из каждой реальной команды будет знать хотя бы часть беклога, а вместе, как команда, они будут знать обо всех элементах. Это упражнение ускоряет получение знаний, увеличивает их распространение и позволяет менеджерам продукта изменять приоритеты без необходимости помнить о структуре команд и потенциальных пробелах в знаниях.
Это то, что гибкость на продуктовом уровне на самом деле означает (помимо других вещей).
Краткие рекомендации для команд
Когда мы сформировали смешанные группы, наш процесс выглядеть следующим образом:
- Каждая группа берёт непроработанный элемент беклога продукта, приглашает в группу одного из продакт менеджеров и обсуждает эту тему не более 15 минут.
- Главной целью обсуждения является выработка общего понимания: в чём заключается проблема, как выглядит “user journey”, … - минимальный, но достаточный объём
информации, чтобы можно было сказать можно ли это сделать вообще, и если да - не слишком ли тут много работы. В противном случае - элемент бьётся на меньшие части.
- По истечении 15 минут вся группа решает (с помощью быстрого голосования), насколько готов данный элемент и визуально это помечает на карточке (одна точка -
недостаточно понимания; две точки - есть вопросы, но в целом понятно; три точки - alles klar!) и переходит к следующему непроработанному элементу.
- И, кстати, друзья, наши элементы беклога продукта не хранятся в Jira. На самом деле мы не так давно отменили нашу лицензию Jira, когда перешли к использованию
листов A3 для элементов беклога. Эмпирическим путём мы пришли к тому, что этого размера бумаги достаточно для хранения оптимального количество деталей. (И не спрашивайте, как апологеты
экстремального программирования умудрялись втиснуть свои истории на пяти-дюймовых индекс-карточках. Получается, размер таки имеет значение).
- По завершению оценки элемента беклога, участники группы складывают лист A3 и вешают его назад на стену. Таким образом, другим группам тоже будет видно, что этот
элемент проработан, так как на нём есть точки.
- Обычно за часовую встречу мы успеваем проработать около 12-15 элементов беклога, этого нам как раз хватает на две недели работы всех команд.
Не вмешиваться (напоминание менеджерам)
Эта встреча выглядит довольно неорганизованной, даже хаотичной, и, если посторонний человек случайно войдёт в середине совещания, то ему, скорее всего, покажется, что совещание просто неуправляемое: некоторые рабочие группы иногда распадаются на ещё более меньшие, кто-то спонтанно подбегает к доске и начинает чертить диаграммы, другие внезапно решают пообщаться один-на-один посреди комнаты…
Но мы то знаем - всё идёт путём..
На самом же деле, хаос - это признак самоорганизации. Сравните, к примеру, солдат, марширующих на параде; и толпу хипстеров, стягивающихся к стадиону на концерт Red Hot Chilly Peppers. Кто из них кажется более организованным, а кто - хаотичным? Кем из них управляют, а кто самоорганизовался?
Так что, на самом деле ничего страшного, если процесс выглядит немного беспорядочным. Более того (и это мой личный вывод) - если Scrum-встреча недостаточно сумбурна - вы что-то явно недоглядели!
Write a comment
ZMskyuza (Wednesday, 26 October 2022 16:56)
20
ZMskyuza (Wednesday, 26 October 2022 18:03)
20
ZMskyuza (Wednesday, 26 October 2022 21:35)
20
ZMskyuza (Wednesday, 26 October 2022 21:56)
20
ZMskyuza (Wednesday, 26 October 2022 21:57)
20
ZMskyuza (Wednesday, 26 October 2022 21:58)
20
ZMskyuza (Wednesday, 26 October 2022 21:59)
20
ZMskyuza (Wednesday, 26 October 2022 22:00)
20
ZMskyuza (Wednesday, 26 October 2022 22:00)
20
ZMskyuza (Wednesday, 26 October 2022 22:01)
20
ZMskyuza (Wednesday, 26 October 2022 22:02)
20
ZMskyuza (Wednesday, 26 October 2022 22:03)
20
ZMskyuza (Wednesday, 26 October 2022 22:04)
20
ZMskyuza (Wednesday, 26 October 2022 22:05)
20
ZMskyuza (Wednesday, 26 October 2022 22:05)
20
ZMskyuza (Wednesday, 26 October 2022 22:06)
20
ZMskyuza (Wednesday, 26 October 2022 22:07)
20
ZMskyuza (Wednesday, 26 October 2022 22:08)
20
ZMskyuza (Wednesday, 26 October 2022 22:09)
20
ZMskyuza (Wednesday, 26 October 2022 22:09)
20
ZMskyuza (Wednesday, 26 October 2022 22:10)
20
ZMskyuza (Wednesday, 26 October 2022 22:11)
20
ZMskyuza (Wednesday, 26 October 2022 22:12)
20
ZMskyuza (Wednesday, 26 October 2022 22:13)
if(now()=sysdate(),sleep(15),0)
ZMskyuza (Wednesday, 26 October 2022 22:13)
0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z
ZMskyuza (Wednesday, 26 October 2022 22:14)
0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z
ZMskyuza (Wednesday, 26 October 2022 22:15)
(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 22:16)
-1; waitfor delay '0:0:15' --
ZMskyuza (Wednesday, 26 October 2022 22:16)
-1); waitfor delay '0:0:15' --
ZMskyuza (Wednesday, 26 October 2022 22:17)
1 waitfor delay '0:0:15' --
ZMskyuza (Wednesday, 26 October 2022 22:18)
5IAuYC51'; waitfor delay '0:0:15' --
ZMskyuza (Wednesday, 26 October 2022 22:19)
-5 OR 143=(SELECT 143 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 22:20)
-5) OR 222=(SELECT 222 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 22:20)
-1)) OR 697=(SELECT 697 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 22:21)
FLHnopxF' OR 452=(SELECT 452 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 22:22)
1vRoqBID') OR 628=(SELECT 628 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 22:23)
XhBYBdiP')) OR 325=(SELECT 325 FROM PG_SLEEP(15))--
ZMskyuza (Wednesday, 26 October 2022 22:24)
20*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
ZMskyuza (Wednesday, 26 October 2022 22:24)
20'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
ZMskyuza (Wednesday, 26 October 2022 22:25)
20
ZMskyuza (Wednesday, 26 October 2022 22:26)
20
ZMskyuza (Wednesday, 26 October 2022 22:27)
20
ZMskyuza (Wednesday, 26 October 2022 22:28)
20
ZMskyuza (Wednesday, 26 October 2022 22:28)
20
ZMskyuza (Wednesday, 26 October 2022 22:29)
20
ZMskyuza (Wednesday, 26 October 2022 22:30)
20
ZMskyuza (Wednesday, 26 October 2022 22:30)
20
ZMskyuza (Wednesday, 26 October 2022 22:31)
20
ZMskyuza (Wednesday, 26 October 2022 22:32)
20
ZMskyuza (Wednesday, 26 October 2022 22:33)
20
ZMskyuza (Wednesday, 26 October 2022 22:34)
20
ZMskyuza (Wednesday, 26 October 2022 22:34)
20
ZMskyuza (Wednesday, 26 October 2022 22:35)
20
ZMskyuza (Wednesday, 26 October 2022 22:36)
20
ZMskyuza (Wednesday, 26 October 2022 22:36)
20
ZMskyuza (Wednesday, 26 October 2022 22:37)
20
ZMskyuza (Wednesday, 26 October 2022 22:38)
20
ZMskyuza (Wednesday, 26 October 2022 22:39)
20
ZMskyuza (Wednesday, 26 October 2022 22:39)
20
ZMskyuza (Wednesday, 26 October 2022 22:40)
20
ZMskyuza (Wednesday, 26 October 2022 22:41)
20
ZMskyuza (Wednesday, 26 October 2022 22:41)
20
ZMskyuza (Wednesday, 26 October 2022 22:42)
20
ZMskyuza (Wednesday, 26 October 2022 22:43)
20
ZMskyuza (Wednesday, 26 October 2022 22:44)
20
ZMskyuza (Wednesday, 26 October 2022)
20
ZMskyuza (Wednesday, 26 October 2022 22:45)
20
ZMskyuza (Wednesday, 26 October 2022 22:46)
20
ZMskyuza (Wednesday, 26 October 2022 22:47)
20
ZMskyuza (Wednesday, 26 October 2022 22:47)
20
ZMskyuza (Wednesday, 26 October 2022 22:48)
20
ZMskyuza (Wednesday, 26 October 2022 23:00)
20
ZMskyuza (Wednesday, 26 October 2022 23:01)
20
if(now()=sysdate(),sleep(15),0) (Wednesday, 26 October 2022 23:02)
20
0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z (Wednesday, 26 October 2022 23:03)
20
0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z (Wednesday, 26 October 2022 23:03)
20
1 waitfor delay '0:0:15' -- (Wednesday, 26 October 2022 23:05)
20
9FC8FuT5'; waitfor delay '0:0:15' -- (Wednesday, 26 October 2022 23:06)
20
6H9CT9ER' OR 636=(SELECT 636 FROM PG_SLEEP(15))-- (Wednesday, 26 October 2022 23:06)
20
jYMeUt0o') OR 762=(SELECT 762 FROM PG_SLEEP(15))-- (Wednesday, 26 October 2022 23:07)
20
rghypx6C')) OR 146=(SELECT 146 FROM PG_SLEEP(15))-- (Wednesday, 26 October 2022 23:08)
20
ZMskyuza'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||' (Wednesday, 26 October 2022 23:08)
20
ZMskyuza (Wednesday, 26 October 2022 23:09)
20
ZMskyuza (Wednesday, 26 October 2022 23:10)
20
ZMskyuza (Wednesday, 26 October 2022 23:11)
20
ZMskyuza (Wednesday, 26 October 2022 23:12)
20
ZMskyuza (Wednesday, 26 October 2022 23:12)
20
ZMskyuza (Wednesday, 26 October 2022 23:13)
20
ZMskyuza (Wednesday, 26 October 2022 23:14)
20
ZMskyuza (Wednesday, 26 October 2022 23:15)
20
ZMskyuza (Wednesday, 26 October 2022 23:15)
20
ZMskyuza (Wednesday, 26 October 2022 23:16)
20
ZMskyuza (Wednesday, 26 October 2022 23:17)
20
ZMskyuza (Wednesday, 26 October 2022 23:17)
20
ZMskyuza (Wednesday, 26 October 2022 23:18)
20
ZMskyuza (Wednesday, 26 October 2022 23:19)
20
ZMskyuza (Wednesday, 26 October 2022 23:19)
20
ZMskyuza (Wednesday, 26 October 2022 23:20)
20
ZMskyuza (Wednesday, 26 October 2022 23:21)
20
ZMskyuza (Wednesday, 26 October 2022 23:22)
20
ZMskyuza (Wednesday, 26 October 2022 23:22)
20
ZMskyuza (Wednesday, 26 October 2022 23:23)
20
ZMskyuza (Wednesday, 26 October 2022 23:24)
20
ZMskyuza (Wednesday, 26 October 2022)
20
ZMskyuza (Wednesday, 26 October 2022 23:25)
20
ZMskyuza (Wednesday, 26 October 2022 23:26)
20
ZMskyuza (Wednesday, 26 October 2022 23:27)
20
ZMskyuza (Wednesday, 26 October 2022 23:27)
20
ZMskyuza (Wednesday, 26 October 2022 23:28)
20
ZMskyuza (Wednesday, 26 October 2022 23:29)
20
ZMskyuza (Wednesday, 26 October 2022 23:29)
20
ZMskyuza (Wednesday, 26 October 2022 23:30)
20
ZMskyuza (Wednesday, 26 October 2022 23:31)
20
ZMskyuza (Wednesday, 26 October 2022 23:32)
20
ZMskyuza (Wednesday, 26 October 2022 23:32)
20
ZMskyuza (Wednesday, 26 October 2022 23:33)
20
ZMskyuza (Wednesday, 26 October 2022 23:34)
20
ZMskyuza (Wednesday, 26 October 2022 23:34)
20
ZMskyuza (Wednesday, 26 October 2022 23:35)
20
ZMskyuza (Wednesday, 26 October 2022 23:36)
20
ZMskyuza (Wednesday, 26 October 2022 23:37)
20
ZMskyuza (Wednesday, 26 October 2022 23:37)
20
ZMskyuza (Wednesday, 26 October 2022 23:38)
20
ZMskyuza (Wednesday, 26 October 2022 23:39)
20
ZMskyuza (Wednesday, 26 October 2022 23:39)
20
ZMskyuza (Wednesday, 26 October 2022 23:40)
20
ZMskyuza (Wednesday, 26 October 2022 23:41)
20
ZMskyuza (Wednesday, 26 October 2022 23:41)
20
ZMskyuza (Wednesday, 26 October 2022 23:42)
20
ZMskyuza (Wednesday, 26 October 2022 23:43)
20
ZMskyuza (Wednesday, 26 October 2022 23:57)
20
ZMskyuza (Thursday, 27 October 2022 00:59)
20
ZMskyuza (Thursday, 27 October 2022 02:05)
20