Разработчик построил рабочее приложение для поддержки своей работы — около 150 000 строк кода, из которых примерно 120 тысяч на Rust, остальное на TypeScript и Terraform. Весь код написали AI-агенты, в основном Claude Code и иногда Cursor. Разработчик практически не читал и не ревьювил сгенерированное. Через какое-то время он заметил, что слой доступа к данным раздулся до одного файла длиной 17 155 строк — внутри бесконечно повторялась одна и та же настройка HTTP-запросов, JSON-кодирование и декодирование. Никакого выделения дублирующегося кода или внутреннего языка запросов там не было.
Он решил проверить, даст ли классический рефакторинг экономию токенов при внесении будущих изменений. Для этого поставили эксперимент: сначала замерили базовую стоимость — попросили свежего под-агента добавить в Firestore слой новый трейт ItemWatchStore и посчитали входные токены. Получилось 159 564 входных токенов. Дальше построили план рефакторинга по каталогу Мартина Фаулера и пошагово его применяли: выделили FirestoreClient (extract class), общие функции extract_doc_id и new_link, построили FieldsBuilder, вынесли трейты и конкретные реализации FakeStore и FirestoreStore в отдельные модули. После каждого шага тот же под-агент заново выполнял ровно то же самое задание, а его результат отбрасывался. Замеряли входные и выходные токены, время и количество строк в самом большом файле слоя.
К финальному шагу входные токены упали до 27 360 — сократились на 83%. Выходные токены почти не менялись и оставались на уровне 1 700–2 400. Общий объём кода слоя доступа к данным практически не уменьшился, он просто распределился по множеству маленьких файлов. Экономия получилась не за счёт общего размера, а за счёт того, что агент научился читать только нужные подмножества, а не перелопачивать весь гигантский модуль. В деньгах на модели Sonnet 5 одно изменение сэкономило около 40 центов, но автор справедливо замечает, что влияние на отладку и более сложные фичи может быть гораздо значительнее.
Сам рефакторинг тоже стоил токенов — верхняя оценка пять миллионов, но точный подсчёт не вёлся. Интересно, что Claude сам по себе плохо справлялся с планированием и механикой рефакторинга: план пришлось составлять человеку, а реализацию местами доделывать Python-скриптами с grep и sed. Эксперимент шёл около восьми часов, часто на медленном гостиничном Wi-Fi, и пострадал от раздувшегося кэша cargo. Главный вывод — системный рефакторинг даже полностью сгенерированной кодовой базы резко снижает стоимость будущей разработки, но пока требует активного участия человека.