Инженерная практика
Trunk-based: тест с множественным выбором
Шесть вопросов сквозь весь юнит. Каждый отражает решение, которое вы принимаете в реальном споре о процессе, — это не определение для пересказа, а компромисс, который нужно защитить, когда кто-то говорит «trunk-based не масштабируется».
Убедитесь, что связываете стержень юнита: дрейф задаёт стоимость merge, short-lived branch её ограничивают, флаги отделяют deploy от release, зелёный CI-гейт делает общий trunk безопасным, merge queue держит его на масштабе, а очистка — то, что делает всю сделку выгодной.
Один инженер вливает фичу на 2000 строк в тот же час, когда форкнулся; другой вливает правку на 50 строк из трёхнедельной ветки. Какой merge дороже и почему?
Команда прочитала «trunk-based development», отключила branch protection и коммитит прямо в main. Через неделю trunk красный дважды в день, а ещё утёк секрет. В чём была настоящая ошибка?
Инженер настаивает, что не может вливаться ежедневно: переписывание checkout не готово, «нельзя положить половину флоу в trunk». Что снимает возражение?
Нужно заменить ORM в непрерывно деплоящемся сервисе; миграция займёт шесть недель. Как сделать это по trunk-based?
При 50 PR/день на одном trunk каждый PR зелёный до merge, но trunk всё равно ломается несколько раз в неделю. Какое решение верное?
Через два года у trunk-based команды 400 флагов, флаг «new checkout» на 100% уже год со старым путём в else, и инцидент от двух флагов, чью комбинацию никто не пробовал. В чём корень провала?
Стержень юнита — единая дисциплинированная система, а не трюк с ветками. Дрейф задаёт стоимость merge, поэтому short-lived branch (три или меньше, исчезают за день) её ограничивают; feature flag отделяют deploy от release, так что незавершённая работа едет в trunk dark, а большие рефакторинги используют branch by abstraction; быстрый блокирующий зелёный гейт делает общий trunk безопасным, а merge queue держит его зелёным на масштабе; и очистка — удалить ветку при merge, флаг при полной раскатке — не даёт branch debt вернуться как 2^N flag debt. Внедрите одну модель веток — получите режимы отказа; внедрите всю систему — и цифры DORA приходят следом.