Чем меньше изменений в пулреквесте, тем лучше. Такой пулреквест легче ревьюить: прочитать, вникнуть и прокомментировать пулреквест на 500 строк гораздо сложнее и затратнее, чем пулреквест на 50 строк. Больше того, чем больше пулреквест, тем меньше шансов, что хоть кто‑то посмотрит его внимательно: увидел +700 −60 в Гитхабе, приуныл и отложил до завтра.

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

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

В больших и важных фичах

Кажется, что маленькие пулреквесты подходят только для маленьких фич, а большую и очень важную фичу так не сделать. На этот случай программисты придумали фича‑флаги (feature flag, feature toggle) — переключатели, которые позволяют менять поведение приложения на лету. Типа, если этот пользователь — бюрошник, показываем ему новую версию советов, если нет — старую табличную. Или если приложение запущено на стейджинге, складывай загруженные картинки в S3, если в продакшене — на диск.

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

Без переключателей

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

  1. Создаём бранч с апгрейдом Рельс.

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

  3. Бэкпортим изменения: вытаскиваем из апгрейда те изменения, что можно прямо сейчас использовать в продакшене. Например, в случае с апгрейдом Рельс — это deprecations (update_attributesupdate) и обновления зависимостей.

  4. Когда всё готово, мёржим основной пулреквест с апгрейдом. В идеале в нём будет только апгрейд Рельс и изменения в конфигурации и инишиалайзерах.

Ещё по теме

Веб‑разработка
Отправить
Поделиться
Запинить

Рекомендуем другие советы