Система понятий — фундамент доменной модели. Но есть неудобный вопрос: как её добыть? Знания о домене размазаны по головам: продажи знают своё, склад — своё, бухгалтерия — своё, и никто не видит процесс целиком. Классические разговоры по одному — это испорченный телефон в замедленной съёмке. Event Storming — техника, которая решает задачу иначе: собрать всех в одной комнате и за несколько часов выложить процесс на стену. Целиком. Придумал её итальянский консультант Альберто Брандолини в 2013 году; он же описал её в книге «Introducing EventStorming» — там же живут договорённости о цветах стикеров, которыми пользуются до сих пор.
Сначала на стене одни события в хронологии. Потом рядом с каждым дописывают команду и того, кто её отдаёт, — иногда это не человек, а политика: «как только заказ оплачен — отложить товар». И только теперь видно главное: команды и события слипаются в сгустки, каждый сгусток — кандидат в агрегат, а место, где меняется язык («заказ» стал «грузом»), — граница контекста.
Идея: события как общий язык
Почему техника строится вокруг событий домена («заказ оформлен», «платёж получен», «товар отгружен»)? Потому что событие — единственная форма знания, о которой легко говорить всем:
- бизнес мыслит именно так — «сначала приходит заявка, потом мы её проверяем…»;
- событие — это факт в прошедшем времени: о нём не спорят «как правильно», а вспоминают «как бывает»;
- у событий есть естественная ось — время: их можно разложить в хронологию, и пробелы станут видны буквально глазами.
Никаких UML и нотаций, которые бизнес не читает. Оранжевый стикер + прошедшее время + стена. Порог входа — нулевой, поэтому эксперты участвуют, а не присутствуют.
Пять цветов стены: оранжевым пишут факт, синим то, что его вызвало, сиреневым автоматическую реакцию, жёлтым людей и агрегаты (различают размером), красным спор или дыру.
Как проходит штурм: от хаоса к структуре
1. Выброс событий. Все участники молча пишут на оранжевых стикерах события своего куска процесса и клеят на длинную бумажную ленту на стене. На этом этапе важно не обсуждать — важно выгрузить. Хаос нормален. 15–20 минут, и признак конца — не тишина, а то, что новые стикеры стали повторять уже висящие; ведущий объявляет «ещё две минуты» и закрывает этап.
Что именно пишут на стикере — главный вопрос новичка, и он решается двумя правилами. Первое: глагол в прошедшем времени и предмет, а не действие и не команда. «Заказ оформлен», «платёж получен», «товар зарезервирован» — события; «оформить заказ», «отправка письма», «менеджер проверяет» — нет. Второе: событие — это то, о чём кто-то узнаёт и на что кто-то реагирует. Если факт никого не интересует, это не событие домена, а шаг реализации.
С уровнем детализации сложнее, и правильный ответ на первом этапе — не решать его. Пишут так, как говорят, и обсуждают потом:
- Слишком крупно: «заказ обработан» — за ним спрятана половина процесса, и на хронологии это станет видно (между ним и соседями обнаружится дыра). Тогда его расклеивают на несколько.
- Слишком мелко: «поле статус изменилось», «запись в таблице создана» — это не домен, а реализация. Такие стикеры снимают или переформулируют.
- Правильный размер: факт, который бизнес назвал бы в разговоре. «Платёж получен» — да. А вот «платёж получен на 50 тысяч» или «платёж получен на всю сумму» — это уже не размер, а два разных события, и если участники спорят, какое из них правильное, это горячая точка: значит, в домене есть различие («частичная оплата»), которое кто-то держит в голове, а кто-то нет. Такой спор не решают на месте — на него клеят красный стикер.
Полезная подсказка от ведущего в самом начале: «пишите так, как сказали бы коллеге в курилке». Это даёт нужный уровень лучше любых инструкций.
2. Хронология. Вместе выстраиваем события по времени: что за чем. Тут же вскрывается главное: дубли под разными именами («заявка принята» и «заказ создан» — это одно событие или два?), дыры («а что происходит между оплатой и отгрузкой?») и развилки. 40–60 минут на big picture; признак конца — по ленте можно пройти пальцем слева направо и рассказать процесс без пропусков, а все оставшиеся вопросы уже помечены красным.
Здесь же всплывает частая неприятность: половина событий оказалась из соседнего процесса. Не выбрасывайте их. Правильный ход — отнести их вниз или в сторону, в «парковку», отметив одной линией; это не мусор, а либо соседний контекст (то есть будущая граница), либо следующий штурм. Решение о том, что в рамках, принимает ведущий вслух и один раз: «сегодня мы про путь от корзины до передачи в доставку, всё остальное — в парковку». Без этой фразы в начале лента расползается, и к третьему часу на ней вся компания.
3. Горячие точки. Там, где участники заспорили или никто не знает ответа, клеится розовый/красный стикер — hot spot. Это золото воркшопа: каждый такой стикер — либо скрытый конфликт понятий, либо дыра в процессе, о которой узнали бы в проде. Отдельного времени этот шаг не занимает — он идёт всё время, и работа ведущего здесь в том, чтобы обрывать спор на второй минуте: «отмечаем и идём дальше».
4. Команды и акторы. К событиям добавляются причины: команда (синий стикер — «оформить заказ») и кто её отдаёт — актор (маленький жёлтый стикер) или что её запускает — политика-реакция (сиреневый стикер: «всякий раз, когда платёж получен, — зарезервировать товар»). Вырисовывается цепочка: команда → событие → политика → команда → …
Жёлтый цвет здесь встречается дважды: маленький жёлтый — человек, большой жёлтый — агрегат. На стене их различают по размеру, и об этом лучше договориться до начала, а не на третьем часу.
5. Агрегаты и контексты. Теперь видно, вокруг чего группируются команды и события, — эти сгустки и есть кандидаты в агрегаты (жёлтые стикеры): «Заказ» принимает команды «оформить», «отменить» и порождает соответствующие события. А там, где на ленте меняется язык и набор понятий («заказ» превращается в «груз», «клиент» — в «получателя»), проступает граница контекста — та самая, стратегическая, только найденная не в кабинете, а на реальном процессе.
4-5 занимают по 30–45 минут, и у каждого свой признак конца: у команд — у каждого события есть причина (команда или политика), у агрегатов — каждая команда приклеена к какому-то сгустку, и сгустков получилось единицы, а не двадцать.
Итого на big picture — три-четыре часа с перерывами, и это разумный максимум за одну встречу: дальше внимание кончается, и стена начинает портиться. Если процесс не уложился, лучше вторая встреча, чем шестой час.
Результат нескольких часов: хронология событий, карта горячих точек, кандидаты в агрегаты и границы контекстов. Это и есть добытая онтология — сырьё, из которого дальше делаются доменная модель и спека.
Практика: что нужно для штурма
Что нужно: длинная стена с бумагой (или бесконечная доска в Miro для распределённых команд), стикеры пяти-шести цветов (оранжевый — события, синий — команды, сиреневый — политики, жёлтый — акторы и агрегаты, розовый или красный — горячие точки), ведущий-фасилитатор и — критично — живые эксперты домена, а не их представители.
Кого звать: всех, у кого есть свой кусок правды. На big picture это легко пятнадцать-двадцать человек, и это нормально: чем больше углов зрения, тем раньше вскроются расхождения. На детальный разбор одного процесса собирают уже меньше — человек шесть-десять, иначе разговор не сходится.
Сколько это длится: big picture (весь бизнес-процесс крупно) идёт от нескольких часов до целого дня — зависит от того, сколько людей и сколько процесса. Детальный уровень процесса или дизайна берут отдельной встречей на выбранный кусок.
Что происходит после штурма
Самое частое место провала — не сам штурм, а следующие два дня. Стена со стикерами живёт до первой уборки помещения, а доска в интернете — до тех пор, пока кто-нибудь помнит, зачем она. Поэтому у штурма есть обязательная вторая половина, и она занимает несколько часов.
Сразу, не вставая: фотография и подпись. Снимают стену целиком и участками так, чтобы читались стикеры, и складывают снимки туда, где их найдут (репозиторий, хранилище документов проекта), с датой и списком участников. Это страховка, а не результат: по фотографии нельзя работать, но можно восстановить, если текст разошёлся с реальностью.
В тот же день или на следующий: перенос в текст. Делает это тот, кто вёл (или названный участник — но названный вслух до конца встречи, иначе не сделает никто), и получается ровно три артефакта:
- Список событий в хронологии — обычный нумерованный список, по строке на событие, в том порядке, в котором они висели. Это скелет всего остального.
- Страница понятий — те самые понятия, связи, состояния и правила, которые прозвучали; формат и пример — в статье про систему понятий. Сюда же уезжает черновик статусной модели: переходы, которые видны по событиям одного агрегата.
- Список горячих точек — таблица: вопрос, кто отвечает, срок. Это единственный артефакт, у которого есть владелец у каждой строки, и именно поэтому он работает.
Объём всех трёх — несколько страниц. Больше не надо: подробности всё равно уточнятся при первом же коде.
В течение недели: закрытие горячих точек. Каждая строка получает ответ от названного человека, и ответ дописывается в страницу понятий, а не остаётся в переписке. Строка без ответа через неделю — сигнал, что либо вопрос не важен (тогда его закрывают как неважный, явно), либо не тому адресовали. Горячие точки, оставленные открытыми молча, — это ровно те места, где потом принимает решение разработчик в одиночку, а бизнес узнаёт о нём в проде.
Куда всё это кладут. В репозиторий того контекста, о котором штурмовали: docs/domain/ рядом с кодом. Не в вики: правка вики не входит ни в одну задачу, и через месяц текст расходится с кодом. Разбор этого правила — в той же статье про систему понятий.
Кто следит, что не забыли. У результатов штурма должен быть один человек с именем — обычно тот, кто вёл, или техлид контекста. Его работа на следующие две недели: закрыть горячие точки, довести страницу понятий до состояния «эксперт читает и соглашается» и запустить первый класс (об этом раздел «Глубже» ниже). После этого штурм считается состоявшимся; до этого — только проведённым.
Проверка через две недели, одна фраза: может ли человек, которого не было на штурме, прочитать три артефакта и понять процесс. Если да — штурм окупился. Если нет — у вас есть фотография стены.
Распределённый штурм: чем отличается
«Или бесконечная доска» — фраза, за которой скрыты серьёзные отличия. Проводить штурм удалённо можно, но не так же, и вот что меняется.
Молчаливый выброс работает хуже. На стене люди видят движение друг друга, чувствуют темп и не боятся клеить много. В онлайне участник не понимает, все ли пишут, и останавливается на трёх стикерах. Лечится явными числами: «десять минут, каждый пишет не меньше десяти событий, не думая о качестве» — и таймер на виду. Второй приём: ведущий сам пишет первые пять событий, чтобы задать пример и уровень.
Таймбоксы обязательны, а не желательны. Онлайн-встреча без объявленного времени этапов расползается мгновенно: нет физической усталости, которая в комнате подсказывает «пора дальше». Каждый этап объявляется с временем и с признаком конца, и ведущий держит время жёстче, чем в комнате.
Нужен второй ведущий. Один не справляется: первый ведёт разговор, второй двигает стикеры, следит за чатом, ловит поднятые руки и тех, кто молчит полтора часа. Без второго половина участников выпадает незамеченной.
Короче и чаще. Четырёхчасовая онлайн-встреча не работает ни у кого. Разумный формат — полтора-два часа за раз, два-три раза: первый — выброс и хронология, второй — команды и политики, третий — агрегаты и границы. Между встречами ведущий приводит доску в порядок, и это заодно даёт время подумать.
Доска требует подготовки. До встречи: заготовленные цветные стикеры-образцы с подписями, области для парковки и для горячих точек, лента времени, правила на видном месте. Участник, который первые двадцать минут ищет, где взять оранжевый стикер, в штурме не участвует. Плюс проверка прав доступа заранее — всегда найдётся человек, у которого нет доступа, и это выясняется в начале встречи.
Камеры включены, и это не про контроль. Штурм держится на реакциях: удивление, несогласие, замешательство — это сигналы для ведущего, и без лиц он их не видит.
Что в онлайне лучше, чем в комнате. Стоит знать, потому что это не только потери: результат уже в цифровом виде и не требует переноса (фотографию стены расшифровывать не надо); легче собрать людей из разных городов; можно вернуться к доске через месяц и увидеть всё как было; и тихие участники часто активнее пишут, чем говорят при всех.
Где штурм ломается
Где ломается:
- Ведущий диктует. Если инженер сам пишет стикеры «как он понял», получается всё тот же разговор один на один, только с декорациями. Пишут эксперты.
- Спор о «правильном» вместо «как бывает». События — факты; если спор затянулся, это hot spot, клеим маркер и идём дальше, а не тонем.
- Сразу в решение. «Тут нужен Kafka» на втором часу штурма — преждевременно: сейчас добываем понятия, технологии потом.
- Один и готово. Штурм — не церемония на старте проекта, а инструмент: процесс изменился — стену пересобирают.
Глубже: уровень design: read model, внешние системы, pivotal events и первый классрасширенное
Статья доводит до big picture: стена событий с горячими точками и границами. Между стеной и первым классом в репозитории есть ещё два шага, и без них штурм остаётся фотографией стикеров.
Уровень процесса. Берут один процесс (оформление заказа) и достраивают вокруг каждого события полную петлю: команда (синий), которая его вызывает; актор или политика (сиреневый: «когда заказ подтверждён, зарезервировать товар»), которые запускают команду; read model (зелёный), то, что актор видит перед решением («корзина с итогом», «остаток на складе»); внешняя система (розовый), через которую идёт событие наружу или снаружи (платёжный провайдер, служба доставки). Зелёные стикеры это будущие экраны и запросы, розовые это будущие адаптеры и антикоррупционные слои, о которых статья про интеграцию.
Ключевые события. Среди десятков событий есть несколько, после которых процесс меняет фазу и владельца: «заказ оплачен», «заказ отгружен». Их называют pivotal и отмечают вертикальной линией через всю стену. Именно по ним обычно проходят границы контекстов и агрегатов: до линии заказом владеет оформление, после неё склад, и событие через линию это контракт между ними. Если на стене нет ни одного такого события, процесс слишком мал для штурма или его ещё не поняли.
Уровень дизайна. Стикеры сворачиваются в классы почти механически, и это переход, ради которого штурм устраивали. Жёлтый агрегат становится классом с методами по синим командам, которые к нему приклеены; каждый метод отдаёт оранжевое событие; сиреневая политика становится обработчиком события, который отправляет команду; зелёная read model становится запросом с DTO под экран; розовая система становится портом с адаптером. Горячие точки, которые не разрешили на штурме, становятся открытыми вопросами в спецификации, а не молчаливым решением разработчика.
Первый класс. Пишут не всё сразу, а один агрегат с двумя-тремя командами и тестами на инварианты, которые прозвучали на штурме («нельзя подтвердить пустой заказ»): это проверка, что стена сходится с кодом, и она занимает день. Расхождение на этом шаге (правило, которое на стене выглядело простым, в коде требует данных из другого контекста) возвращают на стену стикером, а не решают в коде.
Коротко
- Event Storming — воркшоп, где эксперты и инженеры выкладывают домен на стену стикерами-событиями в хронологии; события выбраны потому, что о фактах в прошедшем времени легко говорить всем.
- Ход: сначала выброс событий, потом хронология, затем горячие точки (споры и дыры — главная ценность), после них команды, акторы и политики, и в конце кандидаты в агрегаты и границы контекстов (там, где меняется язык).
- Выход штурма — добытая система понятий: сырьё для доменной модели, спеки и тактических паттернов.
- Правила: пишут эксперты, а не ведущий; споры маркируются, а не решаются на месте; технологии — потом; стена живёт вместе с процессом.
- После big picture идут уровни процесса и дизайна: команды, политики, read model и внешние системы вокруг каждого события, ключевые события как границы, потом стикеры сворачиваются в агрегат, обработчики, запросы и порты, и первый класс с тестами за день.
- На стикере — глагол в прошедшем времени и предмет, уровень «как сказал бы коллеге»; спор об уровне детализации («платёж получен» или «на всю сумму») не решают, а помечают красным.
- У каждого этапа есть время и признак конца: выброс 15–20 минут до повторов, хронология 40–60 минут до прохода пальцем без дыр, big picture целиком три-четыре часа; чужой процесс уезжает в парковку, а рамки объявляют в начале.
- После штурма — фотография, три артефакта в репозиторий (события в хронологии, страница понятий, таблица горячих точек с владельцами и сроками) и человек, который в две недели закрывает точки; проверка — понял ли процесс тот, кого на штурме не было.
- Удалённый штурм идёт иначе: явные числа для выброса, жёсткие таймбоксы, второй ведущий, полтора-два часа за раз в несколько встреч, подготовленная доска и включённые камеры.
Что почитать дальше
- Онтология и доменная модель — во что превращается добытая система понятий.
- Тактические паттерны — агрегаты, события и репозитории, в которые сворачиваются стикеры.
- Спецификация из модели — как результат штурма записывают для команды и агента.