Files
dev-skills/decisions/34-throughput-vs-depth.md
T
av bf6a173115 журнал решений: разложен по теме на файл, метки решений стали номерами
- DECISIONS.md (4040 строк, 65 тем) → decisions/, файл на тему плюс указатель;
- буквенные метки решений заменены сквозными Р1–Р234, следствия получили
  префикс С при прежних номерах: схема букв выродилась до пятибуквенных и
  сломалась — `АЕАКЛ` была занята и темой 53, и темой 65;
- 42 перекрёстные ссылки переписаны под новые номера и стали живыми; где номер
  означал тему, а слово стояло «решение», формулировка исправлена.
2026-08-13 12:40:56 +03:00

8.5 KiB
Raw Blame History

34. Пропускная способность против глубины: тяжёлые проходы уехали в верхнюю ступень (2026-08-06)

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

Р137. adversary и ops переехали в wide, и это решение по цене, а не по ценности. Стадия осталась самой урожайной за всю историю замеров — пять из семи выживших находок дозапуска и единственная находка про молчаливый старт отката. Но её ценность оплачивается на каждой задаче, а получается на немногих: оракул добывается запуском, запуск — это машина, цепочка и часы. Ступень, которая раньше была умолчанием, стала исключением на 5–10% задач.

Р138. Заведён review-basics — мелкая осадка двух тяжёлых проходов, без единого запуска. Он стоит только в standard и берёт ту половину вопросов, на которые отвечают чтением: таймаут и отказ соседа, идемпотентность и одновременная запись, остановка на середине, частичный откат при двух версиях, наблюдаемость и тишина, очевидный рост объёма — плюс два вопроса архитектурного: второй способ мимо единой точки (грепом, не картой) и что отсюда удалить. Потолок 4 находки, машину не держит, ничего не меряет.

Отдельная его обязанность — вопрос 4, частичный откат. Без него правило «миграция схемы не поднимает ступень» рассыпалось бы: раньше миграцию разбирал ops, а он теперь в wide. Проход заведён не «до кучи», а затем, чтобы у standard остался хоть один взгляд на ось времени.

Модель у него верхняя, opus, и это не противоречит слову «средний»: усилие режется входом и потолком, а не моделью. Дешёвая модель на проходе с мнением платит триажем — это записанный замер, и отменять его без нового замера нельзя.

Р139. Объём и незнакомость изменения вошли в правило выбора ступени. Раньше ступень выбиралась только по классу («вводит ли новое понятие»), и правило прямо запрещало смотреть на размер. Теперь вопросов два: крупное или незнакомое (трогает несколько узлов, переносит ответственность, форму решения нащупывают по ходу) → wide; мелкое (один узел, форма очевидна заранее, откат — обратная правка) → quick; всё остальное → standard. Причина смены: цена разбирательства растёт именно с объёмом и неизвестностью, а не с классом правила.

Отрицательный тест quick сохранил прежнюю мудрость в новой рамке: что после мерджа не откатывается обратной правкой — не quick, каким бы маленьким ни был дифф. Три строки миграции идут в standard.

Р140. Спорный случай решается вниз, и асимметрия объяснена ценой. Между standard и wide — в пользу standard: ошибка сюда стоит находки на следующей задаче, ошибка обратно стоит трёх тяжёлых проходов на каждой задаче, выбранной неверно. Между quick и standard — тоже в пользу standard, но по другой причине: там разница в один дешёвый проход, зато единственный, кто на нижних ступенях смотрит на отказы.

Доля wide 5–10% записана как проверка правила, а не пожелание: если ступень уходит каждой третьей задаче, её выбирают по ощущению важности.

Р141. Сделка записана вместе с механизмом обратной связи, иначе это тихая потеря качества. На quick и standard не проверяется ничего, что требует запуска: построенный путь, эксперимент против драйвера, любое число. Это самая крупная граница покрытия конвейера, и она обязана идти строкой в каждом таком прогоне поимённо. Обратная связь — журнал дефектов docs/review.md: класс, который ловят только меряющие проходы, начал всплывать после мерджа — значит ступень выбирают слишком низко. Плюс сам basics обязан сигналить строкой, если видит, что ступень занижена: он единственный, кто смотрит на дифф целиком на нижних ступенях.

Что из этого следует

С130. Стоимость прохода — это его цена, умноженная на частоту, и вторая переменная важнее. Тема 33 убрала самый дорогой проход, тема 34 — самый частый. Второе дало больше, хотя снятый проход был дешевле каждого отдельного reimpl.

С131. Урожайность прохода не отвечает на вопрос, где ему стоять. Меряющая пара осталась самой ценной и всё равно уехала вверх: ценность оправдывает существование прохода, но не его частоту.

С132. Замена тяжёлого прохода лёгким записывается как сужение, а не как эквивалент. basics задаёт те же вопросы чтением, и его ответы поэтому слабее — условия вместо оракулов. Назвать это «покрыли то же дешевле» значит соврать себе на первом же прогоне.

С133. Ступень, выбираемая по классу изменения, слепа к объёму. Правило, запрещавшее смотреть на размер, защищало от выбора по ощущению важности — и заодно отправляло трёхстрочную правку и переборку пяти узлов в один профиль. Признаков нужно два: класс отвечает за обратимость, объём — за цену разбирательства.