Как сделать BPMN-диаграмму чуточку лучше

Всем привет!

Сегодня хочу затронуть холиварную тему: как сделать диаграмму BPMN немного читабельнее и как избежать логических ошибок. Если вы только начинаете путь в бизнес-аналитике или в системной аналитике, для начала рекомендую ознакомиться со статьёй, которая подробно описывает базовые постулаты BPMN.

На схемах токен я буду отображать в виде такого знака

На схемах токен я буду отображать в виде такого знака

В данной статье будет упоминаться одна очень важная сущность BPMN — токен.

Токен — абстракция, которая определяет, на каком этапе находится бизнес‑процесс. Она показывает, какой блок процесса сейчас выполняется.

Мы рассмотрим несколько «проблемных» BPMN‑диаграмм, с которыми я встречался в своей практике, и узнаем, как их можно улучшить (если вы не персонаж с картинки ниже и хотите улучшать процесс, чтобы свести к минимуму негативные последствия).

317ae669d62d56fb68958ffe37d1f593.png

Проблема №1. Использование одного завершающего события

007913fcafd0d44acdce70338c47fbfd.png

На первой схеме не указаны явно варианты завершения событий. При детализации бизнес‑требований вы можете упустить, какие могут быть варианты решений по заявке. Схема усложнит оценку сроков реализации, так как решение может быть небинарным («Одобрено» или «Отказано»).

Вместо одного завершающего события лучше использовать несколько с явным указанием результата. Так мы упростим системную аналитику, избавимся от корнер‑кейсов и точнее оценим сроки реализации:

fd378386b7110874d07a6bafb26eb57b.png

Мы доработали схему и выяснили, что сумма кредита может быть частично одобрена. Ну всё, можно звонить клиенту примерно с таким запросом:

7167576246e31f67e7864a58dda43ddb.png

Проблема №2. Несколько входов/выходов элемента Activity

b7bc0585c4f2c2b75e013e8a8d811de3.png

В данном примере три выходящих потока из «Task 2». Ещё нет явного указания, токен должен выходить по всем трём потокам по принципу «И»,  либо в сторону одного потока по принципу «ИЛИ». Здесь возможно расхождение между «Ожидаемым» и «Реализованным».

Вы избежите проблем, если постараетесь использовать шлюзы. Вышеупомянутую схему можно исправить так:

0c920250ff02899ca7b0bde868221d64.png

В обновлённом варианте явно отображён шлюз, который определяет, что после «Task 2» токен перенаправится по принципу «ИЛИ» только в один из Activity. Мы исключили двоякое чтение схемы и снизили вероятность ошибки при реализации бизнес‑требований.

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

2e8f7f7193ceb0363327fd6a6f421d26.png

Проблема №3. Построение диаграммы только с шлюзами

596372d1f025ce4ecdc62f8d2dad7ad4.png

С точки зрения работоспособности такие схемы BPMN — корректные, но читать их сложно из‑за нагромождения элементов. На более разветвлённых BPMN‑диаграммах вы это точно заметите. Вместо нагромождения шлюзов используйте элементы событий, так вы разгрузите BPMN‑схему и улучшите её читабельность.

Обновим схему без изменения логики:

df90c48a5db862979ae136c75b33585b.png

Я показал небольшой, но полезный для громоздких схем лайфхак, о нём даже Илон Маск узнал совсем недавно.

5794f2a70789391ee4573f4ef9ca51cc.png

Проблема №4. Постановка задачи на клиента

ef084df685543eb0c7d79a17e7a57455.png

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

Что будет, если клиент заболеет, передумает, уйдёт к конкурентам? Наш процесс (токен) «зависнет», и сотрудники будут бесконечно ожидать звонка.

Обновим диаграмму:

38182a58d2a8d6c3695e8ee13411e818.png

Теперь мы не ждём, пока клиент сам позвонит нам и сообщит об удобном ему времени визита, мы сами контролируем процесс. В результате действия клиента из шлюза выйдет один из токенов (первый или второй — на рисунке они помечены цифрами), и процесс не зависнет.

Если ставить задачи на клиента, токены могут зависнуть, а вы можете навлечь на себя гнев ваших коллег:

0e40e9256d2e1aed08686f31eb65b1fb.png

На одном проекте я оптимизировал схему таким образом и повысил конверсию завершения процесса на 70%.

Проблема №5. Нет собирающих шлюзов

Без собирающих шлюзов вы рискуете исполнить задачу дважды. В качестве примера — покупка в онлайн‑магазине на бонусные баллы.

516f3782ae4540b6e1ce7d9e16cddcab.png

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

74f9d214d80f4e22408f9a547e8cd016.png

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

Если вы не хотите, чтобы к вашему бизнесу приходили клиенты и требовали вернуть деньги, не забывайте собирающие шлюзы:

70b8db4a828fb69b5092d83a23cfb572.png

Проблема №6. Разные собирающие и разводящие шлюзы

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

6.1. Ошибка отличающихся шлюзов приведёт к многократному исполнению задачи

Вернёмся к примеру из предыдущего пункта, где клиент хочет купить товар в интернет‑магазине на бонусные баллы, но в этот раз мы не забудем поставить собирающий шлюз. Нюанс в том, что разводящий шлюз генерирует на выход токен в каждый исходящий поток, а собирающий шлюз в схеме пропускает на выход каждый входящий токен. Результат будет таким же, как в предыдущем разделе — у клиента дважды спишутся деньги.

8fbaac787ff91b7865378589da49f156.png

6.2. Из‑за ошибки отличающихся шлюзов токен зависнет, и задача никогда не исполнится

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

7da28fcead12491e5fe17c8180bd4ce8.png

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

35dfa8d0458ee66dcdc279e5835a4700.png

Никогда не путайте шлюзы (и детей с кошками тоже):

b7391c784d546085c15fbf3e12f28908.png

Проблема №7. Отсутствие дефолтного флоу

84a593f2e3741a4faac12cbd22b8cbab.png

Использовать инклюзивный шлюз без дефолт‑флоу не самое правильное решение. На схеме на разводящем шлюзе проверяются условия исходящих из шлюза потоков. Для всех истинных исходящих потоков появляется новый токен (на выход могут быть созданы несколько токенов или только один токен). Но может получиться так, что желаемый товар отсутствует, и у клиента день рождения не сегодня — в этом случае токен зависнет.

Исправить такой корнер‑кейс можно при помощи дефолт‑флоу — это выходящий из шлюза поток, по которому пойдёт процесс, если не выполняется ни одно из условий на выходе из шлюза. Это решение спасёт процесс от падения с ошибкой.

В исправленной диаграмме в случае, если у человека не день рождения и товара нет, BPMN‑схемой предусмотрена отправка промокода.

89673a20516bdb0e9ed7d176909b91df.png

А, например, если клиент делает заказ не в день рождения и товар в наличии — мы просто сделаем доставку товара.

86bdfb7a2a2d0b48f71c0cbe916ef154.png

6a6d64a5a719b201ba371c1628a7f9fd.png

Если забывать ставить дефолт-флоу, ваш токен будет не динозавриком из примеров в статье.

Он зависнет и будет выглядеть примерно так:

b3bbee291ef19fcb504c8be40b7d9bc6.png

Что в итоге

В статье мы рассмотрели несколько частых ошибок, которые я встречал в BPMN‑диаграммах. Мы разобрали на конкретных примерах, к чему приводят такие ошибки. Иногда это гарантированный конфликт с клиентом. Теперь вы знаете, как решить вопрос, добавив в схему отправку промокода, как показано в примере 7. Иногда это простой персонала, как при постановке задач на клиента в примере 4. Иногда ошибки BPMN‑диаграмм блокируют платёж, как во втором примере проблемы № 6.

Общий итог один: ошибки и неточности в BPMN‑диаграммах негативно влияют на бизнес.

Расскажите в комментариях, с какими ошибками вы встречались в BPMN‑диаграммах? К каким последствиям и бизнес‑результатам приводили эти ошибки?

© Habrahabr.ru