Вице-президент по разработке в компании Zilliz Джеймс Луан рассказал, как он потратил деньги, отложенные на подарок жене, на Claude Code, чтобы создать базу данных из 2 млн строк, и его затея провалилась. Он призвал усвоить этот урок.

По словам Луана, он состоит в браке десять лет, и хотел подарить на годовщину жене сумку Dior за $600, о которой та давно мечтала.
Однако в итоге разработчик провёл все праздники, запершись в своем кабинете, купив три подписки на Claude Code по $200 каждая и пытаясь убедить LLM кросс-компилировать распределенную базу данных на C++ с 2 млн строк кода.
Луан отмечает, что выступает сопровождающим и одним из основных разработчиков Milvus, самой популярной открытой векторной базы данных с более чем 42 тыс. звёзд на GitHub. Система распределённая: узлы-прокси, узлы запросов, узлы данных и узлы индексации координируют свои действия через очереди сообщений. Область работы инженера — это уровень хранения и индексирования.
Луан несколько месяцев использовал Claude Code и был впечатлён работой ИИ. Он заполнил все недостающие функции полноценного CLI всего за $20 в токенах и в 5 раз увеличил производительность одного из наиболее часто используемых запросов за один день. «Было ощущение, что у меня есть компетентный младший инженер, который никогда не спит и не выставляет счета по часам», — отмечает он.
По словам инженера, в течение многих лет никто в команде Milvus не хотел браться за кроссплатформенную компиляцию, так как система сборки представляет собой смесь Go, C++ и Rust с годами накопленных патчей для Conan и CMake. «Запустить её на Linux было ужасно. Windows и современная macOS оказались таким кошмаром в плане сборки, что команда относилась к ним как к не к своей проблеме», — пишет Луан.
Инженер смог провести компиляцию на Windows, но с эксперимент с Linux потерпел неудачу. Когда он исправил ситуацию Linux, то же случилось с Mac, а затем и со средой GPU. «Каждое исправление приносило две новые проблемы на другой платформе, и патчи начали накапливаться. В итоге у меня получился патч из 1000 файлов и ~100 000 строк, затрагивающий конфигурации Conan, скрипты CMake, заглушки совместимости C++ и вещи, которые я не знал», — отмечает Луан.
При этом инженер постоянно напоминал Claude не предлагать «халтурных решений», а только «чистые». ИИ каждый раз соглашался, генерируя патчи, которые выглядели аккуратнее, но каждый из них ломал три другие платформы, и цикл начинался заново. В итоге в файле .claude/settings.local.json скопилось 147 правил разрешений, утверждённых вручную.
«Я потратил три месяца на тариф Max и упустил весь отпуск, и всё, что у меня осталось, — это куча команд git reset –hard», — пожаловался Луан.
Потом инженер понял, что проблема не в Claude, а в том, что он не объяснил ИИ, к чему приведёт решение задачи.
Тогда Луан начал заново.
Ограничения до кода. Не «заставлять его компилироваться на Windows». Фактические ограничения, чётко прописанные: все платформы проходят модульные тесты, CI везде работает без сбоев, никаких хаков с #ifdef для разных платформ, никаких обходных путей для неработающих зависимостей. Это самая сложная часть — она требует понимания того, как выглядит «готовый результат», а это требует тщательного обдумывания, прежде чем что-либо трогать. В случае сложной инфраструктуры большая часть работы заключается в обдумывании.
Проверяйте тесты, а не код. Я пишу тестовые примеры (или прошу Claude сгенерировать их), но я проверяю тесты, а не реализацию. Проверяет ли этот тест, что рецепт Conan корректно разрешается на ARM? Охватывает ли он конфигурацию CMake в Docker? Я могу оценить это за несколько минут. Я не могу с уверенностью проверить 10 000 строк кроссплатформенных патчей C++ за любое время.
Снизу вверх, слой за слоем. Не позволяйте Claude изменять 1000 файлов. Сначала зафиксируйте версии зависимостей. После проверки этих ограничений переходите к конфигурации CMake. После стабилизации — к коду, специфичному для платформы. Каждый слой достаточно мал, чтобы его можно было полностью проверить перед переходом к следующему.
В итоге новая работа заняла два дня, а её итогом стали несколько десятков коммитов с тестами.
Как только рабочий процесс наладился, появилось новое узкое место: в одном сеансе Claude Code, обрабатывающего код объёмом в 2 млн строк, каждая задача занимала 20-30 минут реального времени. Тогда Луан сказал жене, что ему нужен сервер с графическим процессором, а затем купил вместе с Mac Mini в дополнение к своему MacBook. В итоге у него было три машины и шесть терминалов, на каждой из которых работала независимая сессия Claude Code.
Работа строилась благодаря git worktree. Каждая сессия получала свою задачу, ветку и рабочий каталог, полностью изолированные от других. Тесты каждой ветки проходили независимо. Так, одна сессия разрешала зависимости Linux ARM Conan, другая исправляла конфигурацию CMake для macOS, а третья обрабатывала совместимость с Windows MSVC.
Луан напомнил, что Anthropic использовала 16 параллельных экземпляров Claude для создания целого компилятора C. В итоге его собственная система так и не решила задачу.
«Создание собственной инфраструктуры с помощью ИИ удивительно просто — вы знаете свою машину, свои граничные случаи, и “работает для меня” — это достижимая цель оптимизации. Создание инфраструктуры, которая работает для каждого пользователя, на каждой платформе, в любой среде, — это принципиально другое. Именно в этом разрыве по-прежнему находится инженерное дело. Для инфраструктурного программного обеспечения этот разрыв огромен. Самые сложные ошибки в нашей производственной системе — те, которые требовали отката после слияния — не были обнаружены ни одним из методов проверки кода с помощью ИИ, которые мы пробовали. Ошибки были синтаксически корректны. Проблема заключалась в неявных предположениях разработчика, невидимых в сравнении изменений и отсутствующих в окружающем коде. Поведение системы имело смысл только в том случае, если у вас была мысленная модель того, как три разных компонента должны координироваться — модель, которая существовала только в голове одного разработчика, никогда не записанная. Для этого по-прежнему требуется человек, который достаточно хорошо понимает систему, чтобы знать, какие вопросы задавать. Три плана по $200 и один потерянный отпуск были лучшей инвестицией, которую я сделал. Не потому, что они научили меня использовать ИИ. Потому что они научили меня, как не нужно делать… Частично это проблема инструментов. Но в основном это проблема людей. Такой рабочий процесс требует инженеров, которые искренне любят разбираться в том, как всё работает — людей, которые сначала напишут тест, которые получают удовлетворение от чёткого, хорошо определённого ограничения и которые не будут идти на компромиссы, чтобы “просто сделать так, чтобы всё прошло”. Такое сочетание встречается реже, чем должно быть», — пишет Луан.
Он также отметил, что готов нанять в команду Zilliz инженера, который заинтересован решениями такого рода задач.
«Оглядываясь назад, я понимаю, что это было неоптимальное распределение ресурсов. Так что за те выходные я усвоил два урока. Первый: слушайте свою жену. “Счастливая жена — счастливая жизнь” — это не просто слоган. Это принцип стабильности системы. Второй: ИИ кажется волшебным на небольших, чётко определённых задачах. Он ведёт себя совершенно иначе, когда вы направляете его на реальную распределённую инфраструктуру», — заключил Луан.
Автор: maybe_elf


