惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V2EX - 技术
V2EX - 技术
P
Privacy International News Feed
Security Latest
Security Latest
H
Hacker News: Front Page
T
Tenable Blog
The Hacker News
The Hacker News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Security @ Cisco Blogs
Project Zero
Project Zero
O
OpenAI News
AI
AI
Spread Privacy
Spread Privacy
C
CERT Recently Published Vulnerability Notes
The Last Watchdog
The Last Watchdog
G
GRAHAM CLULEY
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Scott Helme
Scott Helme
Application and Cybersecurity Blog
Application and Cybersecurity Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
C
CXSECURITY Database RSS Feed - CXSecurity.com
NISL@THU
NISL@THU
A
Arctic Wolf
T
Threat Research - Cisco Blogs
PCI Perspectives
PCI Perspectives
N
News and Events Feed by Topic
C
Cyber Attacks, Cyber Crime and Cyber Security
C
Cybersecurity and Infrastructure Security Agency CISA
Simon Willison's Weblog
Simon Willison's Weblog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Know Your Adversary
Know Your Adversary
Google Online Security Blog
Google Online Security Blog
罗磊的独立博客
L
LINUX DO - 最新话题
U
Unit 42
S
Security Affairs
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
博客园 - 【当耐特】
T
The Exploit Database - CXSecurity.com
S
Schneier on Security
月光博客
月光博客
Engineering at Meta
Engineering at Meta
腾讯CDC
F
Full Disclosure
Cyberwarzone
Cyberwarzone
S
SegmentFault 最新的问题
Recorded Future
Recorded Future
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 司徒正美
The Cloudflare Blog

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Средовой подход вместо системного: как проектировать ИТ-продукты, которые растят сами себя
Руслан Сафин · 2026-06-25 · via Все публикации подряд на Хабре

Средовой подход вместо системного: как проектировать ИТ-продукты, которые растят сами себя

12 мин

0

Привет, Хабр!

В своей прошлой статье про будущее ИТ я писал о важности формулирования новых вызовов в индустрии:

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

И постарался этот вызов сформулировать:

На мой взгляд, следующий этап развития ИТ — это переход от системного подхода к средовому.

Теперь настало время начать хотя бы задумываться об ответе на поставленный вопрос, и кому этим заняться, если не мне? 😅

Итак, давайте кратко повторю, что я имел ввиду:

Мы перестанем думать категориями «300 микросервисов, между ними такие-то связи» и начнём думать категориями «вот эта штука ведёт себя по определённым законам, а внутри — рой чего-то, чего конкретно — нам не важно». И архитекторы будущего будут описывать методологию построения таких сред. Это большой новый вызов.

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

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


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

Последние лет 50+ мы живём в парадигме системного подхода. Система — это совокупность компонентов, где мы знаем каждый компонент и каждую связь между компонентами. Знаем сколько их и какие они. Мы декомпозируем, специфицируем, собираем, проверяем. ООП, Монолиты, Микросервисы, контракты, диаграммы — всё это про систему и системный подход.

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

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

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


И для перехода к созданию или проектированию среды рассмотрим ещё одну очень удачную аналогию. По сути это ведь садоводство!

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


Зачем это вообще нужно: ИИ загоняет нас в среду насильно

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

Оба этих тезиса подталкивают нас к средовому подходу.

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

Управлять этим изобилием системными методами просто нечем. Нужен другой подход. Так что методология ниже — это уже даже не про “через 10 лет” (как я думал ещё год назад). А про то, как удержать управляемость уже сейчас, ведь уже сейчас агенты как минимум массово фигачат код.


Что именно проектируется: примитивы среды

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

Законы среды (её физика; встроенные, нерушимые правила; инварианты или субстрат). Правила, которые держатся всегда и для любого компонента — нынешнего и будущего, написанного человеком или агентом. Например:

  • У каждой сущности данных ровно одна мастер-система

  • Взаимодействие через любую границу (компонента/микросервиса/контекста/продукта) — только по контракту

  • Любой элемент обязан быть дёшево и быстро убиваемым

Раньше для меня это были тесты-проверки постфактум — я про это много писал: каскадное снижение связанности, тестирование архитектуры as Code, проектирование и тестирование отказоустойчивости. В средовом подходе они становятся первичным предметом проектирования — той физикой, которая в природе изначально влияет на все процессы (а не постфактум проверяет — соответствует ли то, что выросло законам физики). В одном из постов у меня была мысль: в физическом мире есть силы природы, которые не дадут собрать нежизнеспособного франкенштейна, а в ИТ таких сил нет — макаронного монстра ничто не зарубает на корню.

Средовой подход на это отвечает прямо: раз природа законы не даёт, установи их сам и сделай нерушимыми. На практике это Policy as Сode, admission-контроллеры в кубере или в целом любая платформа, которая делает недопустимое состояние попросту невозможным.

Стимулы вместо команд (силовые поля, градиенты). Направления наименьшего сопротивления, вдоль которых течёт (или выстраивается) поведение. Компоненту не приказывают, где жить или как себя вести — делают так, что правильное размещение и поведение дешевле или быстрее. Например, кубер разместит поды туда, где ресурсы свободнее/дешевле; балансировщик направит меньше трафика на медленный инстанс. Backpressure-механизм и квоты — туда же.

Приём один: сделать правильное путём наименьшего сопротивления.

Ниши. Термин я взял у Юрия Мануйлова — у него есть проработанная теория средового подхода (правда, в педагогике). Суть в том, что ты проектируешь не сам компонент, а форму пустого слота, в котором компонент определённого рода может появиться: точки расширения/плагины, события/топики как ниши, шаблоны, app store, описание mcp-сервера… Заполняет ниши уже среда без центральной координации. Спроектировать нишу — значит описать условия появления, а содержимое оставить открытым.

Отбор и гомеостаз. То, что поощряет пригодное и растворяет непригодное. Прохождение Fitness-функций и тестов: кто не прошёл — до прода не доехал. Все разнообразные метрики Fitness-сигналов (SLO / уровень ошибок / latency) поднимают долю годного и убивают негодное.

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

Что измеряешь, по тому и идёт отбор — поэтому кривая метрика приводит к кривому результату (классический закон Гудхарта: показатель, ставший целью, перестаёт быть хорошим показателем). Если награждать только за прохождение тестов — среда эволюционирует в сторону обмана тестов, а не качества

Полупроницаемые мембраны. Граница в среде — не бинарная стена можно/нельзя, а градиент проницаемости: например, внутри ходить дёшево, а наружу уже дороже, стоимость растёт с уровнем перехода через границу (модуль-микросервис-контекст-продукт). По сути — это мой принцип каскадного снижения связанности, переписанный на язык средового подхода


Методология: цикл проектирования среды

Системный цикл мы знаем наизусть: требования → декомпозиция и спецификация → разработка → тестирование → …

Средовой цикл я бы построил так:

  1. Определить макрозаконы продукта. Свойства поведения целого, которые мы хотим гарантировать. Например:

    • время отклика не растёт при увеличении данных в 10 раз,

    • отказ любой части не приводит к отказу всего,

    • подключение нового партнёра (службы доставки, платёжки) занимает не больше 2 дней.

    • … и так далее

  2. Вшить нерушимые правила для каждого элемента (что среда запрещает всем) Правила поведения частного, каждого элемента по отдельности. Например:

    • у каждой сущности данных ровно одна мастер-система

    • взаимодействие только по API-контракту (без прямых подключений в чужую БД)

    • любой сервис обязан быть stateless и убиваемым в любой момент без потери данных

    • … и т.д.

  3. Спроектировать стимулы (градиенты) так, чтобы агент (человек или ИИ), производящий компонент, сам тянулся к нужной реализации и конфигурации.

  4. Нарезать ниши — формы слотов, которые будут заполняться уже без нашего ведома

  5. Включить отбор и гомеостаз — проверка fitness-сигналов, поглощение внешнего воздействия — возврат к равновесию (паттерны отказоустойчивости).

  6. Наблюдать макроповедение. Отслеживание соблюдения законов и показателей эмерджентных свойств (свойств целого, а не метрик каждого компонента по отдельности). Бизнес-метрики или общая доступность продукта - хорошие примеры эмерджентных свойств.

  7. Настраивать силовые поля. Если поведение поплыло — крутим стимулы (градиенты), пробуем править законы и правила отбора. В отдельный конкретный компонент не лезем, даже если знаем что он ведёт себя не подобающе. Помним, что мы — садовники.

Такой цикл не отменяет наших передовых текущих подходов. Гипотезы, метрики, тесты, фитнес-функции, платформизация и т.д. — всё на месте, просто теперь это инструменты возделывания среды. И гипотезы мы проверяем не про компонент, а про среду в целом: «если сдвинуть стимул вот так, рой микросервисов перераспределится туда-то, и макрометрика поедет». Доказательность и предсказуемость остаются, просто переезжают на уровень выше.


Паттерны средового проектирования

Если у системного мира есть SOLID, DDD, оркестрация и хореография, то для средового я бы выделил следующий набор. Часть уже живёт в теории распределённых и роевых систем, часть можно достроить под ИТ-продукты. Наверняка список неполный.

Стигмергия. Координация через следы в среде, а не через прямое взаимодействие. К примеру, муравьи не устраивают созвонов на весь муравейник, они оставляют феромоны, по которым выстраивается поведение всего отряда. В ИТ это общий журнал событий или разделяемое состояние (которое компоненты читают и в которое пишут, вместо оркестрованных цепочек вызовов). Похоже на event-driven, и наполовину это он — но в средовой рамке это базовый способ координации роя, а не один из вариантов интеграции.

Аттрактор/градиент вместо явной маршрутизации. Размещение и направление по градиентам метрик. Ничего (или почти ничего) не должен решать центр (оркестратор) — всё само вытекает из заданных законов силовых полей. Помимо примеров выше, приведу ещё один: Pull вместо push (очередь как поле). Воркеры сами забирают задачи из очереди в своём темпе — работа автоматически утекает к свободным мощностям. Свободный воркер — это низина градиента, задача в неё скатывается. Нет никакого диспетчера, раздающего задания поимённо.

Правило как физический закон Инвариант, который среда делает нерушимым. Например, типизация и сборка кода компилятором, ограничения и правила в БД (Not NULL, FK, …), read-only доступы и т.д. Среда или платформа отвергает нелегальное состояние. Эти законы нельзя нарушить даже очень захотев под дедлайн.

Ниша + колонизация. Пустой слот с описанными условиями появления чего-либо, который заполняют агенты (внешние или внутренние).

Отбор и выбраковка (свойство растворения). Правила отбора и верификации, о которых писал выше, должны работать :)

Популяция вместо экземпляра. Надёжность измеряется и проверяется статистикой роя, а не корректностью каждого элемента.

Гомеостатические петли. Как пример — практики отказоустойчивости автоскейлинг, переподключение, Circuit Breaker и т.д. Проектируем не чтобы не упало, а чтобы вернулось в равновесие после того, как качнулось (как это делается в отдельной моей статье, которую уже упоминал выше: https://habr.com/ru/articles/764904/).


Принципы

Если брать классическую ИТ-науку, в дополнение к паттернам можно попробовать сформулировать и принципы проектирования сред. Позволю себе сделать это кратко

  • Возделывай условия вместо самостоятельной лепки результата.

  • Делай желаемое путём наименьшего сопротивления — выравнивай градиенты с целью.

  • Управляй законом, а не инструкцией: закон держится для всех элементов, включая ещё не существующие.

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

  • Надёжность бери из популяции, а не из совершенства отдельного элемента.

  • Наблюдай и рули на макроуровне.

  • Встраивай растворение: каждый элемент обязан быть дёшево убиваемым.

  • Помни роли: архитектор возделывает поля и законы, компоненты выращивают агенты — белковые человеческие и ИИ

  • Береги разнообразие: монокультура среды хрупка.

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

Табличка с различиями

Измерение

Системный подход

Средовой подход

Объект проектирования

компоненты и связи

законы, поля, ниши, отбор

Единица

компонент/сервис

поле/закон/популяция

Способ управления

команда, спецификация

влияние, градиент, условие

Как происходит изменение

перепроектировал и пересобрал

сдвинул поле — рой перетёк сам

Источник надёжности

корректность каждого элемента

гомеостаз и популяция (растворение)

Роль архитектора

конструктор механизма

садовник среды / законодатель физики

Верификация

доказать поведение артефакта

доказать, что законы держатся + статистика макроповедения

Типичный отказ

сломалась деталь

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

Что значит «хорошо»

соответствие чертежу

устойчивое нужное макроповедение


Итак, внимательный и прозорливый читатель уже наверняка провёл аналогии. Если вы работали с ИИ по SDD (Spec-Driven Development) - совпадения легко прослеживаются.

Средовой подход — это и есть harness для ИИ

Посмотрите, как мы работаем с ИИ-агентами, когда работаем всерьёз: мы же не диктуем агенту код строка за строкой — это абсурд, тогда уж проще самому написать. Мы задаём ему обвязку: рабочие файлы, ADR, примеры, стайл-гайды, тесты, CI, линтеры, политики, бизнес-цель, ограничения и т.д. В мире LLM это и называют harness — вся обвязка или оснастка вокруг модели, в которой она действует: инструменты, контекст, проверки, петли обратной связи, правила игры.

А теперь приглядитесь, из чего harness состоит. Законы — это линтеры, типы, policy и admission-проверки, которые агент не может нарушить. Отбор — тесты и evals: годное проходит, негодное не доезжает. Наблюдение за макро — ты смотришь не на каждую сгенерённую строчку, а на результат целого, соблюдение законов и метрики. Т.е. на те же самые средовые примитивы, просто под другими именами.

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

Я уже пару месяцев принимаю участие в разработке нового harness’а (ну или SDD-фреймворка на максималках), и, честно скажу, до меня только совсем недавно внезапно дошло, что harness для ИИ и есть та среда, в которой ИТ-продукт взращивается сам или руками ИИ-агентов. Мы задаём не код, а условия, направления и отбор, а реализация вырастает внутри. Слово в слово определение средового проектирования. LLM-инженерия пришла к нему с другой стороны и назвала своим термином.

Я уже отмечал, что на смену промпт-инженеру приходит контекст-инженер: формулировать научились все, а вот собирать контекст — навык, который только формируется. Теперь думаю, что и контекст-инженер — тоже промежуточная остановка. Дальше — средовой инженер, архитектор среды: тот, кто проектирует не контекст под одну задачу, а устойчивую обвязку, в которой рой агентов сам и многократно решает целые классы задач. То есть сейчас мы уже занимаемся средой для взращивания ИТ-продукта. Я думаю, скоро будем проектировать и среды, где он живёт (функционирует). Ведь сейчас harness заканчивается до кнопки deploy to prod.


Вывод: мы уже переходим к средовому подходу, просто не называли это так

Когда я прошлой осенью впервые на докладе сказал, что к средовому подходу в ИТ мы придем через лет 10 — я глубоко ошибся в большую сторону ) А когда я сам начал использовать и развивать SDD — я, кажется, проглядел очевидное под носом. Мы туда уже пришли и обживаемся. А если брать отдельные наши практики — так мы там вообще давно, только не называли это средовым подходом.

Смотрите сами. Kubernetes — это не «запусти вот этот процесс вот здесь», а «вот желаемое состояние и законы, держи его сам, а как именно — твоё дело». Чистый гомеостаз. Автоскейлинг — гомеостатическая петля. Фитнес-функции, evals, тесты и метрики статического анализа — отбор. Платформенная инженерия и internal developer platform — построение среды и ниш, в которые продуктовые команды встраиваются. Policy-as-code и admission-контроллеры — законы физики среды. FinOps — градиент стоимости. Service mesh — поле, через которое течёт трафик.

Harness — всё то же самое, но для ИИ-агентов.

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

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

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

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

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


Не успел дописать в среду, публикую в четверг

Скромно оставляю ссылку на свой тг-канал: Архитектура распределённых систем , останавливаться в изысканиях не собираюсь — подписывайтесь

📝