Процесс описывается один раз: условия, шаги, сроки, обратные действия. Описание проверяется до выпуска и исполняется как есть. Каждая операция оставляет запись, из которой видно, что выбрали, что отклонили и по какому правилу.
Запись одной операции целиком
Открыть кадр целикомПроцессы выстроены, записи ведутся, ответственные назначены. Доля сбоев за последние годы, скорее всего, не выросла.
Выросло другое. Разбор одного спорного случая раньше занимал час, теперь занимает дни. Те же люди, те же данные.
Этот расход никто не считает, потому что он и не выглядит расходом. Он выглядит как «Иван Петрович посмотрит».
И растёт он не от количества ошибок, а от количества шагов, условий и людей в процессе.
Ни отрасль, ни размер здесь ничего не меняют. Меняется только цена ответа: чем больше шагов, систем и людей, тем она выше.
Пример намеренно игрушечный. Нарисуй мы здесь ваш процесс, вы за минуту нашли бы в нём десять неточностей. Предметную область знаете вы, а не мы.
Автомат нужен как линейка. Приложите его к своему хозяйству и посмотрите, что совпадёт. Неважно, четыре у вас шага или четыреста: чем больше, тем хуже сходится.
Оплатила латте 150 рублей, автомат налил чёрный кофе без молока. Я его не пью. Прошу вернуть деньги и объяснить, почему так вышло. Это уже не первый раз.
Смотрим, что записал автомат. Записано всё.
Скорее всего у вас не строчки в файле. У вас карточка со статусами, история изменений, таблица действий пользователей, а то и отдельный контур учёта. Всё аккуратно, всё на местах.
И всё это отвечает на тот же вопрос: что произошло. Просто гораздо красивее. Красивый ответ хуже некрасивого: он выглядит завершённым, поэтому разбор на нём останавливается раньше.
Проверить можно за десять минут, не спрашивая нас.
Возьмите случай, когда система что-то не пропустила или отклонила, и попробуйте ответить:
Если ответы находятся в системе, а не у людей, мы вам не нужны.
Процесс на выбранном такте
Открыть кадр целикомСрок на исход оплаты ещё не наступил, возврат удержанных денег отправлен и ждёт ответа.
Срок это поле процесса, а не строка в регламенте.
Когда он подходит, процесс сам решает, что делать: напомнить, эскалировать, отменить. Само действие выполняет ваша система, как и любое другое.
У каждого шага есть предел числа попыток, у каждой цели свой срок.
«Зависло» перестаёт быть ощущением и становится исчерпанным пределом, у которого есть имя.
Повтор идёт с растущей паузой.
Внешнюю систему, которая отвечает через раз, процесс не добивает, а ждёт дольше и пробует снова.
Пока процесс ждёт, он слушает.
«Клиент доплатил», «партия отгружена» приходят как обычные сообщения и меняют состояние до следующего шага. Ждущий процесс не глухой.
Пределы внутри процесса
Открыть кадр целикомНи один из четырёх пунктов не живёт в голове сотрудника и не требует отдельного мониторинга. Всё это части описания процесса.
Решение и правило под ним
Открыть кадр целикомСработало одно правило. Остальные проверены и зачёркнуты — вместе с условием, которое не выполнилось.
В записи видно не только выбранное действие, но и рассмотренные: какое условие не выполнилось у каждого и с каким значением.
«Завершена» и «достигла цели» здесь два разных ответа. Операция может дойти до конца и не сделать того, ради чего затевалась, и это видно отдельными полями.
Версия правил, по которым принималось решение, привязана к записи. Спор про мартовский случай разбирается по мартовской версии.
Прогон случаев до публикации
Открыть кадр целикомСобираем набор случаев и прогоняем их на новой версии правила до того, как она заработает.
Видно не «сколько процентов сломалось», а какие именно случаи разошлись и в каком поле.
Прогон случаев это половина проверки. Вторая половина не требует случаев вообще.
Часть ошибок видна прямо в описании процесса, ещё до того, как оно хоть раз исполнилось: правила, которые противоречат друг другу; входы, на которых не срабатывает ни одно правило; шаги, до которых никогда не дойдёт очередь; цели, которых некому достичь; взведённые сроки, которых никто не читает; необратимые шаги без обратного действия.
Каждое из этого обычно находят уже на живых операциях, по инциденту.
Проверка описания до выпуска
Открыть кадр целикомСамое неприятное лежит между слоями.
Откат, который ничего не отменяет: обратное действие описано и выглядит правильным, а по его коду видно, что оно не трогает ни одного поля, от которого зависит отменяемое. Узнать об этом можно только в аварию.
Взведён срок, у которого нет читателя: правила в порядке, шаги в порядке, срок никогда не сработает.
Шаг обещает результат, которого не производит: по описанию он закрывает условие, а его обработчик не записывает ни одного поля, от которого это условие зависит.
Такие вещи не видит ни один инструмент, который смотрит на правила отдельно, на процесс отдельно и на код отдельно. Каждый из трёх скажет, что у него всё хорошо, и все трое будут правы.
Мы смотрим на это как на один предмет, потому что это и есть один предмет.
Одна находка со свидетелем
Открыть кадр целикомИ одно про сам отчёт.
Проверка всегда говорит первой строкой, сколько она прочитала и почему не прочитала остальное.
Дело не в аккуратности. Условие, которое проверка не разобрала, она вынуждена считать более широким, чем оно есть. А более широкое условие перестаёт конфликтовать с соседями. Отчёт выходит чистым ровно там, где инструмент не понял написанное.
Поэтому молчание у нас означает «не доказано», а не «всё хорошо».
Таблица условий: что можно налить
Открыть кадр целикомПоменять «предложить замену» на «отказать и вернуть деньги» это одна строка в таблице. Не заявка в разработку, не релиз, не ночные работы.
Операции, которые шли в этот момент, доработают по тем правилам, которые действовали на их старте.
Содержимое условий меняет владелец процесса. Новый шаг процесса или новое поле это по-прежнему работа разработчика.
Версии одного правила
Открыть кадр целикомЗапись отмены: откат целиком
Открыть кадр целикомУ каждого обратного действия своё деловое имя. Девять строк «Фиксируем оплату» подряд, пока машина возвращает деньги, это разница между «прочитал» и «догадался».
Удержать, списать частично, снять удержание, вернуть это четыре разных обязательства перед клиентом, и в записи они названы четырьмя разными словами.
Налив, который не успел начаться, не отменялся. Система не отменяет то, чего не было.
Одно и то же событие, пришедшее дважды, не приводит к действию дважды.
«А сейчас она ещё так делает?»
Спорный случай можно прогнать заново на тех же данных. Внешние системы при этом не вызываются, потому что вызываем их не мы.
Пусть замену подбирает языковая модель. Ночью она решает, что раз молока нет, а клиент постоянный, надо налить двойной эспрессо и денег не брать. Правило «не брать денег» никто не заводил, модель придумала его сама.
Так у нас не получается. Не потому, что мы осторожные, а потому, что модель не выбирает действие: список разрешённого считают правила до того, как её спросили.
Вопрос модели и ответ на него
Открыть кадр целикомОтвет вне списка записывается и не исполняется. Молчание модели возвращает решение таблице.
В записи каждого выбора видно, кто выбирал: правила или внешний решатель.
Модель здесь не становится предсказуемой. Предсказуемой становится граница её полномочий.
Хозяин процесса — ваша система: она запускает операцию и остаётся хозяином предметной области. Вердикт считает, что делать дальше, и отправляет поручение на один адрес — ваш обработчик поручений. Адрес задаёте вы.
Обработчик выполняет поручение сам, своими доступами и своими вызовами к вашим сервисам. Адресов этих сервисов и доступов к ним у нас нет: соединение у нас ровно одно, и оно на тот адрес, который вы дали.
Сроки при этом отсчитываем мы. Чтобы процесс проснулся по сроку, вашему планировщику делать нечего.
Сервис отвечает вашей системе, а не нам. Она достаёт из его ответа только то, что нужно для следующего решения, и передаёт нам уже это, в заранее оговорённом виде. Границу проводит она, и проводит там, где решила сама.
Вся граница с внешним миром
Открыть кадр целикомОтвет на одно поручение пришёл в эту фазу, второе названо незакрытым отдельной строкой.
Базовый интерфейс интеграции
Поручение приезжает вашему обработчику в одной и той же форме:
Внешняя система не знает о нас ничего. Её вызывают её собственным интерфейсом, и отвечает она туда же, куда отвечала всегда.
Ваша система
Карточка не отвечает ни на один. Нижняя строка — всё, что добавляет интеграция.
ВЕРДИКТ
Что на них отвечает запись
В той же записи и попутное: заявка на пополнение RPL-3204 и закрытый резерв RSV-3204.
Ни одной строки этой записи вы не программировали.
У этого расхода нет строки в бюджете, поэтому его никто не считает. Он выглядит как занятые люди.
И главное: этот расход перестаёт расти вместе с процессом. Сегодня каждый новый шаг, каждое новое условие и каждый новый человек делают его чуть больше.
Про данные
Решения принимаются по тем данным, которые вы передадите. Если в правилах нигде не участвует, скажем, почта клиента, передавать её не нужно, и в записи она не появится.
Шифрования записи на нашей стороне пока нет. Место под него в контракте зарезервировано, но говорить, что оно работает, было бы неправдой. Пока запись защищена тем же, чем защищён контур, в котором она развёрнута.
Правило считается по значению, поэтому в момент вычисления значение должно быть доступно процессу. Так устроена любая система, которая принимает решения по данным.
На экране разбора видно то, что попало в запись. Кому открыт этот экран, определяете вы.
При развёртывании в вашем контуре запись никуда не уходит.

Георгий Бах
Основатель Вердикта
20 лет в ИТ, 15 на руководящих позициях. Последние шесть техническим директором компании в кибербезопасности: два продукта для корпоративных клиентов, оба с нуля до продаж.
Проекты были разные по масштабу и отрасли, проблема везде одна: решение принято, причина нигде не осталась. Через полгода её собирают заново по переписке и логам. Из этого вырос Вердикт.
Вспомните последний раз, когда пришлось объяснять уже принятое решение или искать обязательство, которое не выполнилось. Сколько человек в этом участвовало и сколько времени заняло?
Если цифра вас неприятно удивила — расскажите про этот случай. Разберём его предметно, без презентации и созвона.
А если писать не хочется, вот шесть вопросов к вашему процессу. Отвечать лучше без нас, присылать ничего не нужно.
Если на четыре из шести ответ «зависит от конкретного человека», значит тот самый растущий расход у вас есть.