Фича-команды (Feature Teams) — это организационный подход, где команды формируются вокруг фичей/продуктов, а не компонентов или технологий.

Branch стратегия

Trunk Based Development (TBD) c короткоживущими ветками: Плюсы:

  • Меньше конфликтов при слиянии.
  • Быстрая доставка до продакшена.
  • Проще делать багфиксы так как 1 ветка.
  • Повышается осознанность всей команды: все работают с актуальным кодом.
  • Упрощается CI/CD: pipeline почти всегда на свежем коде. Минусы/ограничения:
  • Требует зрелого CI (юнит, e2e, линтеры, security и т.д.).
  • Требует высокой дисциплины: частые коммиты, green build, фичафлаги.
  • Требует стратегий изоляции (структурной или рантайм).

Нужны quality gate(s) перед интеграцией:

  • unit tests / integration tests (лучше вторые)
  • static code analyzers
  • mandatory code review (для всех code owner согласно задетому коду)

У TBD есть недостаток - им сложно пользоваться в случае если над кодовой базой работаю параллельно. Если последовательно, проблемы нет. Для того, чтобы дать возможность работать в TBD с кодовой базой параллельно используются:

  • структурный дизайн
  • branching by abstraction technique
  • api versioning
  • фича флаги

Подробнее в TBD and feature isolation.

Процесс

Декомпозиция больших задач на мелкие — мелкие это задачи в среднем 2–4 дня на разработку. Если используются типы “фича, стори, таск”, то самая мелкая единица — таск.
У стори должно быть (must have) бизнес-велью.
У таски может быть (nice to have) бизнес-велью.
У таски должно быть (must have) наблюдаемое поведение.
Наблюдаемое поведение таски должно быть протестировано (must have). Внутренние тесты отдельно не должны поставляться.
У стори должна быть таска на e2e (must have).

Если задача не может быть так декомпозирована, она всё равно может вливаться в master согласно общему ритму (nice to have) — чтобы избежать постоянного отставания фичаветки.

Для удобства фича может быть структурно (отдельный пакет) изолирована. Часть связного кода и тестов может быть продублирована для снижения связности между “старой” и “новой” фичами. Таким образом, удаление старой фичи будет дешёвым — удаление соответствующих пакетов кода и тестов.

Если фича не обратносовместима, она должна быть логически (канареечно например) или конфигурационно (через фичафлаг, параметр) изолирована. Оба состояния должны быть протестированы.

processtrunkbasedtbd