Как разбивать большие задачи на более мелкие для удобства разработки и ревью
Что проверяют
Умеете ли вы доставлять большую фичу маленькими безопасными шагами, чтобы ревьюер реально прочитал изменение, а main оставался рабочим. Следом часто просят пример из практики и спрашивают, как вливать незаконченную функциональность.
Как отвечать
Покажите принцип и подкрепите его своим примером: какая была задача, на сколько частей разбили, что это дало ревью.
- вертикальные срезы: каждая часть проходит через все слои и делает что-то проверяемое. Не «сначала все модели, потом все вьюхи», а «эндпоинт для одного сценария вместе с тестами»;
- подготовительный рефакторинг отдельно: переименования, вынос функций, смена структуры модулей идут своим PR без изменения поведения. Такой PR проверяют быстро, потому что тесты не меняются;
- форматирование отдельно: прогон
ruff formatилиblack, смешанный с логикой, прячет реальные изменения в шуме; - миграции по шагам: схема меняется по схеме expand/contract. Добавить колонку, выкатить код, который пишет в обе, заполнить данные, переключить чтение, удалить старое. Миграции Alembic или Django при этом живут в своих PR и откатываются независимо;
- незаконченное за флагом: код вливается выключенным feature flag и включается, когда готова вся цепочка. Другой вариант: stacked PR, где каждый следующий строится на предыдущем.
Ориентир по размеру: изменение, которое ревьюер читает за один подход, обычно не больше нескольких сотен строк. Каждый PR должен проходить CI сам по себе, с тестами на то, что он добавляет, и с описанием, что входит в эту часть, а что придёт следующим.
Если в команде так не работали, скажите честно и покажите, как разбили бы свою последнюю крупную задачу сейчас.
Где спотыкаются
Режут по слоям. Получается PR с моделями, которые никто не вызывает, и проверить их правильность до следующей части невозможно.
Отвечают терминами из менеджмента: SMART, MoSCoW, эпики и истории. Это про планирование бэклога, а вопрос о том, как устроить изменения в коде.
Дробят формально: пять PR, которые по отдельности ломают сборку и имеют смысл только вместе. Ревью от этого не легче, а откатить одну часть нельзя.