Привет, меня зовут Артём Пулявин, с 2022 года я занимаю позицию технического директора в Ситидрайве и отвечаю за всё IT в компании — от закупки серверов и ноутбуков до разработки и найма новых членов команды. За 20-летнюю карьеру я провёл более 1 000 собеседований и взял на работу более 100 айтишников. А в Ситидрайве за последние 2 года увеличил команду в 3 раза.
На Хабре уже есть статья от нашего HR-менеджера о том, как в компании выстроен процесс найма IT-специалистов. В этом материале я расскажу именно про этап технического собеседования: на что обращаю внимание при подборе новых членов команды в Ситидрайве и по каким критериям оцениваю кандидатов, а также дам рекомендации, как вести себя на финальном собеседовании.
Обычно на интервью я проверяю, насколько хорошо кандидат умеет писать код, и оцениваю, комфортно ли ему будет работать с нашим темпом, командой, вольётся ли он в культуру компании. Поэтому для себя я разделяю процесс финального собеседования на 3 составляющие: первичный скрининг резюме, оценка hard и soft skills.
ЭТАП 1: Скрининг резюме
Перед каждым собеседованием я просматриваю резюме кандидата — оцениваю насколько он соответствует нашим внутренним критериям и составляю список вопросов для уточнения. Да, у нас есть критерии идеального кандидата. Настолько идеального, что соответствовать им всем невозможно, я и сам по нескольким из них не подхожу ?
Логично спросить — а зачем вы тогда вообще их придумали? Всё просто — они помогают выбрать между 2 кандидатами и, опираясь на эти критерии, я могу собрать список уточняющих вопросов на собеседовании. Ниже приведу примеры.
Критерии для сотрудников уровня middle и senior
Опыт работы в нашем стеке. Приветствуется, если кандидат уже работал на Go в 2–3 компаниях до нас. Но если он пишет, например, на C#, а на Go работал полгода, и при этом проявляет большой интерес к переходу на наш стек, это не станет препятствием для найма. И мы, как компания, даже поможем с обучением. На собеседовании я задам уточняющие вопросы, чтобы понять мотивацию перехода на новый стек, и убедиться в серьёзности намерений.
Опыт в продуктовой разработке. Кандидат должен понимать особенности продуктовой разработки, а ещё лучше — знать наш продукт. Здесь будет плюсом — заранее изучить предметную область, с которой предстоит работать. При этом, если кандидат не успел подготовиться и почитать подробно про деятельность компании — «минус балл» тоже не получит.
Множественный опыт работы. Для меня важно, чтобы кандидат имел опыт работы в более, чем 3 компаниях. Также если человек отработал 10 лет в одном IT-гиганте и вырос с junior до senior — это положительный фактор. Однако, если это небольшая компания с узким стеком — я буду задавать дополнительные вопросы, чтобы понять, насколько человек гибкий. Мне важно, чтобы кандидат смог быстро влиться в коллектив, вникнуть в наши проекты.
Каждое место работы от 1 года, есть места от 2 и более лет. Компаниям выгодно, чтобы сотрудники работали как можно дольше, и если человек каждый год менял места работы, то какая вероятность, что у нас он проработает дольше? Это как раз тот маркер, по которому я сам не взял бы себя на работу несколько лет назад. У меня был опыт быстрого перехода из компании в компанию с разными проектами. Так, например, руководил разработкой электронной читалки в Alpina Digital, потом отвечал за серверную разработку FoodMate, которая влилась в Delivery Club, а после делал то же самое в FoodFox, которая стала Яндекс.Едой. В такой ситуации я буду уточнять, чем обусловлены такие переходы? Карьерный рост? Выгорание? Поиск себя? Закрылась компания?
Список критериев для junior специалистов
Самый важный критерий — горящие глаза, которые жаждут новых знаний и опыта. Я ищу инженеров, которые готовы браться за любые задачи и не боятся ошибаться. На собеседовании мне важно понять — сможет ли кандидат быстро учиться на ошибках, чтобы не допускать их в дальнейшем? Открыт ли к обратной связи? Инициирует её?
ЭТАП 2: Проверка Hard skills
Дойти до этапа технического собеседования при найме — это уже успех. Чтобы этот успех с максимальной вероятностью превратился в оффер, полезно понимать логику нанимающего менеджера.
На техническом интервью мне важно понять, как кандидат перфомит — сколько задач может закрыть за ограниченное время. А также оценить, как он работает в команде. Для этого заготовлено 4 стандартных задачи.
Если человек сделал одну задачу — довольно слабо, но хорошо для джуна.
Две задачи — крепкий середнячок.
Три — крутой «перформер».
Ну а если кандидат успел решить все 4 задачи — это топовый сотрудник, редчайший случай. У меня за всю карьеру таких было всего пару человек.
Разные задачи проверяют разные навыки
Первая задача проверяет, насколько хорошо соискатель знаком с языком — знает ли основные его структуры (циклы, функции, ветвления), обладает ли семантической базой языка. Кандидат должен показать, что не боится использовать дополнительные структуры данных, поэтому задачу можно решить в лоб, а можно попытаться использовать готовые алгоритмы и структуры.
Во второй задаче главное требование — оптимизация кода. Её выполнение показывает, может ли кандидат сэкономить число проходов, трату оперативной памяти. И это требование не озвучивается изначально — его нужно «вытащить» при получении задачи.
Если кандидат обе задачи решает с ходу, у меня заготовлена третья и четвёртая с повышенным уровнем сложности, но, как правило, на третьей все уже застревают — она уровня senior, да и время собеседования поджимает.
Задачу можно сделать на разном уровне качества. Ключевое здесь — обговорить этот уровень до того, как начинать писать код. Банальный вопрос: «Что требуется: чтобы код просто выдавал нужный результат или чтобы это было оптимизированное решение?» — поможет не тратить лишнее время и покажет вас инженером, который может вести конструктивный диалог с заказчиком.
Можно взять подсказку
Бывает так, что кандидат упирается в одну задачу — иногда прямо в первую — и просто не может двигаться дальше. Опять же, это можно решить не только умением программировать, но и умением говорить. Например, напрямую сказать: «Эта задача совершенно не идёт. Есть ли другая, на которой я могу себя показать?». Я либо попытаюсь направить в нужное русло, либо просто дам следующую задачу.
Спрашивать напрямую, что тут нужно делать — не лучшее решение. Продемонстрируйте ход своих мыслей, и это поможет получить дельный совет при минимальном минусе в карму: «Есть сомнения. У меня вот такая идея: <описание>. Я мыслю в правильном направлении или я зашёл не туда?».
Не стесняйтесь уточнять «правила игры» до написания кода и общаться в процессе. Лучше взять 2–3 подсказки и решить 3 задачи, чем решить 1 задачу, но без подсказок.
Можно даже загуглить!
Поскольку я прошу писать код в редакторе без автодополнения, я допускаю, что человек может что-то забыть — например, как называется нужная структура или функция. И да, гуглить можно. Быстро найти ответ в интернете — тоже ценный навык, без которого ни один разработчик не обходится. И нет, я не боюсь, что кандидат найдёт в сети решение задачи, — этих задач нет в открытом доступе.
Надо быть готовым во время собеседования:
Работать быстро и перфомить.
Общаться с заказчиком.
Понимать, что задачи могут быть типовыми и нетиповыми.
Оптимизировать предложенное решение.
ЭТАП 3: Проверка Soft skills
Техническое собеседование — это не только про написание кода. Инженер примерно 70% рабочего времени пишет код и 30% — общается с коллегами, менеджерами и другими командами. На техническом собеседовании соотношение такое же: 70% направлено на оценку написания кода и 30% — на то, как кандидат взаимодействует со мной в роли заказчика.
Я часто проверяю soft skills во время решения задач на техническом собеседовании — уже на том этапе я могу понять, как человек будет справляться с разными ситуациями. По сути, когда я даю какую-то задачу, то смотрю не только, как кандидат её решает, но и как принял, какие вопросы задаёт, как комментирует работу, доводит ли до конца.
Я также задаю уточняющие вопросы, чтобы проверить базовые качества эффективности кандидата: направленность на результат, саморазвитие, партнёрские отношения, ответственность и эффективность.
Направленность на результат
Я хочу понять, как кандидат решает сложные задачи и преодолевает трудности, поэтому могу задать следующий вопрос: как ты решил проблему, когда не успевал выполнить задачу вовремя? Здесь меня интересуют реальные примеры, чтобы я мог оценить, соответствует ли его действие нашей корпоративной культуре.
Направленность на саморазвитие
Нормально, если кандидат не знает наших подходов и паттернов, проблематику бизнеса, наших клиентов. И здесь мне нужно понимать, насколько быстро человек вольётся, поэтому я могу спросить, чему научился на последней работе? Какую новую технологию изучил? Чему хочет научиться у нас?
Направленность на партнёрские отношения
Мы оцениваем навыки коммуникации кандидата с нами, чтобы предположить, как он будет общаться с другими членами команды. Важно, чтобы он мог установить контакт и быть открытым для понимания другой точки зрения. Я обычно прошу рассказать о ситуации, когда кандидат признал свою ошибку. Как он взаимодействовал с продактом? Были ли конфликты, которые нужно было разрешить?
Ответственность
Чтобы оценить уровень ответственности, я могу спросить, что кандидат предпринимал, когда его работа не соответствовала результатам заказчика? Бывало ли, что результат работы не соответствовал его ожиданиям?
Пройти собеседование — это попасть в ожидания. И я также пытаюсь попасть в ожидания кандидата. Рассказываю о компании, стараюсь заинтересовать нашим стеком. Рассказываю про цели компании на год, и как кандидат может развиваться вместе с нами и достигать своих личных целей.
Оценка и обратная связь
Так как у нас несколько этапов собеседований — на каждом из них с кандидатом общаются разные сотрудники и оставляют фидбэк для нанимающего менеджера. Он ознакомляется с обратной связью и принимает решение — делать кандидату оффер или нет. Если он готов работать с рисками, которые обозначили коллеги — высылаем оффер, если не готов, то передаём обратную связь рекрутеру, который возвращается к кандидату.