Курс Технический менеджер продуктов · автор Stanislav Belyaev
EN RU

Размер PR

6 исходящих · 9 входящих · 15 всего связей

Карта Детали
МАСШТАБ КОМАНДЫ
Code Review УСИЛЕНО В МОНОРЕПО УСИЛЕНО В РАСПРЕДЕЛЁННЫХ КОМАНДАХ

Размер PR

Размер PR измеряется в изменённых строках кода и количестве затронутых файлов. Маленькие PR проще и быстрее ревьюить, они реже содержат ошибки и легче откатываются в случае проблем. Команды, которые системно следят за размером PR, как правило, демонстрируют более высокое качество кода и более короткий lead time.

Количество изменённых строк в одном PR. Оптимально: 200–400 строк.

КОНТЕКСТ МОНОРЕПО

УСИЛИВАЕТСЯ: Атомарные изменения (правка API + всех потребителей) часто порождают гигантские PR. Без использования Stacked PRs (как в Graphite) такие изменения становятся практически нечитаемыми, что резко снижает качество проверки.

КОНТЕКСТ РАСПРЕДЕЛЁННЫХ КОМАНД

УСИЛИВАЕТСЯ: Возникает порочный круг — разработчики, зная о задержках из-за часовых поясов, стараются впихнуть больше правок в один PR, чтобы сократить число раундов ревью. Это делает PR ещё больше, ревью — ещё дольше, а задержки — ещё критичнее.

Влияние масштаба
👤 Один / Пара (1–3)
0.2
👥 Команда (4–15)
0.5
🏢 Отдел (15–100)
0.8
🏛️ Организация (100+)
1

Давление на батчинг возрастает с масштабом.

6
Влияет на
9
Зависит от

→ Влияет на

Скорость Code Review

+100 строк → +25 мин ревью. ~50-строчные PR сливаются на 40% быстрее.

Прямое измерение
PropelCode (50K+ PRs analyzed), Adadot, Graphite
Распределённые: Большие PR + разрыв TZ = многодневные циклы ревью. Каждый уточняющий вопрос добавляет 12-24ч.
Доля неудачных деплоев (CFR)

>1,000 строк → на 70% ниже обнаружение дефектов.

<300 строк получают на 60% более тщательное ревью
SmartBear/Cisco (2,500 reviews), PropelCode, Microsoft
Время доставки (Lead Time)

Крупные PR дольше на каждой стадии.

Elite: <194 изменений кода
LinearB (6.1M PRs analyzed), PropelCode, Graphite
Средний КритическийМОНОРАСП
Очередь на мердж

Крупные изменения чаще конфликтуют с PR в очереди.

∝ площади изменений
Graphite, GitHub Engineering
Монорепо: В монорепозиториях межпроектные PR имеют намного большую площадь изменений, увеличивая вероятность конфликта в общей очереди слияния.
Распределённые: Крупные межпроектные PR от батчинга имеют выше вероятность конфликта, и каждое разрешение конфликта занимает 12-24ч.
Частота инцидентов

Необнаруженные дефекты доходят до прода. Предупреждения о размере → на 35% меньше дефектов.

Данные Microsoft
Microsoft, SmartBear/Cisco, PropelCode
Высокий КритическийМОНОРАСП
PR в неделю

Большие PR дольше писать, ревьюить и мерджить. 200-строчный PR = 1 день. 2000-строчный PR = несколько дней.

Оптимально: 200-400 строк
Graphite, LinearB, PropelCode
Монорепо: Кросс-сервисные изменения в монорепо создают массивные PR (15+ сервисов) без использования stacked PR. Массивные PR убивают throughput.
Распределённые: Батчинг для минимизации кросс-TZ раундов создает большие PR, создавая порочный круг: большой PR → больше раундов ревью → больше батчинга.

← Зависит от

Высокий КритическийМОНО
Нестабильность тестов (Flakiness)

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

Google: 2-16% вычислительных ресурсов уходит на перезапуски из-за flaky тестов
Google Research - Continuous Integration Testing
Монорепо: В монорепозиториях нестабильный тест в ЛЮБОМ потребителе общей библиотеки блокирует весь PR — это многократно усиливает стимул к батчингу изменений.
Скорость пайплайна (CI/CD)

Медленный пайплайн стимулирует группировку изменений в меньшее число крупных PR.

Быстрый CI ↔ маленькие PR
Devonair, SurferCloud, DeployFlow, Jeevisoft
Средний ВысокийРАСП
Скорость Code Review

Медленное ревью → меньше и крупнее PR, чтобы сократить число раундов.

Поведенческая адаптация
Cubic, Code Climate, FullScale
Распределённые: Разработчики понимают, что каждая отправка PR стоит целый день задержки, поэтому группируют больше изменений, чтобы минимизировать раунды.
Время выполнения тестов

Дорогие прогоны стимулируют батчинг.

N/A
Частота деплоев

Частые деплои → не нужно батчить изменения.

DORA elite
DORA Metrics - Deployment Frequency & Batch Size
Высокий КритическийРАСП
Кросс-командная координация

Разработчики группируют межкомандные изменения, чтобы минимизировать раунды координации. Обновление общего API + 15 потребителей в одном PR.

Stacked PR — это митигация
Monorepo and DevOps best practices
Распределённые: Разработчики еще агрессивнее группируют межкомандные изменения, чтобы минимизировать дорогие раунды координации через TZ.
Радиус поражения (Blast Radius)

Атомарные изменения общих библиотек + всех потребителей создают огромные PR.

Могут охватывать десятки файлов в разных сервисах
GitHub Engineering, GitLab Research
Задержка передачи (Handoff)

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

Батчинг — рациональная реакция
DevOps research on batching behavior
Overhead ревью AI-кода

154% больше PR'ы от AI-батчинга.

+154% размер PR
Faros AI, SonarSource, GitClear - Already Validated
Карта метрик — Stanislav Belyaev · Анализ — Anthropic Claude Opus 4.6 · Все данные проверены человеком