Если относишься к команде, которая экспериментирует с процессами

Ответ

Я работал в команде, где мы активно экспериментировали с процессами разработки. Наш фокус был на том, чтобы найти баланс между скоростью delivery и качеством кода.

Один из ключевых экспериментов — внедрение Trunk-Based Development (TBD) вместо долгоживущих feature-веток. Мы столкнулись с проблемой, что слияние больших веток занимало дни. Переход на TBD с короткоживущими ветками (максимум 1-2 дня) и обязательным запуском полного пайплайна CI/CD перед мержем в main резко сократил время интеграции.

Технически это потребовало:

  1. Усилить покрытие автотестами (unit, интеграционными).
  2. Настроить Feature Flags для контроля над новым функционалом.
    // Использование флагов для постепенного включения
    if (Feature::active('new_payment_gateway')) {
        $processor = new NewGateway();
    } else {
        $processor = new LegacyGateway();
    }
  3. Внедрить более частые, но меньшие по объёму код-ревью.

Результаты: Мы сократили цикл разработки с 3 недель до нескольких дней для средних фич, уменьшили количество конфликтов при слиянии и повысили стабильность основной ветки. Ключевым выводом стало понимание, что эксперимент удался, потому что мы чётко измеряли метрики (время от коммита до продакшена, количество инцидентов) и были готовы откатить изменения, если что-то шло не так.

Ответ 18+ 🔞

А, слушай, вот тут история про то, как мы на работе с процессами баловались. Ну, понимаешь, классика: хочется и быстро, и чтобы код не разваливался, как карточный домик. Ёпта, вечный спор, ага.

Один из наших главных экспериментов — это когда мы на Trunk-Based Development (TBD) перешли, а эти ваши долгоживущие feature-ветки нахуй послали. А то раньше было: заведут ветку на месяц, а потом её мержить — это ёперный театр на два дня, все друг другу мозги выносят. Мы сказали: хватит это терпеть! Сделали по-новому: ветка живёт день-два, не больше, и перед тем как в main влиться, весь пайплайн CI/CD должен пройти без сучка без задоринки. И знаешь что? Время на интеграцию просто охудело в хорошем смысле.

Технически, конечно, пришлось попотеть:

  1. Автотесты написать овердохуища. И юниты, и интеграционные. Без этого — доверия ебать ноль, в main такой код не пустишь.
  2. Feature Flags настроить, чтобы новую фичу можно было припрятать, как хитрая жопа.
    // Использование флагов для постепенного включения
    if (Feature::active('new_payment_gateway')) {
        $processor = new NewGateway();
    } else {
        $processor = new LegacyGateway();
    }

    Классика, ничего не трогаем, пока не протестили.

  3. И код-ревью делать чаще, но по чуть-чуть. А то раньше на ревью двухнедельной ветки смотреть — терпения ноль ебать, глаза сломаешь.

И что в итоге? Цикл разработки с трёх недель съехал до пары дней для средней фичи. Конфликтов при слиянии стало как грязи — то есть почти нет. И основная ветка перестала трястись, как мартышлюшка в лихорадке. Главный вывод? Эксперимент удался, потому что мы не на глазок работали, а всё меряли: сколько от коммита до продакшена, сколько потом косяков вылезает. И были готовы в любой момент всё откатить, если пойдёт по пизде. А так — ни хуя себе, вышло годно.