14:47 Финансы
"У клиента три списания за один перелёт, а бронь одна. Что происходит?"
vsinyavsky.ru / инженерные расследования
Здесь реальные технические истории превращаются в интерактивные расследования. Вы восстанавливаете причинную цепочку, принимаете два решения и видите, как их порядок меняет цену следующего изменения.
Протокол 001
Один production-инцидент · 2 решения · шесть маршрутов
Пройти расследованиеПротокол 001
Booking: Failed
Если читать статус буквально, бронирование не состоялось и повтор выглядит безопасным.
Рабочая версия, не установленный факт.
Версия не выдерживает фактов: Failed появился после двух завершённых шагов.
Если часть поездки уже существует, почему клиент запустил процесс снова?
Повтор выглядит как продолжение той же операции.
Это отдельная попытка. Новое нажатие начало бизнес-операцию заново.
Что каждая попытка сделала с деньгами?
Экран предложил повторить → повтор стал новой операцией → уже завершённые шаги не были учтены → каждая попытка снова начала движение денег
Причина установлена. Дальше – архитектурный сценарий, а не продолжение хронологии инцидента.
Намерение клиента – одна поездка, которую он пытается оформить. Повторный HTTP-запрос не обязан означать новую поездку.
Первый рубеж зарегистрирован: Не создавать новую операцию при повторе
Первый рубеж зарегистрирован: Компенсировать совершённые шаги
Первый рубеж зарегистрирован: Зафиксировать состояние и владельца
Ниже – все возможные маршруты. Это карта решений, а не выбранный результат.
Система перестала создавать повторные операции и начала компенсировать совершённые шаги. Support всё ещё собирает состояние по нескольким системам, а сбой компенсации может оставаться незаметным, пока его не найдёт человек.
Следующее дорогое изменение: Явное состояние процесса, владелец следующего действия и видимая граница передачи человеку.
Не создавать новую операцию при повторе → Компенсировать совершённые шаги
Повтор больше не добавляет новые попытки. Компенсация работает с уже возникшим набором фактов, а не догоняет новый ущерб.
Компенсации запущены без единого состояния процесса. Цена следующего рубежа – вручную находить остановившийся шаг и понимать, когда работу пора передать человеку.
Компенсировать совершённые шаги → Не создавать новую операцию при повторе
Компенсация началась, пока повторный вход оставался открытым. Цена ожидания второго рубежа – риск получить ещё одну попытку, которую компенсации придётся разбирать отдельно.
Новые повторы закрыты, поэтому набор операций перестал расти. Следующий рубеж всё ещё должен собрать их состояния и владельцев, но теперь работает с ограниченным набором попыток, а не с движущейся целью.
Причина и текущее состояние процесса видимы, а повторный запрос больше не создаёт новую операцию. Уже совершённые действия у поставщиков и движение денег всё ещё требуют отдельных компенсаций.
Следующее дорогое изменение: Компенсация фактов, которые уже произошли.
Не создавать новую операцию при повторе → Зафиксировать состояние и владельца
Новые попытки больше не размножаются. Состояние и владелец следующего шага строятся вокруг одного намерения клиента, а не вокруг растущего набора повторов.
Теперь видно, какие факты уже произошли и кто владеет следующим шагом. Компенсацию проще диагностировать, но она ещё не запущена, поэтому текущие последствия остаются срочной работой.
Зафиксировать состояние и владельца → Не создавать новую операцию при повторе
Явное состояние операции даёт точку корреляции. Повторный HTTP-запрос можно связать с уже начатым намерением, а работу защиты проверить по состоянию процесса.
Повторы закрыты, поэтому набор новых последствий больше не растёт. Но уже созданные сегменты и движение денег никуда не исчезли – теперь компенсация остаётся ограниченной, но срочной работой.
Компенсации видимы и управляемы, но новый HTTP-запрос всё ещё может начать ещё одну бизнес-операцию. Восстановление разбирает последствия, пока источник повторов остаётся открытым.
Следующее дорогое изменение: Связать повторные запросы с одним намерением клиента.
Компенсировать совершённые шаги → Зафиксировать состояние и владельца
Компенсации уже идут, поэтому видимость должна показать состояние каждого обратного шага, его владельца и границу передачи человеку, а не общий статус поездки.
Явное состояние даёт повторному запросу точку корреляции. Защита от новой операции ещё не внедрена, но её границу и результат теперь проще определить и проверить.
Зафиксировать состояние и владельца → Компенсировать совершённые шаги
До запуска компенсаций уже известны состояние и владелец каждого шага. Сбой обратного действия не теряется в общем Failed и получает явную границу передачи человеку.
Компенсации стали частью видимого процесса, а повторный вход остался открыт. Новая попытка теперь расширит и набор прямых фактов, и объём работы по их последующей компенсации.
Ограничивает появление новых попыток для того же намерения. Уже созданные сегменты, движение денег и неопределённость их состояния остаются открытыми.
Охват
Повтор больше не добавляет новые попытки. Компенсация работает с уже возникшим набором фактов, а не догоняет новый ущерб.
Архитектурный вывод: Система перестала создавать повторные операции и начала компенсировать совершённые шаги. Support всё ещё собирает состояние по нескольким системам, а сбой компенсации может оставаться незаметным, пока его не найдёт человек.
НеопределённостьРучная нагрузка
Компенсации запущены без единого состояния процесса. Цена следующего рубежа – вручную находить остановившийся шаг и понимать, когда работу пора передать человеку.
Причина установлена. Дальше – архитектурный сценарий, а не продолжение хронологии инцидента.
Начинает ограничивать текущие последствия отдельными компенсирующими действиями. Новые попытки и неопределённость состояния остаются открытыми.
Срочность
Компенсация началась, пока повторный вход оставался открытым. Цена ожидания второго рубежа – риск получить ещё одну попытку, которую компенсации придётся разбирать отдельно.
Архитектурный вывод: Система перестала создавать повторные операции и начала компенсировать совершённые шаги. Support всё ещё собирает состояние по нескольким системам, а сбой компенсации может оставаться незаметным, пока его не найдёт человек.
Охват
Новые повторы закрыты, поэтому набор операций перестал расти. Следующий рубеж всё ещё должен собрать их состояния и владельцев, но теперь работает с ограниченным набором попыток, а не с движущейся целью.
Причина установлена. Дальше – архитектурный сценарий, а не продолжение хронологии инцидента.
Ограничивает появление новых попыток для того же намерения. Уже созданные сегменты, движение денег и неопределённость их состояния остаются открытыми.
ОхватНеопределённость
Новые попытки больше не размножаются. Состояние и владелец следующего шага строятся вокруг одного намерения клиента, а не вокруг растущего набора повторов.
Архитектурный вывод: Причина и текущее состояние процесса видимы, а повторный запрос больше не создаёт новую операцию. Уже совершённые действия у поставщиков и движение денег всё ещё требуют отдельных компенсаций.
Неопределённость
Теперь видно, какие факты уже произошли и кто владеет следующим шагом. Компенсацию проще диагностировать, но она ещё не запущена, поэтому текущие последствия остаются срочной работой.
Причина установлена. Дальше – архитектурный сценарий, а не продолжение хронологии инцидента.
Ограничивает неопределённость: показывает состояние операции, порядок шагов и владельца следующего действия. Новые попытки и текущие последствия остаются открытыми.
Неопределённость
Явное состояние операции даёт точку корреляции. Повторный HTTP-запрос можно связать с уже начатым намерением, а работу защиты проверить по состоянию процесса.
Архитектурный вывод: Причина и текущее состояние процесса видимы, а повторный запрос больше не создаёт новую операцию. Уже совершённые действия у поставщиков и движение денег всё ещё требуют отдельных компенсаций.
Охват
Повторы закрыты, поэтому набор новых последствий больше не растёт. Но уже созданные сегменты и движение денег никуда не исчезли – теперь компенсация остаётся ограниченной, но срочной работой.
Причина установлена. Дальше – архитектурный сценарий, а не продолжение хронологии инцидента.
Начинает ограничивать текущие последствия отдельными компенсирующими действиями. Новые попытки и неопределённость состояния остаются открытыми.
Охват
Компенсации уже идут, поэтому видимость должна показать состояние каждого обратного шага, его владельца и границу передачи человеку, а не общий статус поездки.
Архитектурный вывод: Компенсации видимы и управляемы, но новый HTTP-запрос всё ещё может начать ещё одну бизнес-операцию. Восстановление разбирает последствия, пока источник повторов остаётся открытым.
Неопределённость
Явное состояние даёт повторному запросу точку корреляции. Защита от новой операции ещё не внедрена, но её границу и результат теперь проще определить и проверить.
Причина установлена. Дальше – архитектурный сценарий, а не продолжение хронологии инцидента.
Ограничивает неопределённость: показывает состояние операции, порядок шагов и владельца следующего действия. Новые попытки и текущие последствия остаются открытыми.
НеопределённостьРучная нагрузка
До запуска компенсаций уже известны состояние и владелец каждого шага. Сбой обратного действия не теряется в общем Failed и получает явную границу передачи человеку.
Архитектурный вывод: Компенсации видимы и управляемы, но новый HTTP-запрос всё ещё может начать ещё одну бизнес-операцию. Восстановление разбирает последствия, пока источник повторов остаётся открытым.
ОхватСрочность
Компенсации стали частью видимого процесса, а повторный вход остался открыт. Новая попытка теперь расширит и набор прямых фактов, и объём работы по их последующей компенсации.
Причина установлена. Дальше – архитектурный сценарий, а не продолжение хронологии инцидента.