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

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

Модель причинно-следственной связи

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

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

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

Врожденные силы

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

Эффективность

Главной целью бизнеса является получение прибыли. Эта цель создает силу для смещения рабочей точки системы от границы экономической неудачи. Есть несколько факторов, которые способствуют этому естественному давлению, например:

  • Продуктовые инициативы и эволюция натуральных продуктов;
  • усилия руководства по организации ресурсов и команд для максимально эффективного достижения бизнес-целей;
  • Снижение затрат на инфраструктуру и оптимизация;
  • Нереальные сроки и амбициозные деловые обязательства;
  • Частая смена приоритетов.

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

Минимальное усилие

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

  • Выбор тактических решений, а не полностью масштабируемых и поддерживаемых (например, из-за чрезмерно амбициозных сроков);
  • Добавление технического долга для ускорения задачи;
  • Решите использовать знакомые устаревшие технологии, требующие меньше усилий, чем обновление или использование подходящих для задачи;
  • Подбрасывание неопытных людей в проект;
  • Неспособность иметь команды с нужными навыками или обеспечить надлежащее обучение;
  • Незнакомость и сложность архитектуры и предметной области.

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

Стремление к отказу системы

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

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

Создание силы устойчивости

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

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

Технический менеджмент

Инженерный менеджмент выходит далеко за рамки управления людьми. Опытный инженер-менеджер должен знать, как принятие тактических решений и добавление технического долга влияет на долгосрочную масштабируемость, производительность и ремонтопригодность системы. Хотя иногда это необходимо (в конце концов, именно бизнес делает компанию экономически жизнеспособной), нельзя забывать о техническом долге, и им нужно управлять с помощью продуманных стратегий. Инженеры-менеджеры играют ключевую роль в защите производительности и ремонтопригодности системы. В зависимости от контекста компании могут использоваться разные подходы, например: гарантированное место в дорожной карте для реализации структурного решения после реализации решения по техническому долгу для соблюдения сроков ведения бизнеса; ведение переговоров с заинтересованными сторонами об увеличении усилий в инициативах по продуктам для решения проблемы технического долга; защита необходимости технических инициатив в дорожной карте и т. д.

Обучение и обмен знаниями

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

Мониторинг, отслеживание и оповещение

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

Стратегии устойчивости

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

Смягчение последствий и реакция

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

Правильные правила обеспечения качества

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

Постоянное улучшение

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

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

Заключение

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

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

Если вы заинтересованы в присоединении к Medium, я буду очень признателен, если вы воспользуетесь моей реферальной страницей, спасибо!