title: Конспект источника 5 — Jackson Gabbard, «Intro to Architecture and Systems Design Interviews» (The Unqualified Engineer, Episode 06) source: https://www.youtube.com/watch?v=ZgdS0EUmn70 author: Jackson Gabbard (экс-Facebook, интервьюер), 31.07.2016, ~49 мин конспект: подготовлено 2026-09-17, TASK-45.9; расшифровка авто-субтитров EN (yt-dlp), прочитана целиком; правила поведения перенесены в methodology.md §3, пример capacity estimation — в §3 ниже и сверен с knowledge-base.md §2 статус: взгляд интервьюера из «A-list» компании; рассказчик — бывший сотрудник Facebook (интервьюер + участник candidate review); формулировки из видео, увязка с нашими материалами — наша
Источник 5: Jackson Gabbard — Intro to Architecture and Systems Design Interviews
Третий взгляд на ту же секцию, но с другой стороны прилавка. Источник 1 (статья Яндекса) формализует что оценивают и как устроены этапы; источник 4 (habr 516604) даёт план и фразы проходца; этот источник объясняет почему секция стоит так дорого и какой стиль поведения ведёт к офферу, а какой — к отказу, даже если код и behavior прошли идеально. Читать после источников 1 и 4: сам фреймворк здесь не новый, новая — калибровка ожиданий и роль «водительского кресла».
Связь с подготовкой: ../methodology.md §3 (правила поведения), §1 (тайминг и роль кандидата), §5 (пункт 7 порядка чтения, 40 мин), ../knowledge-base.md §1.2–1.3 (числа), §2 (back-of-envelope).
1. Почему архитектурная секция — самая дорогая
Gabbard начинает с различия двух типов интервью:
| Coding-секция | Архитектурная секция | |
|---|---|---|
| Шкала оценки | Практически pass/fail: «дошёл до планки или не дошёл», редки вердикты «код хороший, но не дотянул» | Широкий спектр: спецнавык, широта, глубина, способность вести |
| Ответ | Есть правильный | Правильного ответа нет — есть несколько хороших и набор ужасных; между хорошими выбирают трейдоффами |
| Что решает | Пускают ли за порог | Какой уровень оффера дадут: stronger/weaker contributor, лидер одной команды или многих; напрямую → цифра зарплаты и объём equity |
Отсюда практический вывод: это второе по важности интервью после coding. Оно оценивает не «знание систем», а техническую лидерскую способность: взять большой размытый кусок и разложить его на связные подзадачи — или вообще понять, что именно от тебя хотят.
Формально: в наборе бывают кодинг, behavior/background и архитектура; у специалистов (Android/iOS) — архитектура по своей платформе; у очень senior — отдельное leadership-интервью. Обычному кандидату на разработчика встречаются первые три, и для нас архитектура — рычаг на уровень оффера.
2. Устройство вопроса: «большие детали» вместо условий
Классический формат: интервьюер объявляет, что это интервью другого типа, даёт размытую задачу с очень малым числом важных деталей и конкретными ограничениями. Пример вопроса из видео (для кандидата с подходящим бэкграундом; «никогда не дам задачу полностью вне бэкграунда — только на градус в сторону»):
У вас успешное приложение: Android, iOS, mobile web — 500 миллионов active users в месяц. Спроектируйте logging infrastructure, которая позволит разработчикам логировать произвольные данные с устройства на сервер (старт/стоп приложения, переключение фич, отправленные и полученные сообщения — что нужно), чтобы дебажить и мерить производительность в проде, и масштабируется на всех пользователей и все устройства.
Это «давящая» и «размытая» задача намеренно: интервьюер не выдаст всю информацию — её нужно вытащить. Единственное «условие» — детали, которые надо допросить, а не посчитать по умолчанию.
Играть от своих сильных сторон. Интервьюер ждёт, что ты разнесёшь ту часть задачи, где твой бэкграунд даёт преимущество: mobile-разработчик должен заговорить про потребление батареи и сотового трафика, про on-device ограничения (сколько места занимаем, не блокируем ли UI-thread, какой API даём разработчикам); человек из distributed file systems — про запись на 500M масштабе, сходимость распределённых логов в один лог-стор. И наоборот: неизвестное не прятать — коротко пройтись по тому, что знаешь хорошо, и честно назвать края: «а вот эта часть мне знакома хуже». Это ровно тот сигнал о широте и глубине, который секция и добывает; молчание или «это не моя специальность» — сигнал об отсутствии лидерства.
3. Пример capacity estimation из видео (полная цепочка)
Ядро этапа ресурсов — превратить «страшное» число в трактабельное. Цепочка Gabbard (наш разбор — по шагам; формулы и классы чисел — ../knowledge-base.md §1.2–1.3, §2):
Шаг 0. Осознать, что MAU — не число для железа. «500 миллионов monthly actives — это funny money». Отвечать на «покупку серверов» в MAU нельзя.
Шаг 1. Не путать среднее с пиком. Наивный путь: 500 млн / 30 дней / 86 400 с — неверно: люди не распределены по земле равномерно и не приходят случайно, они приходят «домой после работы» — город, штат, страна заходят примерно в одно время. У любого масштабного сервиса есть пики и провалы, считать нужно пиковую нагрузку.
Шаг 2. Уточнить контекст у интервьюера (это и есть leadership в действии): - география: весь мир или только США и Западная Европа? каждая локация даёт свой профиль трафика; - какое суточное проникновение? берём допущение 70 % от MAU приходит ежедневно.
Шаг 3. Цепочка цифр (допущения озвучиваем вслух):
| Шаг | Допущение | Считаем | Результат |
|---|---|---|---|
| MAU → DAU | 70 % заходят каждый день | 500 млн × 0.7 | 350 млн DAU |
| DAU → час пика | 70 % DAU активны в пиковый час | 350 млн × 0.7 | 245 млн в час пика |
| час пика → одновременные | 3 600 с в часе | 245 млн / 3 600 | ≈ 68 000 одновременных пользователей |
| concurrent → ноды | «плохо оптимизированный Node-сервер» держит 1 000 одновременных | 68 000 / 1 000 | ≈ 68 серверов |
Вывод вслух: «Из 500 миллионов невообразимых пользователей получилось 68 серверов в худшем случае — с этим уже можно проектировать». Это и есть работа техлида: свести размытую задачу к трактабельному уровню сложности, от которого дальше считаются конкретные требования к ноде.
Шаг 4. Мета-правило: числа выдуманы — и это нормально. «Yes, I just made up a bunch of numbers». Секция проверяет не психометрию и не точное предсказание трафика компании, а способность делать устойчивый прогресс через неопределённость. Если ошибёшься в два раза: - в меньшую сторону — «докупим серверы позже»; - в большую — «компания на ракете, ёмкость всё равно понадобится». Ошибиться в 10+ раз (например, «около миллиона серверов») — это путь к разорению компании; порядок величины уже не безразличен.
Сверка с нашими материалами: это тот же принцип «допущение → формула → число → вывод», что в ../knowledge-base.md §2.1, но с другим якорем: у нас в примерах RPS от DAU, здесь — конверсия MAU → DAU → пик → concurrent → ноды. Обе цепочки стоит уметь проговаривать подряд.
4. Реалистичные границы вместо выдумки «с потолка»
После числа пользователей нужен throughput. Gabbard разбирает три уровня ответа:
- Rookie: «ну, наверное, полмегабайта — sounds about right».
- Лучше: оценивать объём лога (сколько интов, строк, произвольных данных) × 100 действий/мин.
- Лучший (лидерский): утвердить разумное ограничение от эмпатии к пользователю. «Just because you can log more data doesn't mean you should».
Ход рассуждения: - верхняя граница от мира: не бывает, чтобы 70 тыс. пользователей стримили по 5 МБ/с на сервер «в фоне» — за это приложение возненавидят, никто не будет платить за такой трафик; - верхняя граница от человека: сколько действий в минуту возможно физически — ~30–40 сообщений при яростной печати, несколько десятков полученных фото; - от бюджета пользователя: 0.5 МБ/мин × 60 мин = 30 МБ в час — для плохого соединения в Индии или Африке это огромные деньги и время; такой бюджет недопустим; - вывод-утверждение: берём верхнюю границу 10–20 КБ/мин (в разы меньше реального трафика пользователя) и проектируем систему вокруг неё.
Смысл для секции: решение, принятое из «как это выглядит для человека и продукта», а не только из технической возможности, читается интервьюером как взгляд на картину целиком, а не как «в дебрях технических деталей». Это прямое пересечение с metrics first и продуктовым финалом из ../methodology.md §1 и §3.
5. Карта «о чём ещё поговорить» (breadth-чеклист)
После 10–15 минут capacity estimation начинается собственно система. Gabbard перечисляет, что осталось: клиентская реализация по платформам (iOS/Android/web/TV), серверная сторона (компоненты, технологии, обновления), сетевой трафик логов (сжатие, шифрование, протокол), доставка только по Wi-Fi vs по мобильной сети, долгосрочное хранение и retention (например: 3 дня полного доступа → 7 дней → 30 дней с падающим разрешением, «recent matters»), стоимость и сроки разработки, headcount, эксплуатационная стоимость, доступ к логам для разработчика (Hadoop/Hive vs распределённый SQL), приватность (логируем ли персональные данные; что делаем по «delete my data»).
Это готовый breadth-чеклист для этапа 6 нашей секции и для доп. вопросов: если время осталось, а мы не знаем, что сказать — идём по этому списку (эмпатия → приватность → retention → стоимость эксплуатации). В ../methodology.md §1 эти темы разложены по этапам 4 и 6.
6. Правила поведения на секции (перенесено в методичку §3)
Формулировки Gabbard (дословные опоры):
- Водительское кресло. «You are in the driver's seat… treat it like a tech talk where you're explaining to the other person how the system is going to work». «И что дальше?» должен говорить интервьюер, а не кандидат. Симптом плохой секции — когда интервьюер подталкивает: «окей… и что?».
- Keep going. «Если ты идёшь через ад — иди» (Черчилль в пересказе). Мысль «я не знаю, что дальше» — не стоп, а диагноз: либо недостаточно вовлечён, либо не знаешь проблему; лечится тем, что вслух оглядываешься («давай зафиксирую, где мы») и идёшь дальше.
- Хинт лучше ступора. Если реально застрял — попросить подсказку. Это слегка ослабит оценку, но «пять минут молчания у доски» ослабит её сильнее; сильный финиш после подсказки весит больше, чем провал. См.
../methodology.md§4, ошибка №2 (молчать и рисовать про себя). - Незнакомое называть вслух. Не убегать от того, чего не знаешь: «вот это я знаю хорошо, а эта часть мне менее знакома — вот как я бы её раскапывал». Это сигнал лидерства, а не минус.
- Числа озвучивать как допущения и не бояться ошибки ×2 (см. §3 выше).
7. История провала: как «ок»-секция становится отказом
Кейс из Facebook (личный опыт рассказчика): кандидат отлично прошёл две кодинг-секции и behavior, всем понравился. Архитектурная — «слабая»: не по незнанию, а по вовлечённости — интервьюеру приходилось тянуть его вперёд, кандидат ждал подсказок. Панель проголосовала «берём», но на candidate review директор зарубил:
«8 лет индустриального опыта — и архитектурный образ мысли у него “I don't know what's next”. Нам такой не нужен».
Мораль, которую Gabbard выводит (и под которую в A-list компаниях есть формальная планка: не дотянул за ~3–4 года — расстаёмся): - комплейшенси в своей роли убивает шансы на компанию лучше — «get busy living or get busy dying»; - судят не только «правильность», а готовность вести и разбираться; пассивность = отрицательный сигнал независимо от кода.
8. Калибровка ожиданий
- Эти интервью спроектированы, чтобы найти твои края: если интервьюер делает работу правильно, выйдешь с ощущением «пришлось копать глубоко» — это корректное состояние, значит секция прошла хорошо.
- Задачу нельзя решить полностью и не имеется в виду, что её решат за 45 минут: смысл — показать, как далеко ты пройдёшь, насколько широко и глубоко рассуждаешь в реальном времени на новой задаче.
- Если вышел, «успев всё» — скорее всего, задача была слишком лёгкой.
- Провал архитектурной секции — не конец: senior-интервью архитектуры не дают джунам именно потому, что этот контекст не берётся в школе; «не блеснул дизайном, но код сильный и видно страсть — зовём» — рабочая формулировка фидбека. Обратная история — «код порвал, но в архитектуру не вступал вообще, значит при нерешаемой задаче сдаётся» — гораздо хуже.
- Pedigree не решает. Пример самого рассказчика: Google отклонил, позже нанял Facebook, а через три года Google сам писал ему в личку; отказ — это «дверь, у которой ты уже стоял», а не приговор.
9. Как набирать контекст вне бигтеха
Если не работал на высоком масштабе — это не блокер: внутри компаний подавляющее большинство тоже не решает архитектурные проблемы ежедневно; те, кто решает, выдают «большую поставку» раз в полгода-год, и об этом рассказывают — tech talks, внутренние рассылки, презентации. Инженерные блоги, YouTube-доклады с конференций, white papers — та же самая коммуникация, только публичная; читать их перед интервью — не «читерство», а ранняя подготовка к работе: те же знания понадобятся после найма. Друг рассказчика, автор white paper по Haystack, устраивал обеды-читальни white papers — это и есть «среда», которую можно воссоздать снаружи.
Как это ложится на нас: наши материалы 1–4 и 6 — ровно такая же публичная коммуникация (статья Яндекса, Primer, опыт проходца, DDIA); к ним — инженерные блоги компаний из наших откликов (GitLab, Pennylane, Cleo, Runware) на фоновое чтение после первой секции. В ../methodology.md §6 это уже зашито как протокол тренировок и mock-сессий.
10. Что уносим в подготовку (сводка)
| Тезис Gabbard | Куда лёг |
|---|---|
| Архитектурная секция определяет уровень оффера → это второе по важности интервью | ../methodology.md §1 (роль кандидата), калибровка |
| Нет правильного ответа, есть выбор с трейдоффами | ../methodology.md §3 (шаблоны трейдоффов) |
| MAU — funny money; переводить в пик → concurrent → ноды; ошибка ×2 допустима | ../knowledge-base.md §2.1, §3 этого файла |
| Утверждать разумные границы из эмпатии к пользователю и продукту | ../methodology.md §1 (metrics first), §3 |
| Водительское кресло, keep going, хинт лучше ступора, незнакомое — вслух | ../methodology.md §3, блок «Правила поведения» |
| Breadth-чеклист «о чём ещё поговорить» (приватность, retention, стоимость, доступ) | ../methodology.md этапы 4 и 6 |
| Пассивность = отказ независимо от кода (кейс candidate review) | ../methodology.md §4, ошибка №2 |
| Контекст набирается публично (блоги, доклады, white papers) | ../methodology.md §6 (протокол), §5 (порядок чтения) |