Agentic
SDLC
от постановки задачи до продакшена с AI-агентами
- Доклад
- Agentic SDLC, версия осень 2026
- Место
- Almaty Python Meetup #8
Almaty Towers, офис Choco - Дата
- 26.09.2026, 13:00
- Автор
- Азамат Галимжанов
@x3gxu · azamat.ai
Азамат
Галимжанов
Начинал с бэкенда Call of Duty.
Сейчас CEO azamat.ai, компании AI-разработки.
с 2009пишу на Python
5×CTO в стартапах
2экзита
20+AI-продуктов в проде
@x3gxu · azamat.ai · Upwork Top Rated Plus, $400K+ · Codementor 5.0★, 283 отзыва
Бренд azamat.ai представлен ТОО «Logic Layer»,
участником Astana Hub
Откуда опыт
- 2007Казкоммерцбанк, первая работа
- 2009Начал писать на Python
- 2012Бэкенд Call of Duty, Activision Blizzard
- 2013Техлид Santufei, ныне Kaspi Travel
- 2014CTO gdematerial, 300K SKU
- 2018CTO Biometric.vision, $50K MRR
- 2022LLM- и voice-агенты для US и EU
сейчасazamat.ai: Magnum, Almaty Marathon, Compass и т. д.
Руководил разработчиками.
Теперь руковожу агентами
Бренд azamat.ai представлен ТОО «Logic Layer»,
участником Astana Hub
Это мой
личный опыт
Кто говорит, что точно знает, как правильно, либо врёт, либо не шарит.
Полгода с агентами
март–сентябрь 2026
40,3 млрдтокенов обработали мои агенты
1 485часов агенты работали на меня
347 тыс.команд и правок сделали агенты
3 266коммитов
16 255сообщений я написал агентам
до 16агентов одновременно на пике
Токены нарастающим итогом
млрд токенов, которые обработали мои агенты
Часы работы агентов
по неделям, сумма по всем агентам
Час агента: от первого до последнего действия сессии, пока пауза не длиннее 5 минут. Параллельные агенты и субагенты складываются. Claude Code до конца июля не учтён: его история удалена. Сентябрь по 25-е
Коммиты
по месяцам, всего 3 266
Все мои коммиты во всех репозиториях, локальных и на GitHub, без дублей. * Сентябрь по 25-е
Сообщения агентам
по дням · линия: среднее за 7 дней
66медиана в день
106в среднем в день
с 1 мая
Только сообщения, которые я набрал руками. Столбики выше 300 обрезаны, над ними подписано значение
Где вы сейчас?
Поднимите руку
- 0Пишу код без ИИ
- 1ИИ в IDE: Claude Code в VS Code, сайдбар в Zed
- 2Claude Code или Codex в терминале
- 3Десктопные Claude Code или Codex
- 4Оркестратор: AO, Conductor, Orca, cmux
- 5Свой харнесс: Pi и т. п.
Context
management
Context rot
Чем длиннее вход, тем хуже модель с ним работает. Даже на простых задачах, даже когда всё влезает в окно.
Chroma, «Context Rot», 2025: 18 моделей, точность падает с длиной входа. Схема, не замер
Lost in the middle
Начало и конец контекста модель помнит лучше, чем середину.
Liu и др., «Lost in the Middle», 2023: точность по позиции нужного факта в контексте. Схема
Smart zone, dumb zone
Вся работа с контекстом дальше: как держать сессию слева от красной линии.
Смотрю на счётчик,
не жалею новых сессий
69.1k / 1M
- Счётчик контекста всегда на виду
- Задача закрыта: новая сессия, а не «ещё одно уточнение»
- Сессия поплыла: не спорю, а начинаю заново с тикетом
Субагенты:
у каждого чистое окно
Оркестратор
раздаёт тикеты, получает итоги
Тикет 0044
Тикет 0047
Тикет 0049
Ревьюер
не видел, как писался код
Чтение кода, логи, тесты остаются у субагента. Наверх приходит короткий итог.
«Как это почти 50к токенов
сразу улетают?!»
Я, 25 июля, после сообщения «привет»
Урезал дефолтные
тулзы Claude Code
// ~/.claude/settings.json
"permissions": { "deny": [
"EnterPlanMode", "ExitPlanMode", "NotebookEdit",
"CronCreate", "CronDelete", "CronList",
"RemoteTrigger", "ScheduleWakeup", "PushNotification",
"SuggestSkills", "SuggestPluginInstall", "SuggestConnectors",
"DesignSync", "ReportFindings", "propose_skills"
] },
"disableBundledSkills": true,
"disableClaudeAiConnectors": true,
"disableWorkflows": true,
"autoMemoryEnabled": false
System tools
20k→7.5k
AskUserQuestion и SendMessage оставил специально
«autoMemory: один раз ему что-то сказал, он сохраняет и постоянно так делает»
Отключите лишнее
Всё, что подключено, ещё до первого сообщения сидит в контексте каждой сессии.
| скиллы | disable-model-invocation: описания скиллов не попадают в контекст, скилл вызывается явно |
| MCP | выключены все, кроме нужных в этом проекте |
| AGENTS.md | короткий, остальное по ссылкам и по условию |
Большинство AGENTS.md
не помогают
+20%
к стоимости, а успешность задач в среднем не растёт. Ни у сгенерированных, ни у написанных руками AGENTS.md
Gloaguen и др., «Evaluating AGENTS.md», arXiv 2602.11988, 2026
«Give Codex a map, not a 1,000-page instruction manual»
У OpenAI AGENTS.md около 100 строк и работает как оглавление: ссылки на docs/, где лежит остальное
OpenAI, «Harness engineering», 11.02.2026
Доки: оглавление,
а не простыня
kivuno/
├── AGENTS.md 140 строк: хаб и условия чтения
├── CONTEXT.md домен, пользователи, инварианты
└── docs/
├── agents/ 14 файлов, читаются по условию
│ ├── backend.md
│ ├── frontend.md
│ ├── styling.md ← после «где Tailwind?»
│ ├── playwright.md ← после «ничего непонятно»
│ ├── ticket-tracker.md ← после «1–2 дня»
│ └── testing.md …
├── adrs/ 8 решений
├── tickets/
├── prototypes/
└── client/ созвоны и документы клиента
«When working on server code, read docs/agents/backend.md»
AGENTS.md говорит, что читать и когда. Сам он короткий.
Правило появляется, когда ошибка повторилась. Не раньше
ADR: решения
с историей
docs/adrs/0008-pravka-utverzhdennogo-menyu-bez-chernovika.md
Статус
Принят. Заменяет часть ADR-0005
Контекст
На созвоне 21.09 клиент назвал замок утверждённого меню самым острым местом: диетолог не понимает, как поменять блюдо
Решение
Блюда правятся без возврата в черновик. Каждая правка пишется событием, директор видит список изменений
- 0001 стек
- 0002 прагматичный event sourcing
- 0003 SvelteKit
- 0004 деплой
- 0005 правки дня по времени и статусу
- 0006 Tailwind вместо классов прототипа
- 0007 кнопки и поля shadcn
- 0008 правка утверждённого меню
«If a proposed change conflicts with an existing ADR, surface the conflict explicitly rather than silently overriding the decision»из AGENTS.md
Процесс тот же.
Детали другие
| Этап | Весна | Сейчас |
|---|---|---|
| Планирование | ||
| Тикеты | ||
| Исполнение | ||
| Проверка | ||
| Ревью | ||
| Оркестрация |
Процесс тот же.
Детали другие
| Этап | Весна | Сейчас |
|---|---|---|
| Планирование | plan mode, grill-me | |
| Тикеты | ||
| Исполнение | ||
| Проверка | ||
| Ревью | ||
| Оркестрация |
Кто пользуется
plan mode?
- AПостоянно
- BИногда
- CНе пользуюсь
- DЧто это?
Процесс тот же.
Детали другие
| Этап | Весна | Сейчас |
|---|---|---|
| Планирование | plan mode, grill-me | batch-grill-me, прототипы |
| Тикеты | ||
| Исполнение | ||
| Проверка | ||
| Ревью | ||
| Оркестрация |
«Хочу увидеть прототипы. Можешь прям сверстать с фейк данными. Дай несколько вариантов»
29.08. Три варианта за 10 минут, данные фейковые
Процесс тот же.
Детали другие
| Этап | Весна | Сейчас |
|---|---|---|
| Планирование | plan mode, grill-me | batch-grill-me, прототипы |
| Тикеты | markdown | |
| Исполнение | ||
| Проверка | ||
| Ревью | ||
| Оркестрация |
Кто даёт агенту
скриншоты?
- AПостоянно
- BИногда
- CТолько текст
Процесс тот же.
Детали другие
| Этап | Весна | Сейчас |
|---|---|---|
| Планирование | plan mode, grill-me | batch-grill-me, прототипы |
| Тикеты | markdown | HTML, скриншоты, кадры из созвонов |
| Исполнение | ||
| Проверка | ||
| Ревью | ||
| Оркестрация |
Из чего состоит тикет
- Как сейчас
- Зачем менять
- Что строим
- Критерии приёмки
- Журнал работы
Тикеты рождаются
из созвона
- Запись созвонаZoom, час с клиентом
- Транскриптwhisper с диаризацией, реплики с таймкодами
- Кадрыскриншоты из видео по таймкодам
- /to-ticketsагент режет на тикеты
- HTML-тикетцитаты и кадры внутри
[22:16] Speaker 1: журнал раскладок вот это вот и там вот здесь по идее можно тупо календарь
[22:27] Speaker 2: по календарю если согласен ... надо просто по дню и всё
kivuno: 13 созвонов в docs/client, только из одного созвона 21.09 нарезано 37 кадров
Claude: «I estimate this will take 1–2 weeks to complete»
Me:
Агенты не оценивают.
Агенты засекают
22.08: усилить ревью в Sandcastle. «делай и коммит» в 09:01, коммит 2e62629 в 09:14, 487 тестов зелёные
Тикеты 0043–0064: от 16 минут до 2 ч 13 мин, обычно 25–60 минут.
Время пишет CLI, work start и work stop. «Never by guessing afterwards».
Процесс тот же.
Детали другие
| Этап | Весна | Сейчас |
|---|---|---|
| Планирование | plan mode, grill-me | batch-grill-me, прототипы |
| Тикеты | markdown | HTML, скриншоты, кадры из созвонов |
| Исполнение | TDD | TDD + ponytail, property-based и мутации, browser use |
| Проверка | ||
| Ревью | ||
| Оркестрация |
ponytail: ленивый сеньор
«You are a lazy senior developer. Lazy means efficient, not careless. The best code is the code never written»
- Это вообще нужно?
- Уже есть в кодовой базе?
- Есть в stdlib?
- Покрывает сама платформа?
- Решает уже установленная зависимость?
- Можно одной строкой?
- Только тогда минимальный код
DietrichGebert/ponytail, SKILL.md. Упрощения помечаются комментарием # ponytail: … с пределом и путём апгрейда
JetBrains проверили
| Обещали | Намерили | |
|---|---|---|
| Кода | −54% | −15% |
| Стоимость | −20% | −10,3% |
| Время | −27% | −11% |
| Качество | без разницы |
JetBrains AI blog, июль 2026: 80 парных задач. Первый «экономитель токенов» в их серии со статистически значимой экономией. Код сокращается там, где было куда переусложнить
Property-based testing
Функция со скрытым багом
def encode(input_string):
count = 1
prev = ""
lst = []
for character in input_string:
if character != prev:
if prev:
lst.append((prev, count))
count = 1
prev = character
else:
count += 1
lst.append((character, count))
return lst
def decode(lst):
return "".join(character * count for character, count in lst)Run-length encoding: «WWWB» → [("W", 3), ("B", 1)]. Пример из документации Hypothesis
Property-based testing
Обычный тест: зелёный
def test_encode_decode():
s = "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWW"
assert decode(encode(s)) == s
✓ passed
Property-based testing
Свойство: для любой строки
from hypothesis import given
from hypothesis.strategies import text
@given(text())
def test_decode_inverts_encode(s):
assert decode(encode(s)) == s
Falsifying example: test_decode_inverts_encode(s='')
UnboundLocalError: cannot access local variable 'character'
Hypothesis перебрал строки и ужал падение до минимального примера: пустая строка. Такой тест руками обычно не пишут
Моё свойство по бизнес-логике: сумма не зависит от порядка блюд
Витамин B2 в меню дня
На главной
1,89
В отчёте и PDF
1,88
- Сумма float зависит от порядка слагаемых
- В одном месте блюда шли в одном порядке, в другом в другом
1.885и1.8849999999999998округляются по-разному
Обычные тесты были зелёные: в них одно блюдо или «удобные» числа
Mutation testing
Проверяет не код, а тесты. Инструмент портит код и смотрит, заметят ли это тесты.
Код и тесты
def can_buy_alcohol(age):
return age >= 18
def test_adult():
assert can_buy_alcohol(30)
def test_child():
assert not can_buy_alcohol(10)Мутант: >= заменили на >
def can_buy_alcohol(age):
return age > 18 # тесты всё равно зелёные
$ mutmut run
survived: can_buy_alcohol >= → >Мутант выжил, значит границу в 18 лет никто не проверяет. Дописываем test_exactly_18.
Mutation score: доля убитых мутантов. Coverage такое не видит: строка ведь выполнялась.
Что нашли мутанты
Код: смены для супервайзера
def shifts_for(user: User) -> list[Shift]:
query = select(Shift).join(Employee)
if user.role == Role.SUPERVISOR:
query = query.where(Employee.mentor_id == user.id)
return db.scalars(query).all()
Супервайзер должен видеть только смены своей команды
Что нашли мутанты
Тест есть, coverage 100%
def test_supervisor_sees_team_shifts(supervisor, promoter):
make_shift(promoter, mentor=supervisor)
assert len(shifts_for(supervisor)) == 1
Строка с фильтром выполняется, coverage зелёный
Что нашли мутанты
Мутант: строку удалили
def shifts_for(user: User) -> list[Shift]:
query = select(Shift).join(Employee)
if user.role == Role.SUPERVISOR:
pass # мутант: фильтр по команде удалён
return db.scalars(query).all()
✓ все ~1500 тестов зелёные. Мутант выжил
В тесте есть только одна смена, и она своя. Тест не отличает «свои смены» от «все смены»
Что нашли мутанты
Что это значит
def test_supervisor_does_not_see_other_teams(supervisor, other_supervisor):
mine = make_shift(promoter_a, mentor=supervisor)
make_shift(promoter_b, mentor=other_supervisor)
assert shifts_for(supervisor) == [mine]
Контроль доступа никто не проверял: можно было стереть фильтр, и супервайзер видел бы смены всех команд. Таких мест нашлось 5 из 13
Browser use
Агент сам ходит по интерфейсам, в которых я путаюсь
Процесс тот же.
Детали другие
| Этап | Весна | Сейчас |
|---|---|---|
| Планирование | plan mode, grill-me | batch-grill-me, прототипы |
| Тикеты | markdown | HTML, скриншоты, кадры из созвонов |
| Исполнение | TDD | TDD + ponytail, property-based и мутации, browser use |
| Проверка | тесты, ruff, ty | + wemake, видео Playwright |
| Ревью | ||
| Оркестрация |
wemake-python-styleguide
Самый строгий линтер для Python. Человеку был бы ад, агенту всё равно.
| WPS210 | слишком много локальных переменных в функции (у нас больше 9 нельзя) |
| WPS231 | когнитивная сложность функции выше 11 |
| WPS202 | слишком много функций и классов в модуле (больше 20) |
| WPS221 | слишком сложная строка |
| WPS226 | одна и та же строка-литерал повторяется |
| WPS229 | слишком длинное тело try (больше 5 строк) |
Рядом ruff и ty: у ty нет strict-режима, 4 правила подняты до error. type: ignore в src: 0
Что ловит wemake
WPS531if, который просто возвращает bool
def is_adult(user):
if user.age >= 18:
return True
else:
return False
def is_adult(user):
return user.age >= 18
WPS518неявный enumerate()
for index in range(len(people)):
...
for index, person in enumerate(people):
...
WPS519неявный sum()
total = 0
for price in get_prices():
total += price
total = sum(get_prices())
Примеры из документации wemake-python-styleguide. Автоисправления нет: линтер падает, агент переписывает
Что ловит wemake
WPS432магическое число
total = get_items_from_cart() * 3.33
price_in_euro = 3.33
total = get_items_from_cart() * (
price_in_euro
)
WPS507сравнение длины с нулём
if len(some_array) > 0:
...
if some_array:
...
WPS110 / 111пустые и короткие имена
item = None
x = 1
html_node_item = None
x_coordinate = 1
Примеры из документации wemake-python-styleguide. Автоисправления нет: линтер падает, агент переписывает
Эксперимент: returns
# что может упасть? из сигнатуры не видно
def get_user(user_id: int) -> User: ...
# библиотека returns: ошибка стала частью типа
def get_user(user_id: int) -> Result[User, NotFound | Forbidden]: ...
get_user(42).bind(load_orders).map(render)
| Rust | Result<T, E> и ? | Go | val, err := f() |
| Java | throws | TypeScript | Effect<A, E, R> |
Плюсы
Агент не может «забыть» ошибку. Тайпчекер ловит необработанный путь. Чтобы понять функцию, хватает сигнатуры.
Минусы
Не по-питоновски. Остальные библиотеки всё равно бросают исключения. Код уродливее.
Было
Эксперимент: returns
def checkout(user_id: int, cart_id: int) -> Receipt:
user = get_user(user_id)
cart = get_cart(cart_id)
payment = charge(user, cart.total)
return make_receipt(payment)
Обычный Python. Что может упасть на каждом шаге, из кода не видно
Стало
Эксперимент: returns
def checkout(user_id: int, cart_id: int) -> Result[Receipt, CheckoutError]:
return flow(
get_user(user_id),
bind(lambda user: get_cart(cart_id).map(lambda cart: (user, cart))),
bind(lambda pair: charge(pair[0], pair[1].total)),
map_(make_receipt),
)
Ошибки теперь в типе. Но чтобы протащить user и cart дальше по цепочке, появились лямбды и кортежи. На это и жалуются
Код уродливее,
зато ошибки в типах.
Согласились бы?
- AДа
- BНет
- CСмотря кто его читает
Доказательство, что тикет выполнен
Каждый тикет агент закрывает видео
Курсор, подписи к каждому клику и что мы ожидаем увидеть. Смотрю видео, а не дифф
PostHog: агент смотрит
запись сессии
- Жалоба«Клик в любое место экрана открывает запись 001152»
- «Ты можешь посмотреть posthog»агент скачал запись сессии через API и разобрал клики скриптом
- Доказательство4 клика в разные точки, все попали в ссылку 50-й строки таблицы
- ПричинаSafari игнорирует
position: relativeна<tr>: «растянутые» ссылки строк легли на всю страницу - 45 минутот передачи агенту до фикса на проде, плюс e2e-тест
Вчера ночью. Запись сессии с полным маскированием текста и полей. В интерфейсе PostHog запись никто не открывал
Процесс тот же.
Детали другие
| Этап | Весна | Сейчас |
|---|---|---|
| Планирование | plan mode, grill-me | batch-grill-me, прототипы |
| Тикеты | markdown | HTML, скриншоты, кадры из созвонов |
| Исполнение | TDD | TDD + ponytail, property-based и мутации, browser use |
| Проверка | тесты, ruff, ty | + wemake, видео Playwright |
| Ревью | не особо верил | один проход в чистом контексте |
| Оркестрация |
Что находит ревью
| Важность | Где | Находка |
|---|---|---|
| critical | ERP, стримы | После перепривязки стрима история подключений утекала другому клиенту |
| critical | ERP, сверка | Записи с несовпадением времени пропадали из «После сверки» |
| major | ERP, смены | После переназначения смены другой промоутер проходил по чужому тесту |
Реальные баги находили первые проходы. Повторные превращались в спор о форме тестов
Процесс тот же.
Детали другие
| Этап | Весна | Сейчас |
|---|---|---|
| Планирование | plan mode, grill-me | batch-grill-me, прототипы |
| Тикеты | markdown | HTML, скриншоты, кадры из созвонов |
| Исполнение | TDD | TDD + ponytail, property-based и мутации, browser use |
| Проверка | тесты, ruff, ty | + wemake, видео Playwright |
| Ревью | не особо верил | один проход в чистом контексте |
| Оркестрация | Sandcastle, worktrees | субагенты в Codex и Claude |
Оркестратор больше
не отдельный софт
Весной
worktrees
+ Sandcastle
+ Playwright gates
Сейчас
Codex или Claude
+ субагенты
Кто поднимал руку за AO, Conductor, Orca, cmux?
Я с отдельного оркестратора ушёл.
Весь промпт
выполняй свободные тикеты. по мере исполнения забирай новые. используй субагентов
Весь процесс сегодня
- Планированиепрототипы
batch-grill-me - ТикетыHTML, скриншоты,
кадры созвонов,
журнал времени - ИсполнениеTDD, ponytail,
property-based,
мутации, browser use - Проверкаruff, ty, wemake,
видео, PostHog - Ревьюодин проход
в чистом контексте - Оркестрациясубагенты
в Codex и Claude
Кто читает код,
который пишет агент?
- AВесь
- BЧастично
- CТолько важное
- DНе читаю вообще
Два режима
Днём: работаю с агентом
Прототипирую, спорю, режу на тикеты, смотрю видео.
Ночью: агент без меня
Очередь тикетов, субагенты. Утром разгребаю: всё готово бывает редко.
Ночная смена в цифрах
~8
тикетов за ночь, от 4 до 16
~4300
строк кода
~2300
строк тестов
Медиана по 13 ночным прогонам в двух проектах, август–сентябрь. Без сгенерированных файлов и документации
А утром это всё надо принять
Кто смотрит тред,
пока агент работает?
- AСмотрю всё время
- BПоглядываю
- CУхожу
- DОставлял на ночь
Узкое место
теперь я
Почему я
- Приёмка: каждый тикет кто-то должен посмотреть и принять
- Переключение между проектами: четыре проекта в день
- Удержать всё в голове: решения, клиенты, что где сломано
- Агенты ошибаются, и ошибки тупые. Приходится погружаться самому
Результат часто кривой
- Смотрювидео, скриншот, живой экран
- Прошу поправитьсловами, иногда со скриншотом
- Всё ещё кривовторой, третий заход
- Открываю IDEдебаг, брейкпоинты
- Нахожу бардаки правлю сам
Ночью агент работает без меня. Утром я разгребаю: всё готово бывает редко.
Работы всё ещё полно. Полной автоматизации нет.
Утро после ночной смены. Тесты зелёные
Журнал замечаний
| Дата | Объект | Замечание |
|---|---|---|
| 07.05 | админка, утро после ночи | «Навигация сломана. Основной функции админки, начислять поинты, нет» |
| 13.08 | ERP | Tailwind поставили, но не подключили. Весь интерфейс без стилей, тесты зелёные |
| 16.08 | ERP, форма входа | «Обычный HTML form. С хера ли так вышло? Мы же чётко прописали стек. Это полный фейл» |
| 24.08 | RAG-бот | «Это тупой хардкод, так делать нельзя» |
| 13.09 | kivuno | app.css на 1857 строк, лимиты линтера для него выключены |
Из моих тредов. После первой ночи на админке пришлось заводить ещё один PRD на 7 тикетов
Подгонка под вопрос
if count.prefix == 'АФ' and {'АФ56', 'АФ69'} <= outside_codes:
...
Рядом регулярка заменяла любое число перед словом «магазин» на 80. Эвал зелёный, бот «умнеет».
«Это тупой код, его не должно быть. Это хардкод, подгонка»
Нашёл, когда сам полез в код. Механику удалили целиком, точечный эвал после этого упал до 4 из 11. Честная цифра
Результат мимо return
# было: тул пишет результат в deps
@search_agent.tool
def record_computation(ctx, finding: str) -> str:
ctx.deps.computations.append(finding)
return 'записано'
with suppress(UsageLimitExceeded):
await search_agent.run(q, deps=deps)
# ...всё уже лежит где-то в deps
# стало: результат это output агента
class SearchFindings(BaseModel):
document_ids: list[str] = []
findings: list[Finding] = []
search_agent = Agent(MODEL, deps_type=Deps,
output_type=[str, SearchFindings])
run = await search_agent.run(q, deps=deps)
return run.output
«Передавать результат как аргумент, вместо того чтобы возвращать, это ОЧЕНЬ кривой дизайн»
pydantic-ai, RAG-бот. Антипаттерн агент внёс днём, я нашёл его ночью, читая код. Три коммита и ADR
Ещё одна
проблема
Кто мерил свой сетап
эвалами?
- AМерил
- BСобираюсь
- CНет
Я тоже нет.
Ещё одна проблема
Свой сетап тяжело эвалить
Про LLM-продукты я давно говорю: без эвалов вы ничего не знаете. Свой сетап я эвалами не мерил.
| идея | один тикет, один коммит, разные скиллы. Треды, разложенные по типам задач |
И последний вопрос
А нужно ли это вообще?
146
минут у пяти людей в среднем
62
минуты у роя агентов, половина на проверки
15
минут внимания человека понадобилось рою
«Я не ревьюю код агентов. Я измеряю»Роберт Мартин, эксперимент John Henry: 6 агентов, 622 коммита, 13 тыс. строк, код не читал
Весь мой процесс нужен человеку, который читает код.
Но пока без человека задача до конца не доходит.
Код больше
не узкое место
Теперь это контекст и ваше внимание
- Связь
- @x3gxu · azamat.ai
Вопросы
Все материалы
Презентация и пример проекта