«Расскажите о проекте» — это не приглашение пересказать резюме и не демо на 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».
Не вшивайте вилку и причину ухода в рассказ о проекте. Это другие вопросы. Здесь — работа.