AI CI
В агентской разработке остро проявился ещё один сдерживающий фактор, который раньше не так сильно болел - мерж-конфликты.
Сейчас на своём пет-проекте я работаю один, но нет ни одного дня, чтобы я по неосторожности не вляпался в конфликт одной сессии с другой. Обычно такое происходит по несколько раз в день.
Как так?
Поскольку среднее время итерации в моём фреймворке - около 10 минут, а ревью - 1-2 минуты, то у меня всегда в параллель едут 4-6 сессий. Плюсом к этому фреймворк настроен так, что он постоянно агрессивно рефакторит все, к чему ни прикоснётся. Спасибо тестам, это можно делать хотя бы без страха что-то сломать. В итоге 6 сессий в параллель делают правки по всему коду и, конечно, неизбежно друг с другом сталкиваются то тут, то там.
В целом, ии очень неплохо разруливает конфликты. Часто даже лучше, чем человек. Но, порой, все равно что-то может и пропустить. Поэтому лучше до конфликтов не доводить вообще.
Как быть?
Как не влипать в постоянные конфликты хотя бы с самим собой? В целом, практика известна уже 30 лет, я о ней писал кучу раз. Называется она "непрерывная интеграция", и это одна из самых непонятых практик во всей индустрии.
Чтобы не было конфликтов, в каждый момент времени все сессии должны видеть изменения других сессий в режиме реального времени. Как в Google Docs. В реальности это, конечно, недостижимо, но можно приблизиться к этому, синхронизируя их максимально часто между собой.
По определению непрерывная интеграция - это когда разработчики пушат в мастер и пуллят оттуда не реже раза в день. В некоторых командах в некоторых случаях и на некоторых продуктах приходится повышать эту частоту до десятков раз в день. Именно поэтому практика называется НЕПРЕРЫВНАЯ интеграция. Конечно, пулл-реквесты и прочая церемония в такой ситуации идёт в сад, а ревью проводится либо в паре, либо постфактум на уже смерженном коде. Ну и требования к автотестированию, дисциплине и уровню разработчиков, конечно, соответствующие.
Сейчас на своём пет-проекте, чтобы синхронизировать работу сессий, мне приходится пушить каждую сессию где-то раз в час: после каждого готового сценария. При этом, я бы пушил и чаще, просто я начинаю упираться в квоты Яндекс облака: чтобы прогнать один сьют на полторы тысячи тестов за 10 минут, пайплайну приходится поднимать 14 раннеров и 7 виртуалок под бэк и фронт. Два пайпа в параллель - в 2 раза больше машин.
И вот один из самых интересующих меня вопросов: сколько человек реально сможет потянуть одна кодовая база в этом плане? Моё ощущение - не больше трёх.
Какие есть альтернативы?
1. Больше man-in-the-loop, меньше параллельных сессий. Это либо более короткие автономные сессии, либо длинные автономные сессии с параллельной ручной разработкой. По идее, тут выходит меньше производительность труда, но нет недостатков от множества параллельных сессий: конфликтов и сложностей с частой сменой контекста.
2. Меньше рефакторинга. Минусы понимаете сами.
3. Ещё больше машинок в пайпе и ещё больше коммитов в мастер. Это правильный подход, хоть и стоит денег.
4. Можно работать без пайпа, гоняя тесты локально. Но это менее надёжно и увеличивает длину каждой итерации ещё сильнее.
5. Можно отдавать разруливание конфликтов ии и надеяться, что он ничего при этом не упустит. Но это я вообще не рекомендую.
Зы: кто ждёт видос по фреймворку, сорян, запрокрастинировал. Занимаюсь более важными проектами сейчас.
Post #114
722