Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Процесс и workflow
process_workflow

Процесс и workflow

PR templates, branching strategy, approval flow, SLA

Процесс и workflow Code Review

Процесс ревью — это то, что происходит с PR, когда автор ушёл обедать. Если ответ «ничего», процесса нет, сколько бы документов о нём ни было написано.

#Результат урока

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

#1. Размер PR — параметр номер один

Из всех характеристик процесса размер PR влияет на качество ревью сильнее остальных, и он же единственный, который полностью в руках автора.

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

РазмерЧто реально происходит
< 100 строкЧитается целиком, замечания по существу
100–300Основное вычитывается, детали местами пропускаются
300–600Ревьюер держит в голове не всё, находит только явное
> 600Формальное одобрение либо ревью на три часа с раздражением

Практический предел — около 400 строк содержательных изменений, не считая сгенерированного кода, файлов блокировки и переносов. Это не догма, а точка, после которой ценность ревью резко падает.

Работающие способы разбить большой PR:

  • По слоям: миграция и модель → сервисный слой → API → интерфейс. Каждый PR самодостаточен и мержится сам.
  • Инфраструктура отдельно от поведения: сначала «добавлен клиент платёжного шлюза без использования», потом «оплата через шлюз».
  • За флагом функциональности: код едет в основную ветку небольшими частями, выключенный, включается отдельным изменением.
  • Рефакторинг отдельно от логики — по причинам из темы Возможности рефакторинга.

Формулировка для ревьюера, у которого нет власти отклонить: «PR слишком велик, чтобы я мог за него отвечать. Могу посмотреть слой API, но за остальное поручиться не смогу». Это честно и обычно приводит к разбиению.

Проверьте себя. Постройте распределение размеров PR за последние три месяца. Какая доля больше 400 строк?

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

#2. Кто ревьюит: правило вместо просьбы

«Кто-нибудь посмотрите» — не назначение. PR без конкретного адресата ждёт дольше всех: каждый видит его и думает, что посмотрит другой.

Три работающие схемы:

Владельцы кода. Файл CODEOWNERS сопоставляет пути и людей, назначение происходит автоматически.

# .github/CODEOWNERS * @team/backend /billing/ @team/billing @alice /infra/ @team/platform /app/domains/auth/ @team/security *.sql @team/dba

Плюс: гарантия, что критичный код смотрит компетентный человек. Минус: концентрация знаний — если billing всегда смотрит Alice, никто больше в нём не разбирается. Лечится дополнительным случайным ревьюером сверх владельца.

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

Случайное назначение из пула. Хорошо распределяет знания, плохо работает без выравнивания нагрузки: без него всё уходит к тем, кто быстрее отвечает.

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

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

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

#3. SLA: не «быстро», а «известно когда»

Ценность SLA не в скорости, а в предсказуемости. Автор, знающий, что ответ придёт в течение четырёх часов, спокойно берётся за следующую задачу. Автор, не знающий ничего, проверяет PR каждые двадцать минут и не начинает новое.

Разумные значения:

СобытиеСрок
Первый ответ ревьюера4 рабочих часа
Повторный ответ после правок2 рабочих часа
Ответ автора на замечания1 рабочий день
Мерж небольшого PR1 рабочий день
Горячее исправление30 минут, поиск ревьюера — активный

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

Что нужно, чтобы SLA соблюдался:

  • Выделенные окна. Ревью в начале дня и после обеда, а не «когда освободится». Иначе оно всегда проигрывает своим задачам.
  • Ревью приоритетнее своего кода. Контринтуитивно, но арифметически верно: ваш PR ждёт одного человека, а вы блокируете чужой.
  • Явное «не сегодня». Если посмотреть не получится, лучше сказать сразу, чем молчать сутки.
  • Автоматическое напоминание. Бот в канале о PR, ждущих больше SLA. Без измерения SLA превращается в пожелание.

Проверьте себя. Измерьте медианное время до первого ответа за месяц. И отдельно — время повторного ответа после правок.

Частая ошибка. Вводить SLA без измерения. Необъявленный срок и неизмеряемый срок одинаково не работают.

#4. Описание PR как способ сократить раунды

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

Полезное описание отвечает на четыре вопроса и занимает пять строк:

## Что и зачем Заказы от 5000 ₽ облагались доставкой (INC-820). Причина: сравнение `>` вместо `>=` на границе порога. ## Как проверить Заказ ровно на 5000 ₽ → доставка 0 ₽. Тест на границу добавлен. ## Риски и откат Влияет на суммы в счетах. Миграций нет, откат безопасен. ## На что смотреть внимательно Проверьте, пожалуйста, границу 4999/5000/5001 — я мог упустить случай с частичным возвратом.

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

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

Разумное правило: PR без описания не берут в ревью. Не как наказание — просто без контекста ревьюер проверяет код, а не решение.

Проверьте себя. Откройте пять последних PR. По скольким понятно, зачем они, без чтения диффа?

Частая ошибка. Шаблон на страницу. Чем он длиннее, тем формальнее заполняется.

#5. Что блокирует мердж

Список должен быть коротким, явным и одинаковым для всех. Всё, что в него не входит, мержу не мешает.

Разумный минимум: CI зелёный; одно одобрение (два — для платежей, безопасности, миграций); нет незакрытых blocker; ветка обновлена относительно основной.

Чего в списке быть не должно: закрытых nit (они не блокируют по определению), одобрения тимлида (иначе решение перестаёт быть техническим), «всех ревьюеров» — достаточно требуемых.

Отдельно нужен явный механизм обхода для инцидентов: метка с обязательным обоснованием и последующим разбором. Без него в первый же серьёзный инцидент правила просто нарушат, и после этого они перестанут работать вообще.

Проверьте себя. Совпадает ли список обязательных проверок в настройках репозитория с тем, что команда считает обязательным?

Частая ошибка. Требовать закрытия всех комментариев для мержа. Это делает nit блокирующим вопреки его смыслу.

#6. Разбор: изменения в процессе после разбора инцидента

Команда из девяти человек. Медианное время до мержа — четыре дня, участились горячие исправления. На разборе собрали цифры:

Медиана размера PR 680 строк Медиана времени до первого ответа 19 часов Медиана времени повторного ответа 22 часа Среднее число раундов 3.4 PR без описания 61 % Доля ревью на одного человека (лид) 58 % Обязательных одобрений 2

Тимлид предложил документ «Регламент code review» на четыре страницы: обязательное описание, чек-лист из двенадцати пунктов, требование ревьюить в день поступления, ограничение PR тремястами строк, три обязательных одобрения для критичных модулей.

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

Три обязательных одобрения при том, что 58 % ревью уже делает один человек, увеличат ожидание, а не качество. Узкое место — не количество проверяющих, а их доступность.

Требование «ревьюить в день поступления» без выделенных окон и без измерения — пожелание. Оно уже фактически существует и не выполняется; повторение его в документе ничего не изменит.

Чек-лист из двенадцати пунктов будет проставляться не читая. Ключевой показатель — 61 % PR без описания — говорит, что проблема не в отсутствии формы, а в том, что заполнение не даёт автору выгоды.

И самое главное: медиана 680 строк не лечится строчкой в регламенте. Разбивать PR надо на этапе планирования задачи, а это вопрос декомпозиции в бэклоге, а не правил ревью.

Что в цифрах пропущено: повторный ответ (22 часа) медленнее первого (19 часов). При 3.4 раундах это и даёт четыре дня. Самый дешёвый выигрыш — здесь.

Комментарии к предложению:

REGULATION.md целиком · blocker Регламент на четыре страницы никто не будет читать, а исполнение не измеряется. Предлагаю вместо документа изменить три вещи в настройках репозитория — их нельзя не заметить и нельзя обойти незаметно.

Три обязательных одобрения · blocker 58 % ревью делает один человек. Добавление третьего обязательного одобрения увеличит ожидание примерно вдвое, а найдёт единицы дополнительных проблем. Узкое место — доступность ревьюеров, а не их количество. Предлагаю обратное: одно одобрение по умолчанию, два — только для /billing и /auth через CODEOWNERS.

Лимит 300 строк · major Правильно по сути, но одним правилом не достигается: медиана 680 означает, что задачи так нарезаются в бэклоге. Нужна договорённость на планировании: задача, не разбиваемая на PR до 400 строк, декомпозируется. Иначе получим формальное дробление коммитов без реального упрощения ревью.

Чек-лист из 12 пунктов · major Будет проставляться не читая. При 61 % PR без описания вообще нужно снизить порог входа, а не поднять: три вопроса вместо двенадцати галочек. И добавить раздел «на что смотреть внимательно» — он реально экономит раунды.

Пропущено · major Повторный ответ (22 ч) медленнее первого (19 ч) — при 3.4 раундах именно это даёт четыре дня. Предлагаю отдельный SLA на повторное ревью в 2 часа и уведомление ревьюеру о правках. Это самое дешёвое улучшение из всех.

Пропущено · question Кто назначается ревьюером сейчас? Судя по 58 %, назначения нет — берёт тот, кто откликнулся, и это всегда один человек. CODEOWNERS плюс случайный второй решил бы и распределение нагрузки, и распространение знаний.

Чем закончилось. Регламент заменили на изменения, которые видно в интерфейсе:

Настройки репозитория: • одно обязательное одобрение (два — /billing, /auth, миграции) • CODEOWNERS: владелец по пути + один случайный ревьюер • обязательные проверки CI, обход — метка с обоснованием Шаблон PR: 4 раздела, включая «на что смотреть внимательно» Договорённости (в CONVENTIONS.md, 12 строк): • первый ответ — 4 ч, повторный — 2 ч • окна ревью: 10:00 и 15:00 • задача, не разбиваемая на PR ≤ 400 строк, декомпозируется на планировании Бот: напоминание о PR, ждущих дольше SLA

Через два месяца: медиана размера PR — 240 строк, время до первого ответа — 3 часа, повторного — 1 час, раундов — 2.1, время до мержа — 6 часов вместо четырёх дней. Доля ревью у тимлида упала до 22 %.

Самое интересное: качество ревью выросло, хотя обязательных одобрений стало меньше. Причина в размере PR — на 240 строках ревьюер действительно читает всё.

#7. Внедрите у себя

  • Измерьте четыре числа: медиана размера PR, время до первого ответа, время повторного ответа, число раундов. Без них любые изменения — угадывание.
  • Завести CODEOWNERS, если его нет. Полчаса работы, снимает вопрос «кто посмотрит».
  • Ввести SLA на повторное ревью отдельно от первого. Самое дешёвое улучшение скорости.
  • Добавить в шаблон PR раздел «на что смотреть внимательно». Одна строка, экономит раунды.

#8. Чек-лист

РАЗМЕР медиана ≤ 400 строк; договорённость действует с планирования НАЗНАЧЕНИЕ автоматическое (CODEOWNERS / дежурство), не «кто-нибудь посмотрите» НАГРУЗКА распределена; разброс между людьми не больше трёх раз ОДОБРЕНИЯ одно по умолчанию; два — только для чувствительных путей SLA первый ответ и повторный заданы отдельно; повторный быстрее ИЗМЕРЕНИЕ SLA измеряется, о нарушениях напоминает бот ОПИСАНИЕ 3–4 раздела, включая «на что смотреть внимательно» БЛОКИРОВКА список короткий и явный; nit не блокирует ОБХОД есть механизм для инцидентов с обоснованием и разбором НАСТРОЙКИ правила живут в конфигурации репозитория, а не в регламенте

#Что дальше

Как это настраивается технически — Инструменты и интеграции. Что и как измерять — Метрики процесса. Особенности при распределённой команде — Remote и асинхронность.


Ключевая мысль: правило, живущее в настройках репозитория, работает; правило, живущее в регламенте, — нет. Разница в том, что первое нельзя не заметить.

Далее: Инструменты и интеграции