Привет! Я Серёжа Копытов, iOS TechLead. Веду собесы в Альфе с 2020 года, многие разработчики и техлиды в команде прошли через меня. Уже через полгода интервью я активно включился в настройку подбора и сейчас основное время занимаюсь его развитием.
В статье расскажу, как выглядит наше техническое интервью, как оно стало таким, какие случаи я встречал и какие выводы сделал. Читайте, если сами общаетесь с кандидатами или проходите собеседования в IT и хотите понять, как продуктовые компании принимают решение.
Что было не так с собеседованиями в iOS
Распространённые проблемы в собеседованиях, часть из них встречалась и в Альфе:
Хаотичный процесс. Нет прописанной методики — кто собеседует, что отвечать на часто задаваемые вопросы, как вести интервью.
Каждое техническое собеседование занимает 1-2 часа двух тимлидов. Это сложно организовать, дорого для компании и нерационально. Один технический собеседующий будет субъективен, есть риск, что он не разглядит скилы за пару созвонов и не успеет дать обратную связь.
Очень большой входящий поток. Порой тяжело распределить его быстро, и кому-то приходится неделями ждать собеса. У меня от фидбека HR до выхода в команду прошёл почти месяц, сейчас мы это исправляем.
Очень шаблонное техинтервью. Сейчас стараемся спрашивать только то, что напрямую касается проекта и ситуаций в команде.
Как мы модернизировали процесс
Мы начали с того, что детально прописали процесс и собрали базу знаний — состав лидов, роли, must-have навыки соискателей, их каверзные вопросы. Прописали скелет собеседования, темы, по которым задаём вопросы. Если мы решим привлечь нового разработчика к собеседованиям, он может найти в базе ответы на 90% вопросов. Если появляется новый HR — тоже отличная вводная.
На собеседованиях у нас два технаря. Профиты такой системы:
Минимизация субъективности. Обычно сразу после встречи мы созваниваемся вдвоём, сверяем впечатления и резюмируем, на каком уровне кандидат, берём ли его.
«Первый пилот» ведёт интервью, второй стенографирует. Собеседующие могут чередоваться и разгружать друг друга.
Шеринг знаний в компании. Постоянно микшируя интервьюеров, за короткий срок можно побыть на собесе со всеми в команде, понаблюдать за коллегами, обменяться опытом.
Как сейчас выглядит собеседование
HR проверяет резюме, звонит кандидату и задаёт базовые вопросы на харды. Здесь всегда есть скидка на волнение и искажение восприятия. Главное — отсеять явно неподходящих.
Технический скрининг на полчаса с «первым пилотом».
Техническое собеседование — звонок на полтора-два часа с двумя разработчиками из Альфы.
Знакомство с командой. Этот этап появился вместо встречи с IT-лидером. На нём кандидат задаёт предметные вопросы о проекте, а команда смотрит, с кем ей дальше работать.
Вас приняли — вы великолепны. Вы не приняты — даём адресный фидбек, почему отказываем. Если всё хорошо, но знания нужно подтянуть, можем провести повторное интервью через некоторое время. Расстаёмся друзьями и оставляем личный контакт.
Тестовое задание: друг или враг
Тестовые задания мы не даём принципиально.
Как по мне, это актуально только для вакансии стажёра, чтобы хоть примерно понимать, насколько хороший новичок перед вами.
Для стажёра тестовое задание — как вступительный экзамен на учёбу, чем стажировка, по сути, и является.
Для джуниора это уже может быть не прикольно, но бывает необходимо, если нет примеров кода.
Для джуниора+ и выше тестовое задание — бессмысленно потраченное время. Кто-то откажется его делать, и мы потеряем хорошего кандидата.
К тому же, сложно составить тестовое задание, по которому реально что-то оценить. Или задание будет коротким, с ним и джун+, и сеньор справятся плюс-минус одинаково. Или слишком большим, и никто не захочет его делать, а потом никто не захочет проверять.
На случай супернестандартной роли или команды можно дать тестовое задание, но за три с лишним года я не помню, чтобы хоть раз такое было.
Что спрашиваем на техническом интервью
Вот на что мы смотрим из скилов:
Знание языка, его возможностей, современных подходов и фреймворков.
Знание платформы, так как именно этим и придётся заниматься в команде.
Чуть-чуть на многопоточку: базовое понимание принципов работы в многопоточной среде и возможные проблемы.
Алгоритмическое мышление: не заставляем вращать красно-чёрные деревья, но предлагаем справиться с алгоритмической задачкой.
Навыки поиска решения — не обязательно знать всю теорию наизусть, но обязательно уметь мыслить и искать подсказки для решения задачи/ответ на вопрос.
Как кандидат реагирует, вписывается в диалог.
Один из моих любимых вопросов на софты: месяц без задач в Jira — что будешь делать? На него нет неправильного ответа, как нет и правильного. Все ответы интересные и многое говорят о кандидате. Кто-то отвечал: «Значит ничего делать не буду, пойду в игры играть». Ну, и что в этом плохого? Если тебе платят на работе, но прямо говорят, что задач нет, почему бы не расслабиться немного.
Самые частые ответы: «Пойду рефакторить что-нибудь». Как в законе Паркинсона: «Задача занимает ровно столько времени, сколько на неё выделили». Я бы тоже пошёл прикручивать что-то новое, чтобы сделать проект ещё более идеальным, такова природа программиста.
Отзывы прошедших в команду
Я спросил ребят, которых собеседовал 2-3 года назад, что они запомнили об интервью в разных компаниях.
Максим Витовицкий
iOS TechLead
В одной компании, куда я пробовался, был странный этап знакомства с командой. По ощущениям, никто не был готов к встрече, и, по сути, я её вёл. Ещё бывает, что ведущие технического интервью зарываются в один вопрос и не дают показать кандидату свои знания в других темах.
В Альфе мы широко прошлись по iOS-разработке: обсуждали ARC, многопоточность, Unit-тесты, архитектурные паттерны, общались в целом про Swift, решали платформенные задачи (UIKit).
Когда я заходил в тупик, меня направляли в нужную сторону, и я хорошо справился с задачами. На интервью проявились мои пробелы в некоторых темах, что не стало большой проблемой. Оценивалось не знание конкретных аспектов iOS, а способность адаптироваться и находить решения задач, которые ты до этого не встречал.
Дмитрий Ставицкий
iOS TechLead
Собеседующие в Альфе действительно пытались определить мой технический уровень, при этом сохраняя дружелюбную атмосферу. Сам по себе собес мало отличался от других топовых российских IT-компаний: нескольких секций с решением практической задачи, плюс немного теории по теме.
Из того, что запомнилось — меня попросили написать тест на свой код. Хоть тесты до этого момента я практически ни разу не писал, интервьюеры помогли направить мысли в нужную сторону, благодаря чему задача была успешно решена, и по итогам собеседования меня пригласили к сотрудничеству, которое, кстати, продолжается уже третий год.
Что я заметил на собеседованиях
Поделюсь стоп-факторами, с которыми кандидат точно не пройдёт моё собеседование:
Разговор с командой на разном языке. Иногда в прямом смысле. Был случай, когда кандидат всё время переходил на английский. Я смог ему ответить, но в командах нет требований к знанию английского. Пока у нас нет интернациональных команд, и основной язык общения — русский, если будет по-другому, велком.
Игнор контекста собеседования. У нас нет дресс-кода и строгих рамок. Быть в худи, а не в пиджаке, или засветить кота в кадре — это ок. Но однажды кандидат курил огромный кальян на камеру. Совсем не подумал об интервьюерах, может, я тоже кальян хочу, а он не предлагает. Созваниваться из вагона метро или топлес — тоже не вариант.
Опыт не мэтчится с продуктом. Крутой мобильный разработчик, который горит видеодизайном, заскучает в нашей команде. В приложении банка для него пока нет постоянных задач.
Гуглёж. Если человек пошёл в поисковик пару раз, значит он ищет то, что знал, но забыл. Искать ответ на каждый вопрос — перебор.
Вопросы к лиду только об уровне зарплаты. На первой встрече с кандидатом мы определяем скилы и до контрольного созвона всё равно не сможем ответить.
Токсичность. Реальный пример: «Разве меня могут собесить две девушки? Они же явно ниже уровнем, чем я». Если кандидат ругается или давит на интервьюера, он у нас не приживётся. Возможно, в одиночку он крутой спец, но нам нужен командный игрок.
Высокомерие. Бывает, кандидат не может справиться с простой задачей, но вместо того, чтобы пытаться её решить, просит скипнуть, потому что «У меня знания обширные, а мы всё время тратим на какую-то ерунду».
Нет желания развиваться. Поднимать общий уровень комьюнити — круто. Мы делаем это, участвуя в митапах и собирая собственные, но Альфа — не бесплатные курсы по программированию, а крупный серьёзный проект. Вкладывая ресурсы в развитие, мы ожидаем этого самого развития, а не ухода через полгода на другое место с нашим багажом знаний.
Кандидат не пытается справиться с проблемой. Я встречал вопросы в духе: «Зачем эта задача нужна? В реальности такого не будет». С одной стороны, разработчик должен думать шире, а просто писать код может и ChatGPT. В реальности если на каждую задачу говорить: «А зачем это вообще надо, я не хочу это делать», пользы от разработчика не будет.
Каждый собеседующий всегда предвзят. Именно поэтому у меня есть «второй пилот», с которым мы приходим к среднему арифметическому. Я и сам могу быть «вторым пилотом», отдав первенство коллеге, он проведёт собес сам, а я проконтролирую, что всё хорошо.
Советы кандидатам перед интервью
Перед собеседованием в продуктовой компании я бы сказал разработчику:
Не бойся: приходить, ошибаться, предлагать. Тот, кто боится, никогда не добьётся желаемого. Мы, интервьюеры, тоже были в роли соискателя, всё понимаем и не кусаемся, если нас не кусать. Лучше предложить ужасное решение, чем не предложить ничего. В конце концов, программистов без костылей не бывает.
Разберись в стеке. Попробуй предположить, какие вопросы могут быть на интервью. Обычно все крупные компании спрашивают плюс-минус то, что нужно в их приложении. В компании, которая делает приложение для доставки еды, вряд ли будут много спрашивать про показ видео с удалённого сервера.
Повтори материал. Если понимаешь, что забыл темы, можно освежить память, но, если чего-то изначально не знал, нет особого смысла углубленно готовиться. Скорее всего, на собеседовании тебя попросят подумать и вывести ответ самостоятельно. Если не будешь лениться и будешь думать, всё получится, и это будет намного лучше, чем выдать зазубренный ответ (а это всегда заметно).
Не стесняйся своего опыта. Рассказывай всё, что сам хотел бы услышать в подобной ситуации. Самая интересная фича, самый большой факап, всё, что покажет, что ты не робот, а такой же человек, но ты растёшь и желаешь расти дальше именно в этой команде.
Здраво оцени силы. Все мы хотим на вакансии сеньоров и лидов, но всему своё время. Если будешь расти планомерно, обязательно придёшь к этому. Система собеседований несовершенна, ты можешь попробовать обмануть её и устроиться на вакансию на вырост, но кто от этого выиграет? Скорее всего, такое сотрудничество продлится недолго, и опыт будет не самый лучший.
Выводы для интервьюеров
Вот что я бы посоветовал себе в прошлом, когда только начинал собеседовать:
Не бойся — главный совет и соискателям, и начинающим интервьюерам. Помню, как волновался в первые разы, особенно, когда понимал, что от моего мнения зависит чья-то будущая работа. Со временем просто понял, что это обычное дело, а в хороших процессах цена ошибки сводится к минимуму.
Старайся понять уровень кандидата, а не скорость ответов. Основная техническая составляющая в собеседовании — задачи из заготовленного списка. Важно не сверить ответ кандидата и правильный ответ, а понять, как кандидат мыслит, и в случае чего направить его в нужную сторону.
Никогда не пытайся самоутвердиться за счёт кандидата. Многие из нас попадали на собеседования, где интервьюер вёл себя некрасиво, валил глупыми вопросами и ухмылялся, если не справляешься. Вспомнил? Так вот, не будь таким. Никогда. И точка. Интервьюер для кандидата — это лицо компании, и, даже если на своё лицо тебе всё равно, подумай о команде.
Попробуй свести собеседование к неформальной беседе. Для кандидата собеседование — ужасный стресс, не нужно добавлять ему лишнего. По возможности разгрузи обстановку, чтобы вам удобно было общаться и обсуждать задачи.
Наши планы
У нас в бэклоге по процессу собеседований:
Раньше у нас был бот, который генерировал для рекрутеров скрининг, чтобы он всегда получался рандомным. Потом его подзабросили. Сейчас мы разрабатываем бота 2.0, чтобы проводить скрининг онлайн.
Делать собеседование ещё более неформальным и вовлекающим. У нас даже была идея проводить интервью за настольной игрой.
Расширять методологии оценки. Например, написать утилиту или нейросеть, которая будет определять примерный уровень кандидата. Так мы получим три оценки: от двух интервьюеров и от программы, а значит ещё больше снизим субъективность.
Мы продолжим улучшать наши собеседования. Закроем одни проблемы — появятся другие. Так будет всегда, и это нормально, ведь мир не стоит на месте, появляются новые особенности, фреймворки, люди меняются, а значит и собеседования должны развиваться. О следующих крупных изменениях расскажем в новых статьях.
Если вы загорелись работать в нашей команде, смотрите вакансию на Хабре и пишите нашему HR Таисии.