Короткий ответ
#Позиция, названная прямо
1ADK построен на кодовых агентах. Весь продукт зависит от того, что один из них грамотно выполнит анализ, и этот сайт не собирается утверждать, что их надо использовать меньше.
Довод
ИИ позволяет компании создавать программы быстрее. Понимание должно за этой скоростью поспевать. Все механизмы, которыми компании раньше наращивали понимание, — код-ревью в темпе чтения, медленное накопление привычки, сам факт того, что написание чего-то вынуждает в этом разобраться, — предполагали темп производства, которого больше нет.
Это не предостережение об ИИ. Это наблюдение о том, что узкое место сдвинулось. Раньше ограничением было то, как быстро можно написать программу; для многих компаний теперь ограничение в том, как быстро хоть кто-то может выяснить, что было написано.
#Что здесь действительно другое
По сравнению с обычным легаси у этого случая необычная и слегка дезориентирующая форма.
| Обычное легаси | Построенное ИИ | |
|---|---|---|
| Документация | Есть и устарела | Часто обширна, сгенерирована и никем не проверена |
| Есть у кого спросить | Они ушли | Они здесь и тоже это не читали |
| Качество кода | Обычно видимая жалоба | Нередко хорошее и не имеет отношения к делу |
| Однородность | Однородно по-своему странно | Три решения одной задачи в трёх местах, каждое разумно локально |
| Возраст | Годы | Месяцы, иногда недели |
| Чего не хватает | Понимание распалось | Понимание не создавалось |
Последняя строка и меняет то, что вы делаете. Нет ни устаревшего документа, который надо поправить, ни ушедшего эксперта, на которого можно свалить. Есть просто система, и вопрос о том, что в ней есть, никто никогда не задавал в форме, дающей долговечный ответ.
#Как это проявляется
Обычно не кризисом. Чередой мелких моментов, где обычный вопрос оказывается неожиданно трудным.
- Кто-то спрашивает, от чего зависит продукт, и честный ответ занимает день.
- Новый разработчик спрашивает, почему одно и то же сделано тремя способами, и никто не знает.
- Находится компонент, о заказе которого никто не помнит.
- Сгенерированная документация существует, хорошо читается и противоречит коду там, где кто-то случайно заглянул.
- Изменение в одном месте ломает что-то в другом без видимой связи.
- Кто-то спрашивает, «что мы выпустили в прошлом месяце», и ответом оказывается список пул-реквестов, а не описание.
Ничто из этого не инцидент. Вместе это форма компании, у которой есть программа в продакшене и нет технической памяти о ней.
#Что сделать первым
-
Получить явную опись
Какие есть компоненты, для чего каждый, что от чего зависит. Выведено из системы, а не из чьих-то воспоминаний, — потому что в этой ситуации воспоминания необычно тонки.
-
Отделить прочитанное от выведенного
Именно это здесь и важно. Агент, объясняющий систему, выдаёт наблюдения и выводы одной и той же прозой. Настаивайте, чтобы различие фиксировалось.
Ровно для этого нужны доказательства: утверждение либо называет файл и диапазон строк, либо помечено как вывод.
-
Сверить сгенерированную документацию с системой
Там, где README, комментарий или заметка о замысле расходятся с кодом, находится место, где чья-то картина мира уже неверна. Считайте существующую документацию утверждением, которое надо испытать, а не источником.
-
Найти дублирующиеся подходы
Три реализации одной идеи — характерная подпись быстрой работы с агентом. Каждая обычно нормальна; цена в том, что изменение придётся сделать трижды, а кто-то сделает его дважды.
-
Подтвердить края
Внешние сервисы, проверка отправителя входящих вебхуков, повторы, таймауты, что происходит при сбое. Именно здесь правдоподобная реализация и правильная похожи сильнее всего.
-
Проанализировать снова после следующего рывка
При такой скорости изменений сравнение двух анализов стоит здесь больше, чем почти где-либо ещё.
#Проверки, которые стоит сделать один раз
Короткий список с высокой долей попаданий на быстро собранных системах.
Данные и деньги
- Где хранятся данные клиентов и что покидает систему? Исходящие интеграции — те, о добавлении которых никто не помнит.
- Что происходит с платежом или заказом, который провайдер так и не подтвердил? Несчастливый путь — тот, который генерируют, а не проектируют.
- Безопасно ли повторить хоть одну операцию? Повторы без идемпотентности дают дубликаты ровно в тех условиях, ради которых повторы и существуют.
Доступ и края
- Проверяет ли каждый входящий вебхук, кто его прислал?
- Какие адреса публичны и для каждого ли это было замыслом?
- Нет ли где-нибудь в репозитории или его истории учётных данных?
Эксплуатация
- Что работает по расписанию и что делает каждое из этого? У работы по расписанию чаще всего вообще нет владельца.
- Может ли выкатить это тот, кто это не строил?
- Резервную копию действительно восстанавливали, а не просто настроили?
Полный чек-лист продакшена — длинная версия, устроенная как то, что стоит пройти до того, как собранная так система примет живой трафик.
#Осознанная работа с агентами
Ничто из сказанного не призывает замедлиться. Оно призывает к одной привычке: всякий раз, когда агент производит существенную часть системы, пусть что-нибудь выведет описание того, что теперь есть, и сохранит его.
Сделанное хорошо, это почти бесплатно: описание может составить тот же агент, который писал код. Нужна форма, которая отделяет наблюдение от вывода, требует называть открытые вопросы, а не заполнять их, и хранится там, где следующий анализ можно с ней сравнить. Ровно этим и является формат Evidence Package в 1ADK, и ничто не мешает команде сделать то же самое самостоятельно.
#Где 1ADK помогает, а где нет
Где помогает
- Превращает понимание агента в нечто долговечное и проверяемое.
- Отделяет прочитанное от выведенного.
- Делает форму быстро движущейся системы видимой между релизами.
- Показывает сгенерированную документацию, которая расходится с кодом.
- Записывает то, чего никто не смог подтвердить, вместо того чтобы это заполнить.
Где не помогает
- Ревью качества кода. Он фиксирует, что есть, а не хорошо ли это.
- Поиск уязвимостей. Это не сканер.
- Тестирование. Ничего не запускается.
- Суждение о том, была ли архитектура хорошей идеей.
- Решение, что объединять. Он показывает три реализации; суждение ваше.
Вопросы, которые задают на самом деле
Для владельца это неверный вопрос, и ответ слишком разный, чтобы быть полезным. Надёжно меняется не качество кода, а то, что через человеческую голову по пути в продакшен прошло куда меньше системы, — и понимание, которое раньше было побочным продуктом написания, не создалось вовсе.
Можно, и он справится хорошо. Два предела: он не может надёжно сказать, какие части объяснения он прочитал, а какие вывел, и после он не держит ничего — спросите в следующем квартале, и он начнёт с нуля, а сравнить два ответа будет нечем.
Сегодня — не обязательно. Уязвимость конкретна: вы не можете отвечать на вопросы о собственной системе, не выводя ответ заново каждый раз, и никто не скажет вам, что изменилось между двумя месяцами. Важно ли это, зависит от того, случится ли что-нибудь с вашей командой, подрядчиками или продуктом.
Это масштабируется по тому, сколько системы человек действительно прочитал. Построчное дополнение, принятое разработчиком, который читает каждую строку, близко к написанному руками. Подсистема, сгенерированная за день и слитая после беглого просмотра, — тот случай, о котором эта страница.