За последний год-полтора мне довольно часто доводилось принимать участие в поиске новых сотрудников и собеседованиях. В этой заметке я поделюсь своими соображениями касательно того, где и как следует искать программистов, как правильно проводить собеседования, на что нужно обращать внимание и так далее. Вероятно, многое из написанного будет применительно не только к поиску программистов. Как всегда, я не претендую на знание абсолютной истины в этой области.
Если вы взялись за задачу поиска новых сотрудников, имейте в виду, что эта деятельность отнимает кучу времени. Пока вы ею занимаетесь, ни о каком полноценном выполнении своих непосредственных обязательств и речи быть не может. Убедитесь, что ваши коллеги и начальство это хорошо понимают.
В первую очередь нужно понять, какую задачу мы решаем. В какой отдел вы ищите программиста? На какую должность — технического директора, тимлида, стажера? Что будет входить в его обязанности? Если у вас несколько офисов, в котором ему предстоит работать? Рассматривается ли вариант с удаленной работой? Сколько времени выделено на поиски? Какого уровня человек вам нужен — рок-звезда, сеньор, мидл, джуниор, полный новичок? Очень важно иметь точные ответы на эти вопросы, это сэкономит вам кучу времени. Например, директор отдела может утверждать или думать , что он готов взять мидла на удаленку, но в действительности хотеть сеньора в офис. И все время, потраченное на мидлов-удаленщиков, окажется потраченным впустую. Тут нужно знать человека или людей, принимающего(-их) окончательное решение об офере.
Затем мы пишем текст вакансии. Если у вас открыто более одной позиции, не поленитесь написать более одной вакансии. Исключение из этого правила составляет случай, когда открыто две абсолютно одинаковые позиции (один отдел, один офис, одна должность, …). В тексте должны содержаться ответы на следующие вопросы. Кто работодатель? Где получить дополнительную информацию о нем? Где находится офис (адрес, ближайшее метро), можно ли работать удаленно? Что за должность? Какими задачами предстоит заниматься на этой должности? Знание каких технологий и на каком уровне требуется от кандидата? Какая вилка? Белая ли зарплата? Дополнительные требования — минимальный опыт работы, образование и тд. Гибкость графика, соц пакет, прочие плюшки. Как откликнуться на вакансию?
Серьезно отнеситесь к предыдущему пункту. Если вы не дадите ответы на часть вопросов, вам 30 раз зададут их по почте. Если вы по какой-то причине решите предоставить ложную информацию, кандидат все равно быстро об этом узнает и сильно расстроится, поэтому не вижу никакого смысла так делать. Пишите все, как есть.
Публикация вакансии. Тут возможна масса вариантов. Например, можно публиковать вакансии на сайтах типа хэдхантера или выбирать кандидатов самостоятельно и связываться с ними напрямую. Однако на практике я использовал другой подход. Вакансия публикуется в тематических списках рассылки, сообществах в социальных сетях, и так далее. Чтобы этот подход работал, нужно знать, где обитают нужные вам специалисты. Если вы этого не знаете, найдите того, кто знает. Такой подход оказался очень эффективным — всего за несколько дней приходило несколько десятков откликов. После «отсеивания» оставалось несколько вполне годных кандидатов.
Если вы стали заниматься поиском новых сотрудников, велик соблазн позвать на собеседование кого-нибудь из школьных друзей или родственников. В этом случае как следует взвесьте все за и против. Что будет, если кандидат не пройдет собеседование? Сможете ли вы работать вместе, если ему сделают офер? Велика вероятность, что вы не должны этого хотеть.
Для связи с кандидатами лучше всего использовать электропочту. Одновременно общаться с несколькими десятками людей совсем не так просто, как кажется, и может сильно изматывать. Чтобы не забыть, что кто-то из кандидатов ожидает ответа, используйте следующею схему. Если письмо лежит в вашем «Inbox», значит вы должны что-то на него ответить. Если письмо перенесено в папочку «Recruitment», значит вы на него уже как-то отреагировали и мячик теперь на стороне кандидата. Соответственно, GMail может оказаться не самым подходящим инструментом. Посмотрите на что-нибудь более похожее на Thunderbird или The Bat. Лично я предпочитаю Claws Mail .
Итак, вам на почту сыпется огромный поток резюме. Не спешите радоваться. Печально, но факт — более половины кандидатов скорее всего ни на что не годятся. Особенно если вы имели неосторожность написать, что ищете человека без опыта на удаленную работу и готовы платить ему кучу денег. К счастью, с большой точностью определить сомнительного кандидата обычно не сложно. Типичные признаки — куча ключевых слов в резюме при скромном опыте работы (никто и никогда не становился экспертом в PostgreSQL , MySQL, SQLite, Riak , RabbitMQ , MongoDB , Cassandra , Hadoop, Tarantool, Memcached и Redis за полтора года работы в одной-единственной компании), частая смена места работы, текст с ошибками и множеством смайликов, окончание института три месяца назад, резюме в формате docx.
Если вы сомневаетесь в кандидате, предложите ему тестовое задание. Как придумать хорошее тестовое задание — это отдельная тема. Задание должно быть не слишком унылым, более-менее соответствовать задачам, которые предстоит решать кандидату, и решатся за несколько часов работы в спокойном режиме. Например, около года назад мы искали программистов на Erlang , и в качестве тестового задания предлагали написать простенький socks5 прокси. Теперь GitHub кишит проксями на Erlang, и нам пришлось придумать новые задачки 🙂
Опыт показывает, что 95% кандидатов бесследно исчезают после получения текста задания. А те 5%, которые что-то присылают (пусть даже решение содержит пару ошибок), оказываются довольно интересными кандидатами. Так что, тестовые задания представляют собой хороший фильтр. Не имеет смысла ограничивать время на решение задачи. Если кандидат способен ее решить, то пришлет решение в течение недели, если нет — никогда не пришлет. Не давайте задачки кандидатам, которые кажутся подходящими. Они могут просто не найти времени на их решение, и в результате вы зря отсеете хорошего кандидата.
Теперь у нас есть множество предположительно неплохих кандидатов. Договоритесь с ними о дате и времени собеседования. По пришествии к консенсусу напишите резюмирующее письмо с днем недели, числом, месяцем и точным времени, о котором вы договорились. Укажите адрес вашего офиса, по возможности прикрепите схему, как до вас добраться. Объясните, на какой этаж нужно подняться, в какую дверь позвонить, кого спросить. Если на проходной нужно показать паспорт, напишите об этом. На всякий случай укажите свой мобильный телефон. Предварительно убедитесь, что у вас есть свободная комната и забронируйте ее на соответствующее время. Если кандидат находится в другом городе, можно пособеседовать его по Skype. В этом случае протокол тот же, только вместо адреса сообщите ваш идентификатор в Skype.
Хороший кандидат приходит вовремя или за несколько минут до начала собеседования. Бывает, что кандидат заблудился или по каким-то причинам опаздывает. Если он заранее звонит и предупреждает об этом, это нормально. Такое иногда случается.
На собеседовании не должно присутствовать много народу. Максимум — четыре человека, включая самого кандидата. Обычно собеседование длится часа полтора. Вопреки интуиции, это очень мало времени , поэтому придерживайтесь плана и графика. Хорошо зарекомендовал себя следующий план собеседования. Первые 10 минут — знакомство и небольшой рассказ о компании. Следующие 40 минут кандидат задает возникшие у него вопросы , а вы задаете вопросы, возникшие к кандидату. Не лишено смысла заготовить список вопросов. Из расчета 2-3 минуты на то, чтобы ответить на один вопрос, получаем, что вопросов может быть максимум штук 20. Вопросы должны соответствовать позиции. Если вы не работаете с Mnesia и эрланговыми релизами, нет смысла спрашивать о них. Вопросы с подвохом лучше либо вообще не задавать, либо поместить их в конце списка. Вопросы типа «почему канализационные люки обычно круглые» или «сколько шариков для гольфа помещается в Боинг» задавать не следует, если только вы не собеседуете сантехника или пилота. Это просто пустая трата вашего времени.
В конце собеседования дайте кандидату пару задачек для решения на бумаге . Задачи должны быть не слишком сложными и подобраны так, чтобы на их решение уходило минут двадцать. Плюс 10 минут на то, чтобы объяснить задачи и ответить на вопросы, возникшие у кандидата. Еще 10 минут на то, чтобы проверить решение и попрощаться. Как видите, времени в обрез. Пока кандидат решает задачи, можно оставить его одного и обменяться с коллегами своими впечатлениями. Сами по себе задачи хоть и не являются решающим фактором при приеме на работу, но при этом выступают важным критерием. Если кандидат не смог даже скобочки в строке посчитать, то с ним и разговаривать не о чем. Аналогично, если он решил задачу, которую почему-то решает только 10% кандидатов, это огромный плюс. Само собой разумеется, если кандидат присылал вам по почте решение тестового задания, не стоит давать ему задачки на бумаге. Вместо этого лучше пообщайтесь с ним побольше или просто сэкономьте пол часа своего времени.
Сообщите кандидату, сколько ему ждать от вас какого-нибудь ответа. Типичный срок — две недели. Если поток резюме уже почти весь разобран, можно пообещать ответить через неделю. Сделайте напоминалку в календаре или Trello, чтобы не забыть! Если сразу видно, что кандидат слабый и не получит офер, сообщите об этом на собеседовании. Заодно укажите на области, в которых кандидат слаб, посоветуйте ему литературу для прокачки этих областей. Кто знает, может вы захотите взять его через полгода.
Сразу после собеседования запищите все, что вы думаете о кандидате, в Trello, Jira, или что вы там используете. Попросите об этом же ваших коллег, которые также участвовали в собеседовании. Без этих пометок через две недели вы ни за что не вспомните, кто вам больше понравился — Иван Иванов или Петр Петров.
Далее возможно два исхода. Либо кандидат не подходит и ему пишется об этом письмо, либо подходит, и тогда проводится микро собеседование, на котором вы узнаете, сколько денег хочет кандидат, когда он готов выйти на работу и так далее. По результатам этого собеседования делается официальный офер. Удачная формулировка в случае, если кандидат не подходит — «к сожалению, в настоящее время мы не готовы сделать вам офер». Не следует скупиться на пожелания профессионального роста и приглашения повторно прийти на собеседование через полгода.
Во время собеседования обратите внимание на то, насколько понятно кандидат излагает свои мысли, помыл ли он голову перед собеседованием и так далее. Сможете ли вы работать с этим человеком? Если вы полагаете, что не наделаете ошибок во время собеседования, то ошибаетесь! Чтобы была хоть какая-то рефлексия, обязательно возьмите с собой более опытного в этих вопросах коллегу. Например, типичная ошибка — задавать кандидату вопросы и самому же отвечать на них. Да-да, вы сделаете эту ошибку, не сомневайтесь! Еще одна ошибка — вы задаете кандидату вопрос, он отвечает вам в форме вопроса, а вы отвечаете на этот вопрос.
Неправильно:
— Сколько индексов нужно для эффективного выполнения этого запроса?
— Три?
— Нет.
— Два?
Правильно:
— Сколько индексов нужно для эффективного выполнения этого запроса?
— Три?
— Вы меня спрашиваете? Это вы должны мне ответить!
Вообще, хороший кандидат никогда не отвечает вопросом на вопрос. Если он чего-то не знает, то так и говорит, «не знаю», а не пытается угадать. Нет ничего стыдного в том, чтобы не знать чего-то . Наверняка вместо этого кандидат хорошо разбирается в чем-то другом.
Обязательно узнайте у кандидата, почему он желает сменить место работы. «Мало платят» или «идиот-начальник» — это плохие причины. «Я там уже три года, скучно » считается хорошим ответом. Вас не должно особо волновать, о каких технологиях кандидат почитывает книги или как классно он использует MongoDB в своем pet project. Равно как и то, с чем он работал два года назад. Спрашивайте его о том, чем он конкретно сейчас занимается и с чем конкретно сейчас работает.
Если кандидат утверждает, что пишет на Erlang, расспросите его с пристрастием про Erlang. Если он работает с PostgreSQL, спросите его, что он помнит про первые три нормальные формы , какие уровни изоляции бывают и в каких запросах СУБД применяет bitmap scans . Это то, с чем сейчас кандидат работает. Он обязан это знать. Отмазаться, что мало с этим работал или работал давно и все забылось, не прокатит. По своему опыту могу сказать, что редкий кандидат помнит вторую нормальную форму и когда-нибудь слышал про уровни изоляции. Если кандидат отвечает на эти вопросы, берите не думая! Если выясняется, что кандидат почти ничего не знает о технологиях, с которыми он сейчас якобы работает, или, еще хуже, он просто так написал в резюме кучу умных слов, это повод послать его лесом.
Возникает закономерный вопрос, неужели программисты должны всем этим заниматься? Подозреваю, что нет. Существенную часть работы, касающуюся переписки с кандидатами, бронирования комнат и так далее можно на кого-нибудь переложить. Но я глубоко убежден, что только другой программист может нормально провести техническое собеседование. Или очень-очень крутой рекрутер, но существование таких находится под большим вопросом. Если вы работаете в компании, где рекрутер или, о Скотче, кадровое агентство, приводит вам человека, которого никто никогда не видел, и говорит «это %name%, теперь он(а) пишет код вместе с вами», значит настала пора валить !
Дополнение: А в этой заметке tonsky рассказывает о том, как в свое время нанимали людей в Echo.