Рубрики
Uncategorized

Почему вы не должны использовать (долгоживущие) филиалы функций

Посмотрите, как филиалы функций дают ложное чувство безопасности и замедляйте вашу команду в долгосрочной перспективе. Tagged с CI, DevOps, Git, WebDev.

Разве история GIT на картинке выше неплохо работать? Вероятно, в этом репозитории есть много проблем, но одна из них, безусловно, является использованием филиалов. Давайте посмотрим, как такая плохая вещь стала такой распространенной практикой.

Когда GIT пришел, чтобы заменить SVN, это принесло смехотворно простой способ создания филиалов.

Идея Behing GIT состоит в том, чтобы облегчить вашу боль как разработчик, работающий над многими функциями за раз. Не толкать филиалы и привязывать их ко всему процессу разработки вашей команды.

Когда появились Джира и другие, такие компании, как Atlassian, начали значительно продвигать «рабочий процесс» и филиалы. Кнопка «Создать ветвь» появилась в ваших задачах Jira и Boom, появились филиалы! Atlassian рассказывает вам все об этом в Эта интересная статья Анкет Мне очень нравятся продукты Atlassian. Имейте в виду, что их основным бизнесом является управление задачами для команд разработчиков. Чем более запутался с ветвями и кодом, тем лучше.

Десять лет спустя функциональное ветвление является стандартом в большинстве команд, хотя на самом деле это не приносит никаких преимуществ в вашей прибыли: выпустить качественное программное обеспечение для производства. Не только филиалы функций обеспечивают нулевую выгоду, но и замедляют вас!

Ради ясности: в этой статье предполагается, что филиал функций будет нести всю функцию, которую вы разрабатываете, и представляет собой так называемый «долгоживущий» филиал, который продлится 1 неделя или более. Это не «нет ветвей вообще».

«Эта функция готова. Мне просто нужно это объединить! «

Я слышал это слишком много раз. Это падает в той же категории, что и утверждения, такие как «он компилирует, так что это работает».

На практике слияние приводит к «непредсказуемому синдрому высвобождения». Это может быть быстро или проявить серьезную несовместимость, которая требует фиксации в спешке. Вам либо повезло, либо … ваши сдвиги сроков и падения качества кода.

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

Ваша филиала — ваш собственный идеальный сад, и вы можете сохранить его чистым и блестящим. Но он отделен от других садов вашей команды. Чем больше вы работаете, тем сложнее примириться.

Я большой поклонник книги управления «Цель». Это показывает, как со временем люди, как правило, используют метрики, которые подчеркивают локальные оптимумы процесса, потому что это более удобно. Они просто теряют фокус на своей глобальной прибыли. Книга о производственном заводе, но аналогия стоит. Ваша филиал функций — локальный оптимум с высококачественным кодом. Это также может быть настолько далеко от основной ветви, что это бесполезно для предстоящего релиза.

Разработка на основе багажника на спасение

Как следует из названия, в разработке на основе багажника вся команда постоянно подталкивает к основной ветви или использует очень короткие (1 или 2 дня макс).

Вот Подробное описание идеи. У меня нет связи с связанным веб -сайтом. Это просто отличный обзор концепции.

Когда вы часто перемещаете свою работу к основной ветви, количество кода для слияния намного меньше, и это становится тривиальным. Хотя есть гораздо большее преимущество: вы и ваша команда можете заметить проблемы, прежде чем они станут болезненными. Возможно, ваши рефакторические столкновения с другой функцией. Или вы отступаете от конвенций проекта или архитектуры. Это реальная ценность процесса. Когда я проповедую в любом месте, я нахожусь в:

Это командная работа, которая делает или нарушает программные проекты.

Рабочие дни по коду, который никогда не попадет в релиз вовремя, — это самая большая неудача для команды.

Еще один потенциал отталкивания или часто слияния в основную ветвь заключается в том, что ваши изменения будут работать вживую в некоторых условиях. Всегда хорошо развернуть и сражаться с вашим кодом, даже в процессе развития, в некотором реальном развертывании.

«WIP» в главной ветви?

Если вы читаете до сих пор, вы, вероятно, думаете: «Это безумие, как я могу подтолкнуть свою половину работы в основную филиал, когда он, вероятно, будет развернут в производстве очень скоро!?!».

Вот общие возражения, которые можно иметь, и предварительное решение.

Как я могу разоблачить незаконченную работу?

Используйте функции переключателей. Это могут быть переменные среды или все, что вам лучше всего подходит, чтобы включить и выключать вашу работу. Конечно, сделайте его защитой, чтобы ваш половина готового кода не стал активным в производстве по ошибке.

Вся ваша команда понравится это: вы можете активировать код в любой среде в любое время, чтобы увидеть, как она выглядит или работает. Тестеры могут подготовить тестирование на ранней стадии. Владельцы продуктов могут прокомментировать вашу работу по пути. Это все в прямом эфире и легко получить доступ для всех! Если ваша работа похожа на то, что только начало, это обеспечивает небольшую ценность. Но зло лежит в деталях. Обычно требуется половина времени, чтобы завершить 90%, и еще половину, чтобы закончить оставшиеся 10%. Обмен вашей работой в этом состоянии 90% завершение всегда является хорошей идеей;)

Еще одна вещь, которая поступает бесплатно: вы можете выключить функцию в производстве, если возникнет проблема после развертывания. Через несколько дней или недель, как только функция работает гладко, просто удалите переключатель из кода.

Что если я сломаю главную ветвь для всех?

Это 2019. Если у вас нет непрерывной настройки интеграции, которая создает и запускает тесты автоматически … тогда настройте ее вчера. Если вы сломаете что -нибудь, вы будете уведомлены, прежде чем это станет проблемой для всей команды. В разработке на основе чистого багажника обратная связь появится после слияния и должна быть исправлена сразу. Если вы используете короткие ветви, слияние должно быть заблокировано вашим инструментом CI. Недоставленный филиал — это то, что должно длиться 1 или 2 дня максимум и нести последовательный кусок кода, который способствует созданию функции, которую вы создаете.

Должен быть обзор кода, прежде чем мы что -нибудь объединим!

Это действительный момент. Обзоры кода не нужны филиалы функций. Если культура обзора кода сильна в вашей команде, то она вполне может быть сделана в результате коммита в основной филиале. Рецензент остановится автору коммита и обсудит, что нужно исправить. Исправление придет в другой коммит. Еще лучше, сделайте обзор кода, прежде чем подтолкнуть коммит в первую очередь.

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

Я хочу увидеть код, который связан с задачей

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

Звучит круто, в то время как на самом деле это бесполезно! Сколько людей вы можете иметь в гибкой команде? До 5? До 10? Насколько сложно спросить парня, выполняющего задачу или историю, какие коммиты вам нужно посмотреть, чтобы глубоко погрузиться в реализацию?

Через некоторое время, как только задачи выполняются в течение долгого времени, связывание задач с кодом больше не имеет смысла. Разработчики полагаются на git вины в том, чтобы узнать, кто, на кодовом содержании, чтобы узнать, как и, надеюсь, в комментариях, чтобы узнать, почему.

Вишня на торте: зарегистрировать новые функции

Стало распространено видеть основные функции пользовательского интерфейса или обновления, выпущенные с использованием подхода «Opt In». Github, Bitbucket, Gmail, … и назвать несколько.

Концепция заключается в том, что основные изменения вносятся с использованием баннера «Привет, у нас есть эта новая функция/улучшенная панель панели/что угодно. Нажмите здесь, чтобы попробовать это ». Вы можете выбрать и обычно отказаться так же легко, если вам не нравится изменение. Это очень хорошая стратегия тестирования усыновления, поскольку она включает в себя конечных пользователей в процессе принятия решений. Если люди выбирают и остаются там, это означает, что вы улучшаете опыт. Если они выбирают и выходят … вы знаете, что изменили что -то к худшему.

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

Вывод

Если вы никогда не думали о разработке на основе багажника как о альтернативе функции «Мантра филиала», я надеюсь, что эта статья дала вам некоторую перспективу и желает попробовать ее.

Лучше всего то, что для достижения туда вам нужно будет настроить или улучшить любой другой аспект вашего процесса (CI, автоматические тесты, обзоры кода). Это хороший путь. Мы, очевидно, рекомендуем Fire CI как Инструмент непрерывной интеграции Анкет

Помните, что ваша прибыль — поставить качественное программное обеспечение перед вашими пользователями. Чем ближе ваш код от производственной среды всегда, тем лучше.

Теперь, хотя статья очень ориентирована на разработку на основе багажника, обратите внимание, что это может быть не достоверным подходом для вашей команды. Если ваша команда сильно распределена, в разных часовых поясах, есть много младших разработчиков, которым необходимо изучить конвенции и архитектуру проекта, использование более длительных филиалов функций может работать лучше.

Основная идея в этой статье:

Чем быстрее вы интегрируете различные части вместе и проверяете, что все работает, тем безопаснее вы должны иметь рабочий продукт в конце.

Хорошим общим землями является использование коротких ветвей, которые длятся 1 или 2 дня максимум и объединяют их в главную ветвь. Таким образом, вы можете управлять человеком, что попадает, и по -прежнему быстро интегрировать код.

Первоначально опубликовано в Блог Fire CI 30 марта 2019 года.

Оригинал: «https://dev.to/jpdelimat/why-you-should-not-use-feature-branches-h68»