Архитектура ПО в эпоху AI

Ключевые тезисы

  • Архитектура — это набор полезных ограничений, которые уменьшают трудозатраты на создание и поддержку системы.
  • Цель архитектуры — помочь бизнесу быстрее доставлять фичи и повышать стабильность, а не просто сделать код читаемым.
  • Искусственный интеллект является потребителем, а не создателем архитектуры, поэтому роль архитектора остаётся за человеком.
  • Ключевой навык архитектора — мышление на уровне абстракций, а не реализаций.
  • Простые и понятные архитектурные решения выживают на дистанции.

Основное содержание

Что такое архитектура ПО?

Общепринятого определения не существует. Автор предлагает практическое определение:

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

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

Цель архитектуры

Главная цель, по Роберту Мартину («Чистая архитектура»):

Цель архитектуры ПО — уменьшить человеческие трудозатраты на создание и сопровождение системы.

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

Метрика качества решения: Уменьшит ли новое ограничение трудозатраты на создание или поддержку фич? Если нет — это правило ради правила.

AI и архитектура

ИИ (в виде код-генераторов) сам по себе не развивает архитектуру проекта, а лишь потребляет её. Он опирается на:

  1. Существующую кодовую базу (что может perpetuровать легаси).
  2. Правила и скилы (skills), описанные разработчиками в MD-файлах.

Вывод: Потребность в чётко описанной архитектуре растёт, чтобы проект не превратился в «помойку». За архитектуру по-прежнему отвечает человек. На рынке появляется новая роль — Agentic AI Developer, где разработчик выступает как «босс», принимающий решения, а ИИ — как ассистент, выполняющий рутину.

Мышление абстракциями

Ключ к архитектурному мышлению — думать на уровне абстракций, а не реализаций (имплементаций).

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

Пример: Интеграция системы логирования

  • Обычный подход: Прямая интеграция конкретного инструмента (например, Sentry) по всему коду.
  • Архитектурный подход (с абстракцией): Создание общего модуля logger с собственным интерфейсом, который внутри использует Sentry (или любой другой инструмент).

Преимущества подхода с абстракцией

  1. Независимость от инструмента: Код зависит от вашего интерфейса, а не от конкретной библиотеки.
  2. Гибкость при изменениях: Смена инструмента (миграция с Sentry на Coralogix) или изменение его конфигурации происходят в одном месте (в адаптере внутри модуля logger), а не в тысячах файлов.
  3. Безопасность раскатки: Введение фича-флагов, параллельный запуск двух логгеров для безопасной миграции упрощается до изменений внутри одной абстракции.

Этот подход — применение принципа инверсии зависимостей (D из SOLID): код должен зависеть от интерфейсов, а не от реализаций.

Проектирование абстракции

Энергия должна уходить в проектирование интерфейса:

  • Как будет называться абстракция?
  • Что будут импортировать другие модули (объект, функция)?
  • Какие будут методы/параметры?
  • Пример интерфейса логгера: Объект logger с методами .error(), .warn(), .info(). Использование объекта в параметрах даёт гибкость и сохраняет обратную совместимость.

Выводы

  • Архитектура — это торговля: мы вводим ограничения, чтобы получить выгоду в виде снижения трудозатрат.
  • В эпоху AI важность продуманной, документированной архитектуры только возрастает.
  • Развитие архитектурного мышления начинается с перехода от мышления реализациями к мышлению абстракциями.
  • Простые и легко объяснимые архитектурные решения (Simple Architecture) являются наиболее жизнеспособными.
  • Опыт (как собственный через «боль» миграций, так и чужой через книги и курсы) — ключевой способ развития навыка архитектора.