Бюджет на ИИ-ассистентов согласован, пилот запущен — а через квартал деплои срываются чаще, чем до него. DORA в исследованиях 2026 года объясняет, почему это не «плохой ИИ», а арифметика: ИИ — усилитель, а не лекарство. Он умножает объём изменений, который выдаёт команда, — и если система доставки захлёбывалась и раньше, теперь она захлёбывается быстрее.
Почему сейчас: в State of AI-assisted Software Development эффект амплификации назван главным выводом по ИИ — отдача модулируется качеством платформы, а platform engineering переведён из «желательно» в «обязательное условие» (dora.dev). Ниже — что это значит для команды из пяти человек, без энтерпрайз-пафоса, и как за вечер посчитать собственный бейзлайн до покупки любых подписок.
Содержание
Открыть содержание
Four keys — язык, на котором DORA говорит о платформе
DORA (DevOps Research and Assessment) — исследовательская программа, которая с начала 2010-х сопоставляет практики доставки софта с бизнес-результатами. Её словарь — четыре метрики, four keys:
- Lead time for changes — сколько проходит от коммита до работы изменения в проде.
- Deployment frequency — как часто изменения реально доезжают до пользователей.
- Change failure rate — доля деплоев, после которых нужен откат, патч или инцидент.
- MTTR — время восстановления после неудачного деплоя (в отчётах 2026 года — failed deployment recovery time, но все по-прежнему говорят MTTR).
Первые две метрики измеряют throughput — сколько система пропускает; вторые две — stability — сколько при этом ломается. Здравый смысл подсказывает, что это весы: ускоряешься — теряешь надёжность. Данные DORA много лет показывают обратное: команды верхних эшелонов выигрывают по обеим шкалам сразу — не потому, что «работают быстрее», а потому, что их платформа делает маленькие частые изменения дешёвыми и безопасными. Four keys — термометр платформы: они показывают не «хорошо или плохо», а где именно узкое место.
Главный вывод: платформа — модерирующий фактор
DORA меряла, как внедрение ИИ меняет four keys, и получила картину, которая на первый взгляд противоречива: один и тот же класс инструментов у одних команд ускорил доставку, у других — увеличил lead time и change failure rate.
Противоречие снимается одним тезисом: эффект от ИИ модулируется качеством платформы. ИИ резко поднимает объём производимых изменений — кода, PR, миграций, конфигов. Вопрос один: переваривает ли их ваша система доставки. Зрелая платформа пропускает возросший поток — и выигрыш материализуется. Слабая захлёбывается — и тот же поток превращается в очередь, ложные красные и откаты.
Отсюда практическая формула: эффект ИИ ≈ качество платформы × прирост объёма изменений. Если множитель меньше единицы, «умный ассистент» ускоряет не вас, а вашу деградацию. Именно поэтому вывод DORA адресован не энтузиастам ИИ, а инженерам платформы: сначала сигнал, потом усилитель.
Почему нестабильный пайплайн от ИИ становится хуже
Механика деградации — не магия, а четыре наблюдаемых механизма:
- Объём изменений растёт сразу. Разработчик с ассистентом открывает не три PR в неделю, а восемь. Каждый PR — прогон CI, ревью и деплой: нагрузка на систему доставки растёт кратно, её пропускная способность — нет.
- Вред flaky-тестов растёт нелинейно. Если в наборе 5% мигающих тестов, при удвоении числа прогонов удваивается и количество ложных красных. Команда привыкает перезапускать CI не читая — и настоящий красный однажды уезжает в прод, потому что тонет в шуме.
- Экономия превращается в пробку. Ассистент сэкономил полчаса на написании кода, но свободный раннер появится через час, а ревьюер — завтра утром. Локально быстрее — глобально медленнее: lead time растёт, хотя каждый участник стал продуктивнее.
- Обратная связь разрывается. Весь смысл ИИ-генерации — короткий цикл «сгенерировал — проверил — поправил». Если проверка занимает 50 минут, ассистент простаивает, а накопленные «почти готовые» изменения сливаются в один большой рискованный деплой — ровно то, от чего DORA предупреждала ещё до эпохи ИИ.
ИИ не создаёт проблемы слабой платформы — он их подсвечивает. Всё, что терпело десять изменений в неделю, ломается на сорока: тесты, которых не хватает; ручные шаги, которые некому делать вдвое чаще; ревью как единственный контроль качества.
| Слабая платформа + ИИ | Зрелая платформа + ИИ | |
|---|---|---|
| Объём изменений | растёт | растёт — тот же самый |
| Lead time | растёт: очередь CI, ожидание ревью | падает: проверки успевают за генерацией |
| Deployment frequency | падает: деплои сливаются в большие | растёт: изменения едут по одному |
| Change failure rate | растёт: шум глушит сигнал | на месте: красный CI читают, а не перезапускают |
| MTTR | растёт: откат большого деплоя долог | короткий: откат одного маленького изменения |
| Ревью | узкое место, конфликты, очередь | выборочная проверка против golden path |
| Итог | «ИИ нам не помог» | «ИИ окупился» |
Один инструмент — две газетные цитаты. Разница не в инструменте.
Что усилить до подписки на ИИ
Чек-лист «сначала почини то, что будет умножаться», по убыванию отдачи:
- Уберите flaky-тесты из общего прогона. Карантин-джоб с правом не блокировать merge и неделя на починку — и зелёный CI снова становится источником истины. Красный CI, который перезапускают по привычке, хуже отсутствия CI.
- Дайте пайплайну бюджет длительности. Ориентир для малого проекта — полный прогон ≤ 10 минут: кэши зависимостей, параллельные сьюты, Trivy с кэшем баз. Быстрый CI — не удобство, а условие короткого цикла для ИИ.
- Постройте golden path. Один шаблон сервиса: репозиторий, CI, деплой и observability из коробки — как в разборе IDP для маленькой команды. Ассистент, работающий по шаблону, предсказуем; ассистент без шаблона плодит вариации, и каждую ловит только человек.
- Сократите размер изменений. Trunk-based development, короткоживущие ветки, деплой после каждого merge. Маленькое изменение дёшево откатывается — это и есть стабильность без регламентов на сто страниц.
- Автоматизируйте деплой и откат. Ноль ручных шагов до прода; откат — одна команда или canary с автооткатом через Flagger. MTTR снижается не героизмом дежурного, а отсутствием ручных операций.
Делать всё сразу не обязательно. Правило одно: найдите самое медленное звено проверки — обычно это e2e-тесты или ревью — и ускорьте его первым. Где узкое место, подскажут те же four keys из следующего раздела.
Мини-DORA за вечер: four keys из логов GitHub Actions
Прежде чем соглашаться с отчётом или спорить с ним, снимите собственный бейзлайн: он считается из логов уже работающего CI — без агентов, дашбордов и покупок. Нужны только gh и Python.
1. Выгрузите историю деплой-воркфлоу:
gh run list --workflow deploy.yml --limit 300 \
--json createdAt,conclusion,headSha,displayTitle > runs.json
2. Посчитайте четыре метрики:
#!/usr/bin/env python3
# mini-dora.py — four keys из runs.json; запускать в клоне репозитория
import json, subprocess, sys, statistics as st
from datetime import datetime
runs = sorted(json.load(open(sys.argv[1])), key=lambda r: r["createdAt"])
ok = [r for r in runs if r["conclusion"] == "success"]
iso = lambda s: datetime.fromisoformat(s.rstrip("Z"))
git = lambda *a: subprocess.check_output(["git", *a], text=True).strip()
if not ok:
sys.exit("успешных деплоев нет — проверьте имя workflow")
# deployment frequency — успешных деплоев в день за период
days = max((iso(ok[-1]["createdAt"]) - iso(ok[0]["createdAt"])).days, 1)
print(f"deployment frequency: {len(ok)/days:.2f} деплоев/день")
# lead time — медиана от коммита до успешного деплоя, часы
lt = []
for r in ok:
c = iso(git("show", "-s", "--format=%cI", r["headSha"]))
d = (iso(r["createdAt"]) - c).total_seconds() / 3600
if 0 <= d < 24 * 30: # отсекаем заброшенные ветки
lt.append(d)
print(f"lead time (медиана): {st.median(lt):.1f} ч")
# change failure rate — деплои, оказавшиеся фиксами или откатами
fix = sum(1 for r in ok if r["displayTitle"].lower()
.startswith(("fix", "revert", "hotfix")))
print(f"change failure rate: {fix * 100 // len(ok)}%")
# MTTR — медиана от упавшего деплоя до следующего успешного, часы
gaps = [(iso(n["createdAt"]) - iso(p["createdAt"])).total_seconds() / 3600
for p, n in zip(runs, runs[1:]) if p["conclusion"] == "failure"]
if gaps:
print(f"MTTR (медиана): {st.median(gaps):.1f} ч")
3. Запустите в клоне репозитория — нужна история коммитов, lead time считается от времени коммита:
python3 mini-dora.py runs.json
Оговорки, чтобы не обмануть себя. Lead time здесь — от коммита до деплой-воркфлоу, а не до бизнес-готовности. Change failure rate по префиксам сообщений — прокси: он занижает, если прод чинят без тега fix, и завышает, если fix: пишут в обычных задачах. Для первого бейзлайна и тренда этого достаточно. Повесьте скрипт на еженедельный cron и дописывайте строку в CSV: через два месяца у вас будет не «число», а разброс, с которым можно сравнивать что угодно — хоть эффект от ИИ, хоть эффект от починки flaky-тестов. Дашборд в Grafana — потом, когда метрик станет больше четырёх: пустой дашборд не спасает слабую метрику.
Как проверить, что метрики не врут
- Окно данных.
runs.jsonдолжен покрывать хотя бы три месяца; если после--limit 300файл кончился неделей — истории мало, медианы будут скакать от недели к неделе. - Sanity по частоте. Полученные деплои в день сходятся с вашим релизным циклом? Если вышло 0,05 при «выкладываемся каждую неделю» — вытащили не тот workflow: нужен
deploy.yml, а неci.yml. - Sanity по lead time. Медиана не может быть меньше длительности пайплайна. Если меньше — проверьте таймзоны:
ghотдаёт UTC с суффиксом Z, аgit %cI— время в зоне автора коммита. - Выборочная проверка CFR. Пролистайте 20 последних коммитов с
fix/revert: сколько из них действительно про отказ после деплоя, а сколько — про линтер и опечатку в README.
Итог
DORA-2026 произнесла вслух то, что каждая команда с больным CI знает и без отчёта: ИИ усиливает то, что уже есть. Зрелая платформа превращает его в ускоритель, слабая — в мультипликатор хаоса, оплаченный подпиской. Порядок поэтому такой: вечер на мини-DORA из логов CI, пара недель на flaky-тесты, бюджет длительности и golden path — и только потом ИИ-подписка, эффект которой вы проверите теми же четырьмя числами. Обратный порядок — сначала усилитель, потом система — сжигает бюджет и заканчивается выводом «ИИ нам не подошёл», хотя не подошёл пайплайн.