Прошла конференция XP Days Ukraine 2018 и появилось чуть больше времени написать что-то интересное в канал. Сегодня я вернусь к теме собеседований и поделюсь своим видением второго этапа под названием «оценка профессиональных навыков». Данный этап следует за оценкой попадания в контекст найма, о котором я писал месяца 2 назад.
Итак, перед данным этапом собеседования я ставлю следующие цели:
- проверка конкретных практических навыков в нужном нам стеке технологий;
- понимание на какие грабли уже наступал кандидат и какие выводы сделал;
- умение копать в глубину и разбираться с новыми областями;
- умение рассуждать и подходить к решению задачи;
- проверка навыков технической коммуникации.
Чтобы эффективно достигнуть всех целей, собеседование должно быть построено очень чётко, разбито по тематике и содержать разнотипные вопросы/задания. Обычно я за 1.5 часа успеваю затронуть 5-6 крупных тем.
Все темы подбираются сугубо из практических нужд нанимающей команды. Я не спрашиваю как тюнить JVM, если на практике это не является регулярной задачей. Или как сбалансировать красно-чёрное дерево при том, что человеку нужно будет писать микросервисы для интеграции с внешними хранилищами данных. Это попросту не имеет смысла. Я верю, что имея адекватные навыки для копания в глубину и решения новых задач, человек справится с подобными задачами, а правильная команда ему в этом поможет.
Каждая тема начинается с конкретной задачи, причем она не имеет единственного решения. Обычно есть минимум 2-3 альтернативы, поэтому для кандидата это больше открытый вопрос и он хорошо показывает его практический опыт в определенной области. В рамках решения задачи я проверяю как кандидат уточняет задачу, выясняет детали, предлагает направления решения, спрашивает о доступности той или иной опции. Все это очень сильно будет напоминать его повседневную работу в команде. Я могу где-то натолкнуть кандидата на одно из решений, чтобы посмотреть как он сможет раскрутить его и решить задачу.
Такой подход позволяет на любом этапе углубиться вопросами и нащупать границы по глубине знаний и имеющемуся опыту в теме. Обычно в каждой теме я делаю 1-2 таких попытки углубиться. Если видно, что знания и опыт очень поверхностные, то я не лезу глубже, чтобы не демотивировать кандидата и не сбивать его с дальнейших тем.
Также я стараюсь сделать так, чтобы в каждой теме кандидат нащупал и дал хотя бы часть "правильного ответа". Это добавляет ему уверенности и не мешает продолжать общаться на следующие темы при "неудачном прохождении" предыдущей. Еще можно использовать юмор, чтобы сгладить ситуацию в случае ступора, а также досрочно перейти к следующей теме.
Одна из задач обязательно делается так, что верного решения не существует в предложенном техническом контексте. На такой задаче сразу проверяется как поведет себя кандидат в случае, если, кажущееся на первый взгляд подходящим, решение начнет рассыпаться на глазах. Сможет ли он предложить альтернативы, план дальнейших действий, варианты выхода из ситуации? Также я проверяю как кандидат будет защищать свое решение и вести технологическую аргументированную дискуссию.
Еще одна прикладная задача обязательно затрагивает ту область, которую кандидат считает своей наиболее сильной стороной. Цель этой задачи посмотреть, насколько "прокачался" кандидат в той области, которая ему нравится и в которой он считает себя далеко не новичком. Ведь зачастую приходится сталкиваться со специалистами, которые абсолютно все знают сугубо поверхностно и не имеют навыка "копания в глубину".
Ну и наконец, в части задач заранее предусмотрены разные решения в разных поколениях/версиях технического стека. Это сделано для того, чтобы проверить, насколько кандидат "смотрит по сторонам" и следит за изменениями в своем рабочем стеке. Это также дает представление о том, насколько человек занимается самообразованием и пытается искать лучшие решения для текущих проблем.
Пост получился длинным, поэтому в следующий раз я расскажу об оценках и выводах по результатам такого собеседования. Удачных собеседований! :)