title: Конспект материала 16 — А. Поломодов «Как подготовиться и пройти System Design Interview» (видео ArchDays 2022 + статья) source_video: https://www.youtube.com/watch?v=jUbOm0B-eKQ source_article: https://tellmeabout.tech/how-to-prepare-for-and-pass-the-system-design-interview-78b820589e8 author: Александр Поломодов (Tinkoff, архитектор мобильного банка, курирует системный дизайн в компании) конспект: подготовлено 2026-09-17, TASK-45.20; статья (tellmeabout.tech) — текстовая расшифровка того же доклада, видео 1:04:03 дополнено 13 минутами живых вопросов, которых в статье нет статус: RU-гайд №1 по формату со стороны интервьюера; фреймворк 7 этапов, подготовка по 6 блокам, 7 советов; сравнение с подходом Яндекса и перенос в methodology.md — §7–8
Материал 16: Поломодов — как подготовиться и пройти System Design Interview
Автор — интервьюер по system design в Tinkoff (система мобильного банка; архитектурная секция идёт и инженерам, и всем техруководителям вплоть до CTO). Доклад ArchDays 2022; статья — полная расшифровка; видео сверх неё содержит 13 минут Q&A с ценными уточнениями (§6). Это взгляд на подготовку под каждый этап секции — в отличие от статьи Яндекса, где описан сам формат и что оценивают.
Ценность для нас: у Поломодова самое аккуратное на русском изложение скоуп-дисциплины (как вопросами срезать задачу до ядра), приоритизации архитектурных характеристик и разделения happy path / exceptional flows. Каркас секции (6 этапов Яндекса) при этом почти тот же — расхождения и что брать у него — §7.
1. Контекст: где живёт SDI в Tinkoff
- Проводится для инженеров, претендующих на Senior, и для всех технических руководителей (тимлид → CTO).
- Место в цепочке найма: третья секция, после алгоритмов и языка программирования.
- Задача секции — реальная и конкретная (пример дня доклада: бронирование номеров в отеле), час на интервью + полчаса на обсуждение результатов.
- В Tinkoff есть отдельный troubleshooting-формат для SRE-направления (система «горит», команда уехала на конференцию, джуну «дядя Вася» нужна помощь) — см. §6 Q&A.
- Матрица компетенций и профили: фидбэк по кандидату описывает сильные стороны по этапам («классно собирает требования, отлично проектирует API, но технологии и масштабирование слабо»), а не один балл — нанимающий менеджер смотрит профиль (подробнее §6).
2. Фреймворк интервью: 7 этапов (ядро конспекта)
Поломодов ссылается на 4-шаговый алгоритм Alex Xu (System Design Interview) и предлагает свой, более детальный фреймворк. Этапы:
| # | Этап | Что происходит | Кто говорит |
|---|---|---|---|
| 1 | Постановка задачи | Интервьюер даёт название задачи + контекст: основные функциональные и нефункциональные требования | больше интервьюер → затем замолкает |
| 2 | Формализация | Кандидат вопросами уточняет scope и фиксирует ключевые архитектурные характеристики: high availability, data consistency, high throughput, scalability, auditability; приоритизирует их между собой | кандидат |
| 3 | Границы системы | Публичное API для всех сценариев; способы интеграции с внешним миром | кандидат |
| 4 | Итеративное проектирование | Прорабатываются happy path и exceptional flows; компоненты «вырастают» из потока данных, нужного для сценариев | кандидат |
| 5 | Концептуальная схема | Готовая схема целиком: компоненты, модели данных, связи — всё консистентно в одном месте | кандидат |
| 6 | Реальная схема + sizing | Выбор конкретных технологий (Postgres vs MySQL, Kafka vs RabbitMQ…) и оценка, отмасштабируется ли система под нагрузку. Здесь видно знание современных решений | кандидат |
| 7 | Дополнительные вопросы | Опционально: расширение scope / ужесточение NFR (auditability, security, compliance…) — шанс сильного кандидата показать ширину | кандидат |
Пример из живой секции (отель): формализация → архитектурные характеристики (консистентность важнее всего: не продать больше броней, чем номеров, даже с учётом overbooking-задачи) → границы и API → потоки данных и компоненты (итеративно, с exceptional flows) → концептуальная схема с API и моделями данных → в финале конкретные технологии (БД, кэш, балансировщик) и что будет при росте нагрузки.
3. Подготовка: что уметь и что изучить по каждому блоку
Поломодов прямо называет свой путь «не коротким»: по каждому этапу — что уметь, затем книги/материалы.
3.1 Формализация (соответствует нашему этапу 1 «Требования»)
Что уметь: - Задавать правильные вопросы и минималистично резать скоуп: «идентификация юзеров / профили / платёжный шлюз — это наша система или уже есть?» — срезать себе необязательные куски. - Собирать функциональные требования в виде желаемых сценариев (что пользователь хочет от системы), а не абстрактного списка фич. - Выяснять NFR и составлять табличку архитектурных характеристик; приоритизировать их (не все равны; часто одно самое сложное требование надо проработать глубже всего; характеристики иногда противоречат — решать, чем жертвуем).
Что изучить:
- Функциональные требования: Use Cases из UML (actors + сценарии с happy path и exceptional flows), User Story («As a
3.2 Границы системы (соответствует нашему этапу 2 «Потоки и API»)
Что уметь: выбирать правильный способ интеграции с внешним миром: Files / Database / API / Messaging (4 варианта из Hohpe, Enterprise Integration Patterns) с их плюсами/минусами; для API — подходы REST (OpenAPI), RPC (gRPC, JSON-RPC), GraphQL, AsyncAPI и уметь описывать контракты.
Что изучить: C4 Model — System Context diagram (границы и точки взаимодействия); сетевой слой, о котором «все забывают»: OSI, UDP/TCP/IP, DNS, HTTP 1/2/3, WebSockets; балансировщики (Nginx, HaProxy) и Service Mesh. Книги: Tanenbaum «Computer Networks», Hohpe «Enterprise Integration Patterns» (устарели конкретные решения, но концепции живут).
3.3 Основные потоки и компоненты (наш этап 3 «Крупноблочная схема»)
Что уметь: описывать happy path по компонентам; очерчивать exceptional flows (но не уходить в бесконечный анализ «что может пойти не так» — сначала спросить, глубоко ли это копаем); определять read/write path с учётом архитектурных характеристик.
Что изучить: C4 Container diagram; UML Sequence и Activity diagram (на интервью обычно не рисуют — долго, но понимание помогает мыслить); для кругозора: IDEF0, DFD, BPMN; по балансу read/write path — Kleppmann (DDIA) с его разбором ленты соцсети (торгуем временем записи против скорости чтения).
3.4 Концептуальная схема (наш этап 4 «Детали + БД»)
Что уметь: делить систему на stateless/stateful компоненты (stateless легко масштабируются; париться надо только про stateful — где состояние хранится); проектировать модели данных под сценарии (см. кейс отеля §5); выбирать класс хранилища.
Что изучить: DDD-стратегия — subdomains, ubiquitous language, bounded contexts (Khononov «Learning DDD»); ER-диаграммы / UML Class Diagram; 12-Factor App (манифест всё ещё актуален для cloud-native); «K8s Patterns» (Ibryam) — как разработчик приложений использует Kubernetes (масштабирование, конфигурация); «Software Architecture: The Hard Parts» (Ford et al.) — зоны ответственности компонентов и работа с данными.
3.5 Реальная схема и архитектурные характеристики (наш этап 5 «Ресурсы» + часть 6 «Эксплуатация»)
Что уметь: выбирать конкретного представителя класса (реляционные: Postgres/MySQL/Oracle; очереди: ActiveMQ/RabbitMQ/Kafka/Pulsar) — знать гарантии и сложность эксплуатации; мыслить failure domains (сервис → машина → зона доступности → ДЦ); учитывать day-2 operations: логирование, мониторинг, миграции, развитие (чтобы не «жить больно» потом).
Что изучить: технологии — трогать руками: документация → поднять в тестовом окружении/облаке → поиграть с основными сценариями → managed-версии; собрать представление «rps per cpu» — на какой диапазон нагрузок рассчитана система, и единицу масштабирования на стандартной вмке (ядра/память/диск); SRE: Building Secure and Reliable Systems (читать обязательно: первая половина — проектировать надёжность/безопасность сразу, добавить постфактум «на порядок дороже»), SRE Book, SRE Workbook. В Q&A добавил: Jepsen-тесты — как проверять заявленные гарантии под нагрузкой/дрифтом часов.
3.6 Масштабирование под нагрузку (часть нашего этапа 5 и 6)
Что уметь: - Stateless: оркестратор (K8s) — вертикально (VPA) и горизонтально (HPA); метрики: per-pod resource (CPU), per-pod custom, object/external metrics (глубина очереди для воркер-подов). - Stateful: масштабировать чтения — кэш (вопрос консистентности и инвалидации) или репликация с чтением со secondary (ослабление консистентности); масштабировать записи — partitioning/sharding (обязательно знать паттерн доступа к данным; ключ шардирования должен присутствовать в запросах — в отеле это hotel id).
Что изучить: DDIA (Kleppmann) — старт; далее Tanenbaum «Distributed Systems», Petrov «Database Internals», Ibryam «K8s Patterns»; плюс обязательный нагрузочный тест своими руками, чтобы понимать единицу масштабирования.
4. Кейс из живой секции: бронирование отеля (примеры от интервьюера)
Поломодов разбирал в день доклада секцию коллеги (задача «система бронирования номеров в отеле») — по его словам, «почти идеальную», с 1–2 помарками. Что отсюда полезно:
- Overbooking как задание: отель может продать больше броней, чем номеров (наплыв гостей) → нужен инвентарь по типам комнат на каждую дату: сколько доступно, сколько забронировано. Модель данных — не про «отели и комнаты» (это просто), а про сценарий «какие типажи комнат доступны на интервал».
- Промах коллеги №1 (модель данных): чётко расписал сценарий «забукать номер», но не предусмотрел в модели поля для сценария «получить доступные комнаты на интервал» — интервьюеру хватило одного наводящего вопроса «а как мы эти данные получим?».
- Промах №2 / сетевая глубина: пропало сетевое соединение при брони — клиент не получил ответ и повторит запрос → двойная бронь и двойное списание → нужна идемпотентность запросов. Урок: про сетевой слой в happy path можно забыть, но в exceptional flows он обязателен.
- Скоуп решается вопросами: админка (добавление отелей/номеров) — «нужный, но скучный» supporting subdomain → срезали; платёжный шлюз — «готовое решение или система другой команды» → вынесли за границы.
- Ключ шардирования: hotel id — во всех запросах, значит, хороший ключ для шардирования.
5. Семь советов для самого интервью (короткий путь «как проявить себя»)
- Помнить о времени. Час — не закапываться в детали, контролировать тайминг и двигаться по плану. Плохо: 15–20 минут на формализацию, потом ничего не успел.
- Не начинать проектировать сразу. Сначала понять задачу; вопросы по условиям задать до проектирования — иначе «начнёте не ту задачу». Особенно в незнакомом домене.
- Делиться размышлениями. Секция про то, как вы решаете; молча рисовать и раз в 5 минут отчитываться — интервьюер не увидит глубины. Интерактивность решает: он войдёт в обсуждение как коллега.
- Проявлять самостоятельность. Интервью открытое: строй гипотезы и предлагай сам; если интервьюеру приходится вести кандидата — «очков не добавит».
- Реагировать на наводящие вопросы и уточнения. Они не просто так: кандидат где-то буксует или недокрутил. Отработать хинт (см. §6.3) лучше, чем «обсудим потом» и никогда не вернуться.
- Говорить уверенно о том, что знаешь — а не бросаться словами, о которых смутно слышал: интервьюер докопается, и придётся краснеть.
- Подготовить вопросы к интервьюеру на остаток времени (про задачу, компанию, про «странные места» в секции, рекомендации по чтению) — показывает живой интерес; в Tinkoff на интересные вопросы готовы общаться ещё полчаса.
6. Находки из Q&A (в статье их нет — только в видео, 46:46–1:04)
- Как резать скоуп: прямо спрашивать «это в нашей задаче?», «это готовое решение / сервис соседней команды / не в первой версии?» — и после 2–3 вопросов остаются буквально 3 сценария, из которых часто только один реально сложный — его и прорабатывать; остальные «носки», нужные чтобы сценарий работал.
- «Обсудим потом» — анти-паттерн. Примета хорошего кандидата: на подсказке сам закрывает дыру («а, да, понял»). Примета плохого: «вернёмся к этому потом» — и никогда не возвращается. Такие вещи интервьюер запоминает.
- О подсказках: хинт дают, когда кандидат явно буксует — «90% правильного ответа — это правильно заданный вопрос», и хорошая подсказка сама по себе почти ничего не раскрывает при правильной реакции.
- Абстрактные задачи («спроектируй библиотеку в большом городе»): пробовали — инженерам сложно переключиться в такой режим; пришли к скоупнутой задаче с основными требованиями, дальше кандидат сам допытывает. (У учёных-архитекторов в статье Яндекса та же логика — реальную систему берут за основу.)
- Компетенции и оценка: в Tinkoff фидбэк содержит профиль сильных сторон по этапам, а не средний балл; нанимающий менеджер смотрит, закрывает ли кандидат дыру команды (штука «общаться с бизнесом» vs «внутренняя техника»). Баллами по секции без контекста профиля пользоваться нельзя.
- Зачем архитекторам алгоритмы: не для «погонять задачки», а чтобы раскладывать данные так, чтобы их удобно было выбирать под нагрузкой (история автора: соцсеть на нормализованной реляционной БД «сложилась» под трафиком).
- IC-трек в Tinkoff: есть путь индивидуальных контрибьюторов (staff/principal) с подачей заявки артефактами и отзывами коллег; девиз уровня — по-амазоновски «design → implement → operate» (спроектировать, закодить, обслужить, чтобы не развалилась).
- SRE troubleshooting-interview: система уже есть, она «горит», команда на конференции — как чинить; показывает работу с инцидентами лучше system design; для топ-инженеров комбинация обоих форматов ценнее.
7. Отличия от подхода Яндекса (сравнение с yandex-564132.md и нашей методичкой)
Каркасы совпадают (требования → потоки/API → схема → детали → ресурсы → эксплуатация), но есть системные различия:
| Аспект | Поломодов (Tinkoff) | Статья Яндекса → наша методичка methodology.md |
|---|---|---|
| Число этапов | 7 (формализация, границы, проектирование, концептуальная схема, реальная схема+sizing, доп. вопросы) | 6 (требования, потоки+API, крупноблочная, детали+БД, ресурсы, эксплуатация) + доп. блок |
| Скоуп-дисциплина | Сформулирована жёстко и отдельно: минимализм, вопросы «это наша система или уже есть?», часто один сложный сценарий | Есть неявно («гипотезы при нехватке данных», «не усложняйте»), но как техника не разбирается |
| Архитектурные характеристики | Отдельный этап с инструментом приоритизации (ATAM: sensitivity/trade-off points) и явным списком (HA, consistency, throughput, scalability, auditability) | Внутри «формализации требований»: время ответа, доступность, согласованность — без отдельного инструмента |
| Exceptional flows | Явный этаж фреймворка (happy path + exceptional flows), отдельный шаг интервью | Нет прямой формулировки; отказоустойчивость проверяется на этапе эксплуатации («переживание отказа») |
| Sizing и числа | Мягко: «обсудить sizing с учётом выбора технологий», без обязательного back-of-envelope; расчёты не в ядре фреймворка | Жёстко: этап 5 «оценка ресурсов» с latency numbers, CPU/RAM/disk/network, поиском узких мест — обязательный |
| Эксплуатация | Упоминается как day-2 operations в блоке реальной схемы (логи/мониторинг/миграции) + failure domains | Отдельный обязательный этап 6: топология, отказы по каждому узлу, metrics first, поведение при нагрузке в разы |
| Контроль времени кандидатом | Прямой совет №1 («помнить о времени», не закапываться) | «План простой — запомнить и придерживаться»; тайминг задаёт наша методичка |
| Что даёт сверх каркаса | Подготовительный «длинный путь» (книги по каждому блоку), скоуп-вопросы, кейсы от интервьюера, Q&A про подсказки | Эталонный разбор URL shortener с числами, критерии оценки, metrics first, «взгляд в 4 измерениях» |
Вывод для нашей секции (Yandex Codenv). Основной каркас — статья Яндекса и методичка (§1–2): этот формат мы и встретим, а его эталон URL shortener прогнан в classic-designs.md. Из Поломодова берём три вещи как надстройку над этим каркасом: (1) скоуп-вопросы на этапе требований, (2) приоритизацию архитектурных характеристик с проговариванием трейдоффов, (3) поведение: разделять размышления, самостоятельно вести, ловить хинты как сигнал «где-то буксуешь».
8. Что перенести в методичку (TASK-45.2) — предложения
- §1/§2, этап «Требования»: добавить скоуп-вопросы-минималиста («это наша система, готовое решение или сервис соседней команды?», «что не в первой версии?») и правило «часто из 3 оставшихся сценариев сложен один — найти его и копать туда».
- §2, этап «Требования»: явный список архитектурных характеристик (HA, consistency, throughput, scalability, auditability) + проговаривание трейдоффа: «какой характеристикой жертвуем ради какой» (ATAM trade-off points — без терминов).
- §2, этап «Потоки и API»: явно разделять happy path и exceptional flows; на exceptional-flow спрашивать «это копаем глубоко или очерчиваем?».
- §3, чек-лист речевых паттернов: фразы «предлагаю вынести за скоуп, если время останется — вернёмся», «ключ шардирования есть во всех запросах?», «компонент stateless — масштабируется тривиально; состояние вот здесь».
- §4, топ ошибок: добавить «обсудим потом» без возврата (анти-паттерн, пример Поломодова) и «молча рисовать, отчитываться раз в 5 минут» (совпадение с Gabbard §3.1 — усилить ссылкой).
- §3, правила поведения: блок «реагировать на наводящие вопросы» — хинт дают, когда буксуешь; правильная реакция — закрыть дыру сразу («а, да, понял»), а не «вернёмся».
- Не переносить: «длинный путь» подготовки Поломодова (книги по блокам) — это курс на месяцы, для слотов 18/21/22.09 нерелевантен; детали Tinkoff-процесса найма.
Связанные документы
../methodology.md§1–4 — каркас и тайминг секции (TASK-45.2) — цели переноса в §8yandex-564132.md— статья Яндекса, эталон формата (TASK-45.5) — сравнение в §7jackson-gabbard-ep06.md— правила поведения на секции (TASK-45.9) — пересечение с §5 советами Поломодоваlearn-system-design-index.md— индекс подборки (TASK-45.12), строка материала 16