«Расскажите о проекте» — это не приглашение пересказать резюме и не демо на 15 минут. Интервьюер просит карту: какая была задача, что делали вы, какое ограничение, какой результат, чего сознательно не сделали. Если уехать в «мы внедряли Agile и микросервисы», вы потратите слот, из которого должны были вырасти технические follow-up.
Ниже — каркас на две-три минуты, два полных рассказа вслух и типичные дыры: «мы» без роли, космос про масштаб, учебный проект, который притворяется продом. Это соседний навык к самопрезентации: там 60–90 секунд про траекторию, здесь — один контур в глубину. Готовить лучше до техэкрана, в том числе в подготовке к интервью.
Коротко:
- Три минуты максимум, потом пауза. Не монолог на десять.
- Формула: задача → ваша роль → ограничение → действие → результат → что не сделали / что иначе.
- Цифры скромные и честные. Враньё про миллионы всплывает на втором вопросе.
- NDA: говорите тип системы и свой кусок, не имена клиентов и не секреты.
- Учебный проект так и называйте. Скрытый учебный разваливается на «кто пользователи».
Зачем этот вопрос ставят после «о себе»
Самопрезентация выбирает, о чём будет разговор. Рассказ о проекте даёт интервьюеру, куда копать: индекс, инцидент, конфликт, оценка. Поэтому проект должен стыковаться с вакансией. Backend в платежах — не «я ещё верстал лендинг». QA — не «команда писала на React», если вы не закрывали приёмку.
Второй смысл — отличить вклад от присутствия. «Мы делали платформу» слышат каждый день. «Я закрывал идемпотентность списаний и разбирал вот этот инцидент» — уже экран. Если не можете отделить свой кусок, выберите другой проект, даже меньший.
Каркас на 150–180 секунд
- Контекст одной фразой. Домен, тип системы, для кого. Без истории компании с 2014 года.
- Задача. Что было больно: тормоза, дубли, ручной регресс, очередь писем.
- Ваша роль. Зона: сервис, пайплайн, набор кейсов, отчёт. Не «фуллстек всего».
- Ограничение. Время, NDA, легаси, один человек, нельзя трогать схему.
- Действие. Два-три конкретных шага, не список технологий.
- Результат. Измеримый или наблюдаемый: меньше 5xx, регресс 4 часа → 1, дублей нет.
- Граница. Что не сделали, что бы сделали иначе, где дыра осталась.
Пункт 7 обязателен. Человек без границы звучит как слайд. Человек с границей приглашает follow-up — это и нужно. Тот же принцип, что в хорошем описании в CV: см. проекты в резюме. На голосе — чуть живее, те же факты.
Скрипт: коммерческий backend, middle
Вакансия: Python, платежи, удалёнка. Кандидат год в биллинге.
Последний год я закрывал сервис статусов платежей: API для кабинета и для поддержки, Postgres, очередь писем об смене статуса. Задача, с которой пришёл контур: поддержка не могла сказать клиенту, оплата прошла или нет, потому что повторный клик и таймаут провайдера плодили «непонятно».
Моя зона — запись платежа и ключ идемпотентности, не весь биллинг и не фронт. Ограничение: нельзя было неделю переписывать провайдера, только наш слой. Сделал уникальный индекс по ключу, повтор с тем же ключом отдаёт тот же статус, ретраи воркера с тем же ключом. Письма отрезали от «каждого ретрая» — только смена терминального статуса.
Результат: инцидентов с двойным списанием на нашем слое не было после выката, поддержка получила три состояния вместо «неизвестно». Не делал: шардирование и замену провайдера. Трафик скромный, сотни операций в час, не миллионы — зато инцидент и ограничение настоящие. Если копать — могу нарисовать таблицу ключа и что отдаём на повторный POST.
Почему это работает: есть боль, роль, ограничение, действие, результат, приглашение копать. Нет гимна Kafka. Follow-up предсказуем — к этому и готовьте схему.
Скрипт: учебный или junior, без штата
Вакансия: junior frontend. Есть кабинет заказов. Не извиняйтесь в первой фразе.
Учебный кабинет заказов: список, фильтр по статусу, форма, mock API. Это не прод и не магазин на миллион строк — так и написано в README. Задача, которую ставил себе: не потерять ввод при ошибке валидации и не показать старый список, когда фильтр уже сменился.
Делал один: React, TypeScript, состояние формы отдельно, fetch с AbortController на смене фильтра. Ограничение — около двух недель вечерами, без авторизации и без тестов, это в README честно. Результат: демо открывается, форму можно разобрать по компонентам. Самый неприятный баг, который сам поймал: медленный ответ «все заказы» перетирал быстрый «оплаченные» — лечится отменой запроса.
На созвоне могу пройтись по форме и по этому багу. Не притворяюсь, что это коммерческий контур. Отклинулся, потому что у вас в вакансии кабинеты и формы, это тот же тип работы.
Честный учебный сильнее надутого «стартапа». Интервьюер всё равно спросит пользователей. Лучше сказать первым.
NDA, команда, «мы»
Под NDA: отрасль, тип (биллинг, кабинет логистики), ваш кусок, класс инцидента. Без логотипа клиента, без схем, которые нельзя. «Не могу ничего сказать» — слабый ход; «могу про паттерн идемпотентности без имён» — нормальный.
«Мы» допустимо на контексте. На действии — «я». Если кусок делали вдвоём, разделите: «я — ключ и тесты, коллега — письма». Вранье про соло вскроется, если позовут парное интервью.
Если проект большой, выберите один срез. «Расскажу про платежи, не про всю платформу» — взрослая рамка. Десять сервисов за три минуты — каша.
Цифры и масштаб
Нормально: «десятки тикетов в день», «релиз раз в неделю», «очередь до нескольких тысяч», «регресс занимал вечер». Плохо: круглые миллионы без деталей инфраструктуры. Спросят, как считали, и вы начнёте плавать. Если цифры нет — качественный результат: «поддержка перестала эскалировать этот класс», «перестали деплоить latest».
Не вшивайте вилку и причину ухода в рассказ о проекте. Это другие вопросы. Здесь — работа.
Скрипт: QA и DevOps — тот же каркас, другой факт
Каркас не меняется. Меняется единица доказательства.
QA. Контур — кабинет заказов, релизы раз в неделю. Моя зона — регресс оплаты и приёмка акций, не весь продукт. Ограничение: фикстуры акций собирали руками, автотестов не было. Задача: после акции на проде промокод применялся дважды. Я не покрыла кейс «тот же пользователь, второй заказ сразу». Дальше: кейс в регресс, явный пункт в шаблоне приёмки, запрос фикстуры. Результат: этот класс больше не уезжал. Не делала: полный UI-автотест за спринт — не влезало. На созвоне могу разобрать отчёт и что режу, если до релиза два часа.
DevOps. Контур — два сервиса, Jenkins, образы в registry, прод на ВМ и кусок в Kubernetes. Моя зона — пайплайн и деплой API, не вся сеть. Ограничение: продовый Dockerfile писал не я, менять базу образов долго согласовывать. Инцидент: 502 после выката, пайплайн зелёный, причина — переименованный env. Откатил digest, потом readiness на БД и проверка env в пайплайне. Не делал service mesh. Онкол по ротации, рунбук на одну страницу. Готов открыть джобу и манифест без секретов.
Если проект «делал всё» — всё равно выберите одну боль. Три боли за три минуты не запоминаются. Одна боль с ограничением запоминается и даёт follow-up.
Как отвечать на follow-up, не переписывая монолог
После паузы вас спросят «почему не очередь», «какой индекс», «кто принимал решение отключить консьюмер». Отвечайте на заданный слой, не начинайте проект заново. Держите в голове схему: вход, данные, отказ, мониторинг. Если не знаете — «это было вне моей зоны, знаю вот это». Граница лучше фантазии.
Если спросили про конфликт: STAR на 60 секунд, без яда. Про оценку: что не учли, как резали. Про прод-баг: что пропустили и что изменили в чек-листе. Не превращайте проект в сериал про токсичность.
Подготовка: один проект, не пять начерно
- Выберите один контур под вакансию. Второй — запасной, короче.
- Напишите семь пунктов каркаса тезисами, не эссе.
- Скажите в диктофон. Вычеркните стек, который не стыкуется.
- Нарисуйте на бумаге одну схему. Её спросят.
- Соберите 3 follow-up, которые сами бы задали, и ответы на минуту.
Прогоните рядом с HR-скринингом: на скрининге проект короче, на техническом — глубже, факты те же.
Не готовьте проект, которого нет в резюме: интервьюер откроет файл и не найдёт. Не готовьте пять проектов по минуте — останетесь без глубины. Если стек вакансии React, а ваш лучший контур на Django, либо несите учебный кабинет, либо честно скажите «коммерческий бэкенд, фронт — учебный, вот граница». Смешивание «я всё» без факта хуже узкого рассказа.
Запишите на карточке три числа, если они есть: срок, объём, до/после. «Регресс с вечера до часа», «дублей 0 после индекса», «очередь не росла после потолка ретраев». Пустая качественная фраза «стало лучше» не держит follow-up. Если числа нет — назовите наблюдаемое поведение поддержки или релиза. И потренируйте остановку: таймер 2:30, дальше тишина. Большинство черновиков жирнее, чем кажется.
Частые вопросы
Что, если все проекты под NDA?
Один учебный или тестовый без NDA плюс обезличенный коммерческий паттерн. Полный молчащий NDA без паттерна выглядит как нечего сказать. Тестовое без запрета выкладывать — тоже проект.
Можно ли рассказывать про чужой код, который вы только сопровождали?
Да, если честно: «сопровождал, инцидент вот этот, изменение вот это». Не присваивайте архитектуру, которую не принимали.
Сколько проектов готовить?
Один глубокий, один запасной. На экране всё равно копают один. Пять названий без глубины хуже.
Что делать, если перебили на второй минуте?
Остановиться, ответить, не дочитывать речь. Это хороший знак: пошли вглубь. Каркас для того и нужен, чтобы можно было отрезать хвост.
Нужно ли нести ноутбук с демо?
Если попросили — да. Если нет — не навязывайте 20 минут кликов. Предложите: «могу открыть репозиторий на 10 минут». Ссылка в резюме должна открываться без пароля.
Помогает ли письмо до интервью?
Да, если указывает на тот же проект. Короткое — шаблоны, черновик — сопроводительное. На самом рассказе письмо уже не заменяет голос.
Что сделать сейчас
Выберите один проект под конкретную вакансию. Заполните семь пунктов каркаса. Запишите на диктофон и обрежьте до трёх минут. Нарисуйте схему на одном листе. Завтра скажите это вслух ещё раз уже как на экране, не как «ну я помню».
Роли, под которые собираете рассказ, смотрите в каталоге — и готовьте контур под объявление, не универсальную речь «про все мои репозитории».
Если интервью завтра утром, не пишите новое эссе. Возьмите семь пунктов, вычеркните стек, который не стыкуется, поставьте таймер на три минуты. Второй прогон — только роль и ограничение, 40 секунд: это версия для скрининга. Третий — с паузой после результата, как будто вас уже перебили вопросом про индекс. Так вы не залипнете в монологе, когда живой человек кивнёт и спросит деталь.