Принципы дзен DevOps

Введение
Дзен Python (The Zen of Python) — неформальная философия языка Python в виде 19 коротких принципов, которые описывают, каким должен быть хороший код и как вообще проектировался сам язык. В основе он прост. Но при необходимости предоставляет полноценное ООП и мощные механизмы: декораторы, контекстные менеджеры, лёгкие и полезные исключения. Просто — когда возможно. Сложно — когда необходимо.

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

«Дзен DevOps» — это результат личного опыта, разговоров и наблюдений за многие годы:

  • инфраструктуры, которые легко поддерживать
  • инфраструктуры, которые даже с современными инструментами оставались сложными и хрупкими
  • десятки докладов на конференциях и прочитанных статей
  • множество неформальных обсуждений практик с коллегами
Дзен Python и дзен DevOps
О принципах дзен Python можно почитать на Хабре, а здесь мы предложим вариант энтузиаста и расшифровку его идей ниже.
Адаптация под DevOps
Что удалено
Некоторые принципы из «Дзен Python» исключили по следующим причинам.

Flat is better than nested / Sparse is better than dense / Readability counts

В DevOps преобладают языки и форматы с жёсткими правилами форматирования — в первую очередь Go с его opinionated gofmt. Дизайн схем в YAML и JSON должен подчиняться рекомендациям по проектированию API, а не только требованиям к читаемости. Хотя читаемость, разумеется, остаётся важной.

Special cases aren’t special enough to break the rules / Although practicality beats purity

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

Now is better than never / Although never is often better than right now

Их заменили на «Предпочитай изменения, которые ускоряют работу, а не замедляют её». Это позволяет сделать акцент на современных подходах Agile и Scrum, где иногда запросы внешних заказчиков получают приоритет над внутренней эффективностью команды.

Namespaces are one honking great idea — let’s do more of those!

Проблема именования встречается повсеместно, но этот принцип выбивается из тона. DevOps в значительной степени касается движущихся частей и оркестрации, а не только программного кода, где пространства имён действительно полезны.
Что добавлено
В «Дзен DevOps» появились новые принципы:

Умей ломать непродакшен-системы / Умей ломать только непродакшен-системы

Эти два правила подчёркивают необходимость чёткого разделения непродакшен- и продакшен-сред. Это типичная операционная тема, которой не было в «Дзен Python».

Проектируй больше чем на одну / Проектируй больше чем на один раз

Принципы акцентируют автоматизацию и кодификацию инфраструктурных практик. Ничего принципиально нового здесь нет: использование sysprep в эпоху Windows XP для массового развёртывания рабочих станций по сути то же самое, что подготовка загрузочных носителей для air-gapped Kubernetes-кластеров на периферии. Это близко к immutable infrastructure, где серверы не модифицируют на месте, а создают новые экземпляры.

Предпочитай изменения, которые ускоряют работу, а не замедляют её

Принцип напоминает о необходимости опережать рост затрат на сопровождение. Объём и сложность инфраструктуры, которой управляют команды, постоянно увеличиваются. Поэтому изменения, которые упрощают процессы, снижают трение и повышают эффективность, становятся критически важными.
Универсальность и вечность
Время покажет, сохранит ли «Дзен DevOps» актуальность так же долго, как «Дзен Python». Пока надежда на это есть.

Диапазон практик в DevOps продолжает расширяться. Передовые команды уже используют agentic workflows — автономные агенты на базе ИИ. В то же время в некоторых организациях запрос на сервер, кластер, изменение DNS-записи или правило в firewall может обрабатываться несколько дней.

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

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

Посмотрим, выдержит ли «Дзен DevOps» эпоху ИИ. Если нет, мы, скорее всего, получим огромное количество непонятного и неуправляемого кода и конфигураций. Но пока предпосылки для оптимизма есть.

Пример: «Должен быть один — и желательно только один — очевидный способ сделать это»
Это правило напрямую повышает эффективность агентов ИИ. При экспериментах с интеграцией агентов критически важно проводить их в непродакшен-средах. Если эксперимент привёл к поломке, возможность быстро пересобрать среду заново становится решающим фактором. В отличие от «Дзен Python», привязанного к одному языку, «Дзен DevOps» стремится к универсальности.

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

  • serverless и Kubernetes
  • публичным облаком и on-premise
  • AWS, Azure и GCP
  • Terraform, CDK, Pulumi и Crossplane
  • GitOps и классическими пайплайнами
  • Agile, Kanban и Waterfall
  • строгой и слабой типизацией
  • императивным и декларативным подходом
  • Windows и Linux
  • pets и cattle
  • DevOps, SRE и Platform Engineering
  • Rust и любым другим языком
  • YAML, JSON, TOML, KYAML, JSON5
Средства, а не цели
Не позволяйте принципам отвлекать от главной задачи.

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

Возьмём принцип «явное лучше неявного». Для одних он означает: никаких абстракций, всё должно быть видно и доступно сразу. Для других — осознанно решать, что именно делать явным, а что скрывать за интерфейсом, чтобы интерфейс оставался чётким и предсказуемым.

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

«Дзен DevOps» — это не экзамен, который можно сдать или провалить.

Закажите аудит инфраструктуры и CI/CD

Даже если у вас нет четкой задачи, мы все обсудим и подскажем.

Узнать больше