Каков наилучший подход при работе с критическим инцидентом в производстве?

10:00 утра, и команда получает сообщение об инциденте: "Селектор продуктов на первой странице нашего электронного магазина показывает только 50 % продукта", начинается решение проблемы.

Команда, владеющая сайтом электронной коммерции, начинает расследование. Один из членов команды говорит, что, скорее всего, проблема в ETL, отвечающем за кеш продукта, который питает этот селектор и работает в 9:00, поэтому он собирается вручную пересобрать этот кеш. Это займет 30–40 минут, и результаты появятся на странице.

В 11:00 после перестроения кэша проблема сохраняется. Тот же член команды приходит с другой идеей: «вероятно, это шардинг в управлении кешем. Возможно, один или несколько узлов ведут себя неправильно. Удалим осколки; это временно увеличит стоимость, но проблема будет решена»

Разделение удалено, кеш перестроен, и в 12:30 команда понимает, что доступно только 50 % продукта. Новая идея, «на прошлой неделе мы обновили интерфейсную часть продукта, и, возможно, некоторые из них не отображаются». Команда откатывает выпуск компонента с тем же результатом. День подходит к концу, а проблема остается.

Я видел предыдущий подход тысячи раз. Есть проблема в очень сложной системе с большим количеством движущихся частей, и кто-то сразу же думает о наиболее вероятной первопричине и применяет решение, просто чтобы обнаружить, что это не было причиной. Этот цикл может повторяться несколько раз, продлевая решение проблемы до нескольких часов или даже дней или недель.

Это стратегия угадывания и снайперской стрельбы. Инженер действует как снайпер, выбирает цель (угадывает) и удаляет ее (снайперская стрельба). Если интуиция хороша, этот метод может предоставить решение в рекордно короткие сроки. Но если нет, это может закончиться водоворотом попыток, пустой тратой времени и разочарованием.

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

Например, в исходном примере другим способом управления случаем является вызов API продукта, используемого веб-страницей, и проверка наличия продукта. Если API возвращает только 50 % продукта, я могу отказаться от всего фронта, JavaScript или возможных обновлений в браузерах. В этом случае мы бы разделили задачу, отбросили половину и вдвое упростили задачу.

Основное различие между снайпингом и разделением заключается в цели расследования. Когда мы стреляем, мы ищем что-то не так. При делении мы ищем что-то, что определит, затронута ли одна сторона или другая.

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

Снайперская стратегия может быть очень быстрой, если сделанные догадки верны. Насколько верны предположения:

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

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

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

Снайпер может быть быстрым; генерал безопаснее. Что выбрать? Оба.

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

Если вы менеджер, возможно, это будет вам интересно. Одна ситуация, с которой я столкнулся, — это когда команда подрезает, время идет, поэтому я решил вмешаться и попросить команду изменить подход. Первая реакция команды была: «Мы здесь технические эксперты; давайте работать!». И они были правы. В то же время я знал, что подход был неправильным. Что делать в такой ситуации?

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

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

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

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

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