Что такое Event Storming и как согласовать требования бизнеса с решениями разработки

Что такое Event Storming и как согласовать требования бизнеса с решениями разработки

Продолжаем сегодня говорить о серьёзном. Команды, которые создают прикладные информационные системы, часто расходятся в описании одного и того же бизнес-процесса. В обсуждении участвуют представители бизнеса, аналитики, разработчики, тестировщики и инженеры эксплуатации. У каждого есть часть картины, но целого описания нет: одни говорят о формах и полях, другие — о статусах и проверках, третьи — о нагрузке и сбоях. В результате требования противоречат друг другу, сроки растут, а реализованные функции не совпадают с ожиданиями. И здесь может помочь Event Storming. давайте разберемся, что это такое вместе.

Что такое Event Storming

Event Storming — совместное моделирование предметной области через цепочку доменных событий. Доменное событие — это факт, который уже произошел и имеет значение для бизнеса. Формулировка всегда в прошедшем времени. Примеры простые и прямые: заказ создан, платеж подтвержден, возврат оформлен. Работу над событиями дополняют два элемента. Команда — это запрос на изменение состояния, который отправляет человек или система. Политика — это автоматическое правило, которое срабатывает при наступлении события и инициирует дальнейшие действия. Этого набора достаточно, чтобы увидеть причинно-следственные связи и перейти к техническим решениям без догадок.

Зачем это нужно разработчикам и аналитикам

События дают опорную линию. Команды связывают бизнес намерения с интерфейсами и точками входа. Политики показывают, где лучше работать асинхронно и что именно должно происходить без участия пользователя.

На одной доске появляются ответы на базовые вопросы:

  • Что было сделано
  • Кто инициировал действие
  • При каких условиях команда должна быть отклонена
  • Какие данные обязательны
  • Что должно запуститься автоматически после факта

Когда такие ответы записаны, архитектурные решения выходят естественно. Видно, какие обработчики нужны, где разделить сервисы, какие сообщения публиковать, какие проверки включить в тесты.

Короткий словарь без двусмысленностей

Команда в рамках Event Storming — это не коллектив людей. Это действие, поступающее в систему. Примеры формулировок в повелительном наклонении понятны каждому участнику: оформить заказ, принять оплату, отменить отгрузку.

Актор — инициатор команды. Это может быть пользователь, внешний сервис, расписание задач.

Агрегат — группа данных и правил целостности, которые изменяются вместе. Примером служит заказ со строками, суммой и статусом.

Граница контекста — часть модели, где термины и правила согласованы. На границах контекстов проходят **интеграции** с явными контрактами.

Эти определения достаточны для практической работы и совпадают с устоявшейся терминологией.

Мини-сценарий интернет-магазина

Начало процесса. Пользователь отправляет команду оформить заказ. Система проверяет, что корзина не пуста и клиент идентифицирован. Эти проверки — предусловия команды. Если они выполнены, система фиксирует событие заказ создан. Это факт, который можно журналировать и использовать далее. На событие срабатывает политика. Она резервирует товары и инициирует команду запросить оплату. Платежный шлюз обрабатывает запрос и отправляет уведомление. Магазин получает событие платеж подтвержден. В ответ запускается следующая политика. Заказ попадает в очередь на отгрузку, клиент получает письмо. Когда склад запаковал заказ и передал его в службу доставки, появляется событие посылка отгружена.

В этом коротком фрагменте видны намерения, факты, автоматические реакции и зоны ответственности. Появляются и технические выводы. Команда оформить заказ — это HTTP POST на точку входа. События платежа приходят вебхуком. Политики лучше реализовать асинхронно через очередь. Инварианты агрегата заказ просты и проверяемы. Нельзя подтверждать платеж для заказа в статусе отменен. Нельзя списывать оплату, если резерв не создан.

Как проходит сессия

Подготовка минимальна. Нужна широкая поверхность для временной линии и набор карточек. Сначала участники записывают события короткими фразами в прошедшем времени. На этом шаге не обсуждаются таблицы и форматы. Цель — собрать факты, важные для бизнеса. Затем события раскладываются по времени, похожие формулировки объединяются, спорные уточняются. После этого команда добавляет действия, которые могли привести к каждому факту. Здесь прямо указываются инициаторы и каналы. Пользователь и POST, расписание и фоновое задание, внешний сервис и вебхук. Следующий слой — политики. Для значимых событий фиксируются автоматические реакции. Они подскажут, где нужны подписчики очереди, а где достаточно транзакции в рамках одного сервиса.

Когда события, команды и политики связаны, видно, какие данные необходимы для выполнения действий, какие проверки обязательны и какие инварианты нельзя нарушать. На этом этапе удобно выделять агрегаты и границы контекстов. Там, где словарь и правила отличаются, проходит граница. Там же появляются явные контракты интеграции.

Что получается в результате

Event Storming создает пять ключевых артефактов:

  1. Лента событий и действий без разрывов — главное **артефакт**. Она превращается в схему интерфейсов и обработки сообщений.
  2. Список политик — перечень автоматических реакций, которые нужно реализовать.
  3. Набор инвариантов — конкретные правила целостности, которые попадут в тесты и проверки на уровне кода.
  4. Карта границ контекстов — помогает определить, где закончить ответственность одного сервиса и начать ответственность другого.
  5. Словарь терминов — исключает разночтения в требованиях и документации.

Переход к технике без лишних слоев

Команды напрямую становятся точками входа. Наименования и параметры берутся из формулировок на доске. Пример понятен. Команда оформить заказ соответствует методу POST на адресе orders. События становятся сообщениями, которые публикует сервис-источник и обрабатывает сервис-получатель. Платеж подтвержден удобно передавать через шину сообщений, чтобы склад и уведомления не зависели от внутреннего кода оплаты. Наблюдаемость опирается на те же названия. В журнал пишется имя события, идентификатор агрегата, источник и ключевые данные. Тесты строятся по шаблону команда предусловия ожидаемое событие. Такой тест воспроизводим и понятен вне контекста конкретной реализации.

# точка входа команды оформить заказ POST /orders { "items": [{"sku": "A-123", "qty": 2}], "customerId": "c-001", "delivery": {"type": "courier", "city": "Москва"} } # сообщение события платеж подтвержден { "event": "payment_confirmed", "orderId": "o-100500", "paymentId": "p-777", "amount": 3500, "currency": "RUB", "occurredAt": "2025-09-21T12:10:00Z" } 

Где чаще всего ошибаются

Четыре основные ошибки и их решения:

  • Смешивать термины из разных контекстов
    Решение: фиксировать словарь и отмечать границы.
  • Писать события техническим жаргоном
    Решение: формулировать результат для бизнеса.
  • Обсуждать таблицы и коды до того, как согласованы факты и правила
    Решение: держать порядок. Сначала события, затем действия и реакции, после этого интерфейсы и форматы.
  • Не указывать причину события
    Решение: для каждого факта записывать команду или политику, которые к нему привели, и перечислять обязательные данные.

Ответы на вопросы, которые задают чаще всего

Что дает политика?

Политика фиксирует автоматическую реакцию на факт. Это не пользовательский сценарий и не ручная операция. Политика помогает держать поведение системы стабильным и предсказуемым.

Нужно ли сразу делить на микросервисы?

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

Можно ли работать без очередей?

Можно, если события и реакции укладываются в один сервис и не требуют изоляции по времени. Но сама лента событий останется полезной. Она яснее любых схем базы данных.

Небольшой пример перевода в критерии тестирования

Команда оформить заказ имеет предусловия. Корзина не пуста, клиент идентифицирован. Ожидаемое событие — заказ создан. Политика при этом событии резервирует товары. Тест звучит просто. Если корзина заполнена и клиент известен, при вызове POST orders система фиксирует событие заказ создан, публикует задачу на резерв и возвращает идентификатор заказа. Если корзина пуста, команда отклоняется с понятным кодом ошибки. Такие формулировки одинаково читаемы бизнесом и разработкой.

Итог

Event Storming возвращает обсуждение к фактам и делает разговор предметным. События дают основу, команды объясняют намерения и точки входа, политики описывают автоматические реакции, а границы контекстов разводят ответственность. После сессии у команды на руках не абстрактные лозунги, а конкретная лента событий, понятные интерфейсы, список обработчиков, проверяемые инварианты и словарь. С таким набором решение собирается быстрее, а изменения не ломают уже согласованное поведение .

Event Storming бизнес доменное событие команда политика
Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.

Природа не учит нас быть людьми.

Почему нельзя выводить мораль из биологии? И как одна логическая ошибка оправдала геноцид, колонизацию и современное неравенство.

Техно Леди

Технологии и наука для гуманитариев