title: Статья 01 — Фреймворк прохождения интервью и работа с требованиями source: подготовлено 2026-09-18, TASK-45.41; каркас — brief.md §01; развёртка methodology.md §1–4, §7; источники — статья Яндекса (TASK-45.5), Alex Xu гл. 3 (TASK-45.38), видео Gabbard (TASK-45.9)
Статья 01: фреймворк прохождения интервью и работа с требованиями
Первая статья серии — про то, что происходит на секции до и вокруг технических знаний: как вести беседу от старта до финиша, как вытянуть требования, договориться о масштабе, вовремя нарисовать высокоуровневую схему, углубиться там, где надо, и не забыть про трейдоффы. Критерий «умею, если» из брифа: перечисляю 6 этапов с таймингом и знаю, что говорить на каждом.
Почему это отдельный — и первый — раздел. Все остальные разделы брифа (числа, хранилища, кэш, отказы…) отвечают на вопрос «что я знаю», а этот — на вопрос «как я это показываю». Секция не проверяет знания списком: она смотрит на связный рассказ, который кандидат ведёт сам. Источники сходятся в трёх взглядах: Яндекс описывает формат («кандидат — основной участник беседы»), Alex Xu — каркас из 4 шагов («важен не столько результат, сколько процесс проектирования»), Gabbard — цену вопроса («архитектурная секция решает, какой уровень оффера дадут»). Формула одна: руль у кандидата.
Контекст нашей секции (Yandex Codenv, этап 2): ~60 минут, крупноблочная схема сервиса уровня «инстаграм/твиттер», отказоустойчивость — заявленный фокус.
1. Почему секция устроена как диалог, а не как викторина
Задание намеренно размытое: «спроектируйте твиттер». Правильного ответа не существует — за час никто не проектирует систему, которую строили тысячи инженеров годами. Gabbard формулирует честнее всех: между несколькими хорошими решениями выбирают трейдоффами, а сама секция проверяет «способность делать устойчивый прогресс через неопределённость». Отсюда три следствия, которые определяют всё поведение:
- Молчать — проигрыш. Интервьюер играет вторую скрипку и перехватывает инициативу только в крайних случаях. Если вопросы «и что дальше?» тянем от него — это минус независимо от качества схемы (кейс Gabbard: панель голосовала «берём», директор зарубил — «8 лет опыта и mindset "I don't know what's next"»). Полезная перенастройка из его же видео: относиться к секции как к tech talk, где мы объясняем коллеге, как будет устроена система.
- Спрашивать — норма. Задача сформулирована свободно намеренно: детали нужно вытащить вопросами, а не домысливать молча. «Один из самых важных навыков инженера — умение задавать правильные вопросы» (Сюй). Быстрый ответ без обдумывания — плохой знак: «не будьте как Джимми».
- Нехватка данных — норма. «Выдвигать обоснованные гипотезы можно и нужно» (Яндекс). Числа на секции выдуманы — и это нормально: проверяется не психометрия, а метод. Ошибка в 2 раза — не провал (мало серверов — докупим, много — пригодится на росте), ошибка в порядок величины — уже да.
Что при этом оценивается (сводно из трёх источников): формализация требований до любой схемы; обоснованность выборов — свойства и гарантии, а не названия; минимальная сложность («система должна быть минимально сложной и дешёвой в разработке и эксплуатации»); умение считать нагрузку; продуманность отказов и эксплуатации; поверх всего — ясная, аргументированная коммуникация. Каждый пункт ниже «прибит» к конкретному этапу каркаса.
2. Каркас: 6 этапов с таймингом
Статья Яндекса задаёт план секции пятью блоками (+доп. вопросы); наш фреймворк — те же этапы с бюджетом на 60 минут (тайминг — наш, структура — из первоисточника):
| # | Этап | Что происходит | Тайминг |
|---|---|---|---|
| 1 | Требования | Функциональные и нефункциональные требования, числа-гипотезы, минус-объём; фиксируем на доске | 8 мин |
| 2 | Потоки и API | Сущности, 3–5 сигнатур, control plane vs data plane | 7 мин |
| 3 | Крупноблочная схема | Каркас из 5–8 блоков, путь горячего запроса | 5 мин |
| 4 | Детали + БД | Устройство 1–2 главных блоков, схема данных, ключевой алгоритм | 18 мин |
| 5 | Ресурсы и узкие места | Back-of-envelope: QPS, storage, bandwidth, ноды; где горлышко | 7 мин |
| 6 | Эксплуатация | Отказы по каждому узлу, мониторинг, релизы, возврат к требованиям | 10 мин |
Три свойства каркаса, которые делают его каркасом, а не таблицей для зубрёжки:
Кольцо секции. Секция начинается листом требований и заканчивается возвратом к нему: «проверим требования: SLO по латентности обеспечен запасом, доступность чтения — N+1 по всем ярусам, лимиты — rate limiter; вот чем каждое требование контролируем метрикой». Этот финальный ход статья Яндекса называет прямо, и «почти никто не делает» — а он же и есть сильнейший финал шага 4 у Сюя («узкие места, мониторинг, что обсудили бы при наличии времени»).
Правило дефицита времени. Не успеваем — режем детали и ресурсы (свёртываем до 2–3 оценок), но эксплуатацию не режем никогда: отказоустойчивость — заявленный фокус нашей секции, и именно этот этап отличает senior-ответ. Антипаттерн: 40 минут в деталях, отказы — «на бегу» в последние три минуты.
Внутренний компас. Интервьюер может водить по своему порядку — этапы не сценарий для спора. Выбило из колеи — мысленно возвращаемся к цепочке «требования → API → схема → детали → числа → эксплуатация» и встраиваем туда текущий вопрос. Сюй предупреждает то же: не уделять сразу слишком много времени одному компоненту — сначала общая архитектура, потом погружение.
3. Этап за этапом: что должно прозвучать
Короткая карточка на каждый этап — что делаем и что говорим. Полные карточки (цель → что на доске → что проговорить → грабли) — ../methodology.md §2, одностраничная шпаргалка на саму секцию — там же §7.
Этап 1. Требования (8 мин). Сузить задачу и получить числа, от которых считается весь дизайн. Проговариваем: функциональные требования (что делает система), нефункциональные (масштаб, латентность, доступность, консистентность, retention, лимиты), что мы не строим. Пишем в угол доски. Грабли: рисовать коробки на 20-й секунде — потом переделывать.
Этап 2. Потоки и API (7 мин). Зафиксировать контракт: сущности (Post, Account, Link…), 3–5 сигнатур, разделение control plane (управление, единицы RPS) и data plane (горячий путь). Проговариваем: протокол и почему, идемпотентность записей, коды ошибок. Грабли: писать «код» вместо скелета — сигнатуры нужны как каркас, две минуты и дальше.
Этап 3. Крупноблочная схема (5 мин). Каркас из 5–8 блоков: клиенты → балансировка → сервисы → кэш → хранилища → очереди. Проговариваем путь горячего запроса целиком — чтение и запись отдельно. Грабли: уйти в детали раньше времени — здесь только блоки и их роли; детали добираем на этапе 4.
Этап 4. Детали + БД (18 мин, главная часть). Инженерная глубина на 1–2 самых нагруженных компонентах (выбираем по числам из требований). Хранилище — по гарантиям и критериям, а не по названию («нужен in-memory KV с репликацией и ~100k RPS на ноду — подойдут Redis/Aerospike-класс»). Синхронизация хранилищ — с проговоренным частичным отказом. Всё не нужное для ответа пользователю — асинхронно. Кэш и шардирование — только если числа показывают, что надо. Грабли: проектировать «всё» и «сложно» — детализируем горячий путь, стандартное решение берём как есть.
Этап 5. Ресурсы и узкие места (7 мин). Показать, что дизайн сходится арифметически, и назвать горлышко раньше интервьюера. 3–4 расчёта по формуле «допущение → формула → число → вывод» (как считать — раздел 02, ../knowledge-base.md §2). Грабли: считать молча; число без формулы не оценивается.
Этап 6. Эксплуатация (10 мин). Production-зрелость: топология 2–4 ДЦ, по каждому узлу схемы — «упал → что происходит → что в метриках», перегрузка в разы (rate limiting, load shedding, graceful degradation), мониторинг, релизы. Финал — возврат к листу требований (кольцо секции). Грабли: отдать этот этап «если останется время» — останется ли, зависит только от нас.
4. Работа с требованиями: ядро этапа 1
Это самая насыщенная часть раздела — то, ради чего каркас вообще существует. Подробные карточки вопросов и примеры — ../methodology.md §2 (этап 1) и разбор URL shortener в ../classic-designs.md §1; здесь — метод.
4.1 Функциональные требования: что строим и что НЕ строим
Функциональные требования — какие возможности реализуем: сценарии пользователей, read- и write-пути, приоритеты. Приём, экономящий полсекции, — минус-объём: зафиксировать, что мы не строим. «Аналитику и админку отмечаем, но не детализируем» — легальный способ сузить задачу, который интервьюер почти всегда принимает. Сюй про то же: у стартапа и у компании с миллионами пользователей разные архитектуры — «убедитесь, что вы понимаете требования», а не угадывайте масштаб.
4.2 Нефункциональные требования: договорённости о масштабе
Чек-лист, который прогоняем вопросами (или гипотезами, если интервьюер молчит):
| Тема | Что выясняем | Пример формулировки |
|---|---|---|
| Масштаб | DAU/MAU, паттерны использования, read/write ratio | «10 млн DAU, чтение доминирует — 100:1?» |
| Нагрузка | RPS чтение/запись, среднее и пик (пик ×2–3 к среднему) | «500 тыс. RPS в пике — это среднее или пик?» |
| Латентность | latency-SLO, p95/p99, на какие операции | «150 мс для 95 % чтений?» |
| Доступность | сколько девяток и на что именно | «четыре девятки на чтение, три на запись?» |
| Консистентность | что строго, что eventual, допустимый лаг | «новые объекты — строго; правки — лаг в секунды?» |
| Retention | сколько храним, что удаляем | «ссылки без TTL удаляем через год?» |
| Лимиты/абьюз | квоты, ограничения бесплатного tier | «1000 запросов/мин на бесплатный аккаунт?» |
Зачем фиксировать «на что именно» девятки и что именно строго — эти уточнения потом становятся фокусом дизайна: «четыре девятки на чтение при eventual-ленте» означает N+1 по read-пути и никак не означает консенсус на каждый пост.
4.3 Числа-гипотезы: от «страшного» числа к рабочему
Массовые круглые числа из вводной («500 млн MAU») Gabbard зовёт funny money — на них нельзя покупать серверы. Проговариваем конверсию вслух, каждое звено — допущение: 500 млн MAU × 70 % → 350 млн DAU → × 70 % в час пика → 245 млн/час → ÷ 3 600 → ~68 тыс. одновременных → ÷ ёмкость ноды (1 000) → ~68 серверов. Из «невообразимых миллионов» получилось трактабельное число, от которого проектируется нода. Это и есть «работа техлида», за которую платят. Правило гигиены: каждое число сопровождаем словом «допущение» — «поправьте, если есть реальные цифры».
4.4 Диалог вместо допроса
Требования — не анкета, а разговор двух инженеров. Рабочий ритм: вопрос → ответ интервьюера → короткий вывод на доску → следующий. Примеры живых диалогов — таблица этапа 1 эталона URL shortener (объём переходов? — 500 тыс. RPS в пике; скорость? — 150 мс для 95 % чтений; согласованность? — новые ссылки строго, модификации — лаг в секунды) и диалог про ленту у Сюя (мобильное или веб? — оба; сортировка? — обратная хронологическая; сколько друзей? — 5 000; трафик? — 10 млн DAU). Важно: услышанное сразу превращать в конструктив — «значит, read/write 100:1 → дизайн про чтение».
4.5 Лист требований
Требования записываются в угол доски и не стираются до конца. Три причины: (1) от них считается весь дизайн — потеряли числа, считаем заново; (2) интервьюер подменяет вводную («а если ссылок не 1 млрд, а 100?») — сверяемся с листом и правим точечно; (3) финальный возврат к листу — обязательный ход этапа 6. Сюй советует то же: предположения записывать на доске или бумаге — «позже они вам пригодятся».
5. Управление секцией: держим руль
Каркас — половина раздела; вторая половина — как оставаться его хозяином 60 минут подряд.
Чекпоинты вслух. Переход между этапами проговариваем: «требования зафиксировали — перехожу к потокам», «схема рабочая — теперь детали по самому нагруженному блоку», «по ресурсам сходится — перехожу к отказам и мониторингу». Чекпоинт делает три вещи сразу: держит тайминг, показывает интервьюеру структуру и легально отдаёт ему руль на секунду — «детализировать глубже X или идём к ресурсам?». Вопрос с развилкой — единственный правильный способ «спросить, что делать» на секции.
Хинт лучше ступора. Застряли — вслух фиксируем, где мы («давай зафиксирую, где мы»), и если не сдвинулись — просим подсказку. Хинт слегка ослабляет оценку, но 5 минут молчания у доски ослабляют сильнее; сильный финиш после подсказки весит больше.
Незнакомое — называем вслух. Не убегать от незнакомых частей: коротко пройти то, что знаем, и честно пометить край — «эта часть мне знакома хуже, вот как бы её раскапывал». Секция и добывает сигнал о краях знаний; «это не моя специальность» = сигнал об отсутствии лидерства.
Калибровка ожиданий. Задачу не решают полностью — она на это не рассчитана: «пришлось копать глубоко» — признак хорошо идущей секции, а не провала (если успели «всё» — задача была слишком лёгкой). Спокойный кандидат и ведёт лучше.
6. Трейдоффы вслух
Форма любого ключевого решения на секции — не «делаем так», а сравнение с ценой. Шаблон фразы: «два варианта: A — быстрее и проще, B — строже и дороже. Наши требования — X, поэтому беру A; платим Y, компенсируем Z». Трейдофф проговаривается даже когда выбор очевиден: интервьюер оценивает не угаданный ответ, а взвешенное решение. Минимум на секцию — три.
Заготовки пар «добавили → даёт → платим» (полная таблица — ../methodology.md §3):
| Что добавили | Даёт | Платим |
|---|---|---|
| Новый компонент / узлы | нагрузку, скорость ответа | поддержкой и деплоем |
| Репликация | нагрузку на чтение, надёжность | лагом чтения: доступность vs консистентность |
| Кэш | нагрузку | протухшими значениями, cache coherency |
| Шардирование | нагрузку и объём | перешардированием в будущем |
| Готовое решение | оно уже есть | в нём надо разбираться |
К этой же семье относятся два сквозных правила речи: гарантии вместо брендов («нужен KV с репликацией и лагом < 1 с, а не "возьмём Redis"» — «нам важнее свойства и предоставляемые системой гарантии, чем конкретное название») и KISS («не усложняю без необходимости: здесь стандартный балансировщик, самописное — только то, чего нет в готовом»).
7. Свёртка с фреймворком Alex Xu
Книга задаёт каркас из 4 шагов; наши 6 этапов — его детализация под формат Яндекса. Полезно знать соответствие — вдруг интервьюер опирается на книгу:
| Alex Xu, 4 шага | Наши этапы | Заметки |
|---|---|---|
| 1. Понять задачу и масштаб | Этап 1 | то же; у нас + явные числа-гипотезы и минус-объём |
| 2. Общее решение и согласие | Этапы 2–3 | API и high-level до деталей; у нас + control/data plane |
| 3. Глубокое проектирование | Этапы 4–5 | приоритеты интервьюера; у нас + обязательная арифметика |
| 4. Подведение итогов | Этап 6 | у нас шире: отказы + мониторинг + возврат к листу |
Do из книги: уточнять, думать вслух, предлагать разные подходы, быть скромным. Don't: молчать, нырять в детали до согласования каркаса, считать интервью законченным после изложения решения.
8. Ошибки этого раздела
Подмножество топ-10 ошибок (../methodology.md §4), относящееся именно к разделу 01 — фреймворку и требованиям:
| Ошибка | Как выглядит | Противоядие |
|---|---|---|
| Схема без требований | Коробки на 20-й секунде, потом переделываем | 8 минут требований — часть ответа, не вежливость |
| Молчание | Долгие паузы, интервьюер тянет разговор | Думать вслух; пауза > 15 с — проговорить, что сейчас делаем |
| Требования не записаны | В конце «потерялись», сверять нечего | Угол доски, не стирать, вернуться в финале |
| Решения без альтернатив | «Делаем так» — и всё | Трейдофф-фраза на каждое ключевое решение, ≥ 3 за секцию |
| Ступор без данных | «Не знаю, сколько у них пользователей…» | Гипотеза вслух с допущением и приглашением поправить |
| Застрять в деталях | 40 минут на один компонент, отказы «на бегу» | Чекпоинты, тайминг, эксплуатацию не режем |
| «Закончил» после схемы | Схема нарисована — кандидат ждёт | Руль у нас: «теперь проверим требования и отказы» |
9. Что назвать на секции (чек-лист раздела)
Обязательные фразы и действия, по которым видно, что раздел освоен. Полный чек-лист всех этапов — карточка ../methodology.md §7 (то, что печатаем на секцию), лексика остальных разделов — ../knowledge-base.md §11.
В начале (этап 1): - «Запишу требования в угол доски, к ним вернёмся в конце» — и записать. - Вопросы по чек-листу §4.2: масштаб, RPS avg/peak, latency-SLO p95, девятки и на что, что строго / что eventual, retention, лимиты. - Минус-объём: «аналитику и админку отмечаем, но не детализируем». - Гипотеза при нехватке данных: «вводных нет — выдвигаю гипотезу: DAU 100 млн, пик ×3 к среднему; поправьте, если есть реальные цифры».
По ходу (этапы 2–5): - Чекпоинты на каждом переходе: «требования зафиксировали — перехожу к потокам». - Выбор с развилкой: «детализировать глубже X или идём к ресурсам?». - Трейдофф-фраза: «два варианта: A проще, B строже; требования — X → беру A, платим Y, компенсирую Z» (≥ 3 за секцию). - Гарантии вместо брендов: «нужен класс систем с такими-то свойствами, представитель — такой-то». - KISS: «не усложняю: здесь готовое решение, самописное — только то, чего нет». - Числа с формулой: «допущение → формула → число → вывод» (≥ 3 за секцию, ≥ 2 гипотезы). - Критический путь: «это не нужно для ответа пользователю → убираю из горячего пути, асинхронно батчами».
В финале (этап 6): - Возврат к листу требований: «сверимся: SLO обеспечен запасом …, доступность — N+1 по ярусам, лимиты — rate limiter; каждое требование контролируется метрикой».
10. Самопроверка «умею, если»
Критерий раздела из брифа: могу перечислить 6 этапов с таймингом и знаю, что говорить на каждом. Проверяется не чтением, а прогоном: закрыть материалы, взять любой сервис (хоть «сокращатель ссылок», хоть «доставка кофе») и вслух провести каркас: 8 минут требований с записанным листом → API → схема → детали горячего пути → 3 расчёта → эксплуатация с возвратом к листу. Протокол такой тренировки, рубрика 0–3 и порог готовности — ../methodology.md §6; эталонные разборы для сверки — ../classic-designs.md (раздел 11 брифа). Если каркас выдержан, а фразы из §9 прозвучали сами — раздел готов.
Связанные документы
00-overview.md— обзорная статья по всем 12 разделам брифа (TASK-45.40)../brief.md— бриф: 12 разделов с критериями «умею, если»../methodology.md— куда углубляться: §2 карточки всех 6 этапов (цель → доска → речь → грабли), §3 речевые паттерны и правила поведения, §4 топ-10 ошибок, §6 протокол тренировок, §7 одностраничная карточка на секцию../materials/yandex-564132.md·../materials/alex-xu-vol1/ch-03-framework.md·../materials/jackson-gabbard-ep06.md·../materials/habr-516604.md— три взгляда на секцию (формат · 4 шага · цена вопроса) + взгляд проходца../knowledge-base.md— числа и паттерны (§2 back-of-envelope, §11 шпаргалка «что назвать»)../classic-designs.md— эталонные разборы: сборка каркаса на реальных сервисах- Соседние статьи:
02-estimations.md(числа для этапа 5) ·11-reference-designs.md(каркас в целых решениях) ·12-operations-observability.md(этап 6)