Я единственный из 1400, или самый крутой рекрутинг, что я проходил
Я уже лет 10 пишу код на питоне, и последние 2.5 года стабильно работал на американскую компанию. Наверно, многим знакома история, когда ты кодишь-кодишь, вроде всё неплохо, и внезапно ты - самый знающий и опытный в команде и добро пожаловать в тим лиды. Астрологи объявили неделю менеджмента, количество кода снизилось на 100%.
Попробовав себя менеджером, я понял, что я дебил (как менеджер), и начал искать другую работу. Ребятушки, я офигел от того, насколько разный подход у компаний к найму. И мне кажется, я нашёл кое-что интересное, а если точнее - самый логичный и организованный процесс найма, что я видел.
Как это бывает
🔗Прежде чем холиварить на тему "как надо", давайте вместе согласимся, как не надо.
HR
🔗В более-менее крупных компаниях есть HR - это скрипты, которые по ключевым словам находят людей в LinkedIn и пишут им шаблонные сообщения (и даже способны вести диалог на уровне яндекс.алисы: знают захардкоженные ответы, по всему остальному отсылают куда-нибудь). Очень часто компаниям лень писать такие скрипты и они нанимают миловидных девушек для этого, но блин, ребята, за один вечер можно написать неплохого HR, который будет донимать людей в соцсетях и писать описание вакансии в телеграме - так ещё и работать будет 24/7, и стоить дешевле. Рекомендую.
Так как я искал работу, то я осмелился включить в LI опцию "open to job offers" - и меня завалило предложениями, бессмысленными и беспощадными. Шутят, что LinkedIn - это сайт знакомств для айтишников, где последние постоянно отшивают девушек. В какой-то момент я задолбался тратить время на вводную часть и хотел хакнуть систему, говоря, чтобы они сразу дали мне самое сложное тестовое задание, и если я справлюсь, то имеет смысл говорить дальше - но меня редиректили на стадию "нужно сначала познакомиться друг с другом".
Какой я вынес из этого вывод? Увы, HR сейчас повсюду, летают над линкедином и ищут добычу, но пользы от них я не вижу - они просто делают редирект тебя на работодателя, хотя вообще-то я и так ищу работу, смотрю всякие доски объявлений и биржи, и если вашей компании нужен я, просто раскидайте везде объявления - это сэкономит всем время.
Пока я уворачиваюсь от помидоров тех, кто считает, что HR это здорово и полезно, мы плавно подходим к следующей части рекрутинга…
Интервью
🔗На моей старой работе мы интервьюировали многих - начиналось с того, что мой босс рассказывал минут 10 про компанию, потом мы минут 15 слушали, какой кандидат классный и что он умеет, потом 5 минут смотрели на него во время live coding, и всё было решено. Нет, мы давали кандидатам время, чтобы они закончили задание, но вообще-то уже после 5 минут было понятно, нравятся нам его скиллы или нет, и получается, что только эти минуты были по-настоящему важны. А мы просто теряли время.
Я был и с другой стороны баррикад. Однажды я потратил целый час на общение с hr из епама - блин, мы уже разве что только не поженились, мы уже обговорили график работы и на каких условиях моя тушка будет релоцироваться. Через пару дней я завалил их собеседование. Итого: два человека продолбили по часу, обсуждая то, чего не будет; два человека продолбили по часу, чтобы понять, что один не подходит. 4 часа просто в никуда. В денежном эквиваленте мы все потратили тысяч 10 наверно, это прикольно осознавать.
Знаете, какой должен был быть первый вопрос от этой компании? Вот такой сниппет на питоне:
a = 400
b = 400
id(a) == id(b) # true or false?
Если бы они его спросили в первую минуту знакомства, я бы сразу понял, что я с ними работать не хочу, а они поняли бы, что я не знал, как инты хранятся в памяти в cpython.
Оказывается, интервью можно сократить процентов на 90% и не потерять ничего, просто поменяв порядок вопросов.
Независимость умений
🔗У нас был случай, когда чел успешно прошёл интервью - сделал 2 небольших задания, не идеально, но показал, что может быстро учиться, ну и решение работало в конце концов. Мы его наняли. Потом мы узнали, что он не очень в гите, не умел отлаживать, код был так себе, а ide была atom, и он, например, не мог jump to definition или search class например. Про статический анализ кода вообще молчу.
Мы попали на деньги, потому что (конечно) я дебил-менеджер, а ещё потому что мы ожидали, что если человек умеет кодить, то он умеет отлаживать и делает это за конечное время. Наивные!
Интервью должно в идеале покрыть всё, что вы ожидаете от кандидата. Нельзя ждать, что если A, то B - проверяйте и A, и B.
Background
🔗Люди продают себя, и поэтому CV - это как Инстаграм: люди добавляют туда только лучшее, а всё что "не очень", деликатно умалчивают.
Как-то у нас было собеседование с мужчиной - лет 40, почасовая оплата такая, что я шёл на интервью, как будто это он меня будет собеседовать, а не я его. Как он классно говорил про свои проекты! Я был просто уверен, что он крут, залетит к нам на проект, всё наконец заработает, меня вышвырнут как слабое звено и я останусь ни с чем, буду плакать и искать работу. Когда мы дали ему тестовое задание, он его зафейлил, от слова "совсем". Я прям не верил глазам, там всего-то пробежать по json и вытащить определённые значения - но он был слишком крут для этого. И тут я понял: CV, описание опыта, всякие там профили на сайтах - это всё ничто, это только bias, который зачастую ошибочен, потому что это одна сторона медали - лучшая. Мы все не без недостатков - но как работодатель, я хочу знать все стороны - с некоторыми я могу мириться, с некоторыми нет.
Если вкратце - у девочки нет имени у кандидатов не должно быть истории, просто берите и проверяйте их на то, что ценится на данной вакансии, без оглядки на прошлое.
Ребята, я нашёл
🔗Да, я нашёл ту компанию, которая возвела рекрутинг в абсолют. Они ушли от стандартной "HR, Interview, Test task" схемы, и сделали рекрутинг постоянно изменяющимся процессом, когда собирается статистика и на её основе части процесса добавляются/изменяются/удаляются. Когда я устраивался в эту компанию, я проходил через пятую версию процесса отбора кандидатов. Сейчас мы работаем над седьмой.
Далее я расскажу про все шаги, через которые я прошёл. Вакансия: senior python developer (django, remote only) - это важно, потому что иная вакансия привела бы к совершенно другим шагам.
Итак, как это выглядит.
Без HR
🔗Тут нет HR. Зачем? Мы постим объявление на разных площадках и имеем постоянный поток кандидатов. Есть подозрение, что это даже дешевле HR.
Размещаемое объявление максимально полно описывает вакансию, то есть если кандидат подаёт заявку - он уже знает, сколько и когда нужно будет работать, какая вилка, какие правила в компании и тд, и чтобы это узнать, он потратил 5 минут, а не час на телефоне. Если ему стало интересно, он может почитать наш порядок работы на github - репа публичная.
Стоит ли говорить, что объявление постоянно улучшается на основе статистики - мы смотрим, что работает, а что нет, меняем параграфы, что-то уточняем итд - и это действительно работает, описание вакансии сильно влияет на то, кто и в каком количестве будет подавать заявки. Разумеется, есть человек, занимающийся объявлениями, но никакого живого общения с кандидатами на начальном этапе нет.
Самый тупой фильтр на свете
🔗Представьте, что у вас есть постоянный поток кандидатов. Интервью с каждым - самоубийство. Разбор тестового задания каждого - куча времени. Что, если я скажу, что есть способ отсечь 80% неподходящих кандидатов вообще без телодвижений?
Первый вопрос кандидату - его стаж. Это не какое-то число из головы - напротив, мы взяли статистику и нашли такое число N, что кандидаты со стажем меньше N лет никогда не проходили все этапы. То есть, согласно всем нашим наблюдениям, это минимальный порог для успешного прохождения собеседования. Поэтому мы запилили формочку, где кандидат тыкает своё число и либо проходит дальше, либо мы вежливо отказываем. Зачем это? Каждый этап отбора стоит компании всё больше и больше (и по деньгам, и по ресурсам), и этот маленький вопрос значительно снижает нагрузку.
Пиши код
🔗Кто-то тут на Хабре писал, что тестовые задания фу-фу-фу, но я-то знаю, что задания на кодинг как старый добрый кольт: уравнивают всех. Много опыта, мало опыта, красивое CV или его отсутствие - покажите мне свой код, и я скажу, кто вы. Сколько раз было: на словах ты Лев Толстой, а на деле у вас тут мешок эксепшнов. Не знаю, если кто-то тут нанимает разрабов без хоть какого-то кодинга - расскажите мне, как так-то?
У нас раньше был live coding, но есть огромные минусы:
- это стресс для кандидатов - никто не любит, когда рассматривают и оценивают, как он кодит;
- он не показывает реальные способности программиста в обычной среде - обычно человек кодит в спокойной обстановке, попивая кофе, а тут он висит на звонке и должен что-то сообразить - я сам, например, люблю live coding, но тупею процентов на 50;
- live coding требует, чтобы кто-то из команды на нём присутствовал.
Итак, задание на написание кода нужно, но только не live coding и без человеческого участия. Как вы, наверно, догадались, есть много сервисов, которые позволяют тестировать кандидатов в автоматическом режиме. Мы используем один из таких, там есть окно для ввода кода и можно запускать программы на питоне (и на других языках тоже). Просто кидается ссылка на тест, а потом можно забрать результаты по API. Наши задания простые, на их решение хватает и 15 минут, но мы даём 1.5 часа. На некоторые задания уходит менее 2 минут, так что это действительно простые вещи. Ну, например, инвертировать содержимое в маленьком файле, типа data[::-1]
, без подводных камней. Вы не поверите, но это отсекает 80% народа, серьёзно - хотя они претендуют на место senior python developer.
Тестируется всё, что требуется от кандидата
🔗Когда кандидат проходит базовый тест (повторюсь: он очень лёгкий), ему даётся задание на дебаггинг. Это важная штука по нескольким причинам:
- это последняя линия обороны перед участием человека в рекрутинге, то есть если человек прошёл этот этап, компания начинает тратить ресурсы на рекрутинг;
- это задание, которое довольно хорошо отбирает сеньоров;
- оно опять же полностью автоматическое.
Я не могу проспойлерить, что это за задание, но оно проверяет часть скиллов, которые пригодятся в реальных проектах, и оно проверяет базовое понимание вещей. На это задание тратится порядка 2 часов, но, к счастью, кодить не надо - нужно подумать и написать ответ.
Итак, после этого шага перед нами есть сеньор помидор, и мы ничего на это не потратили. Ура! Но пора вспомнить, что у нас есть совесть, и начать уже общаться с кандидатом.
Тестовое задание
🔗Далее уже сложнее - тестовое задание. Кандидат ставит трекер и логгирует время, потраченное на решение задания. Оно тоже классное по нескольким причинам:
- позволяет кандидату разобраться с трекером, который используется в компании,
- мы оцениваем продуктивность кандидата (потому что трекер считает время) - это наверно одно из самых важных свойств, потому что вы не сможете сделать успешный продукт, если кандидат будет в 10 раз медленнее, чем вы от него ожидаете
- мы оцениваем умение кандидата работать удалённо
- задание "fuzzy" - сказано, что должно быть в итоге, но как это получить - кандидат решает сам; мы оцениваем, насколько кандидат умеет здраво мыслить и понимать требования клиентов
- разрабы делают код ревью и отсылают подробные комментарии кандидату в любом случае - т.е. всегда.
Да, это долгий процесс - может занимать 3 часа у кандидата. Как сделать, чтобы он не бросил эту затею? Мы заранее говорим, что все работы будут оценены вручную, и по каждой из них будет сделан детальный code review. И мы делаем, причём каждый такой ревью занимает в среднем 40 минут - но тем не менее мы не игнорируем ни одного кандидата. Это мотивирует, потому что даже если кандидата завернут, он точно будет знать, почему и над чем нужно работать.
Мини-интервью
🔗Вот тут уже случается разговор с СЕО компании. Это не интервью в классическом смысле - скорее знакомство и ответы на вопросы. На этом этапе никакого отсева :)
Пробный период
🔗Далее кандидат попадает на пробный период.
Он прекрасен для кандидата, потому что
- кандидату платят полную ставку, как если бы он уже полноценно работал,
- кандидат считается полноценным членом команды (без всяких исключений) и имеет равный со всеми голос.
Этот же период ужасен для комании, потому что
- компания может потратить в 5 раз больше заработанного кандидатом только на его сопровождение - то есть кандидат наработал на 40$, но все люди, задействованные в этом, потратили на это своё время на 200$.
Избыточные задания
🔗Хоть период и тестовый, но сразу никто кандидата на реальный проект не бросает - а делаем мы вот что. У нас есть пара реальных и уже решённых задач (то есть с точки зрения реальной работы в них нет смысла) - но всё равно даём их кандидату. Эти задачи
- опять же выявляют способности кандидата в некоторых специфических областях;
- позволяют сравнить кандидата; так как все в компании прошли через эти задачи, можно считать эти задачи эталонными и использовать для сравнения членов команды: кто быстрее, у кого лучше скиллы и так далее (это кстати популярная тема - дать одно задание разным разрабам и смотреть как каждый будет решать его)
Опять же, напомню, что хоть эти решения ни на что не влияют, компания за них платит реальную зарплату и идёт в минус. Для нас это всё ещё рекрутинг, но с точки зрения кандидата он уже отбил всё время, потраченное на все этапы, и вполне себе нормально зарабатывает.
Некритичные задачи
🔗Если избыточные задания пройдены успешно (а многие заваливают), то кандидату даются какие-либо реальные, но некритичные задачи - то есть это ещё не работа над проектами клиентов, но уже полезная деятельность - например, добавить функционал на сайт или написать несколько скриптов для улучшения процесса рекрутинга :)
Если и тут кандидат выжил - то мучения кончаются и у нас появляется новый разработчик, и мы знаем, что он крут, то есть в нём присутствует всё, что мы от него ожидаем.
К чему всё это
🔗Заголовок не врёт - до меня компания забраковала 1400 кандидатов. Когда я это узнал, я почувствовал, что я самый классный парень на деревне - кто ещё может таким похвастаться? А потом подумал и понял, что нет. Не я самый классный, а рекрутинг.
У меня на прошлой работе есть чел, который мультитул - он круто пишет код, может настроить логгирование в cloudwatch, позвонить в какую-нибудь компанию и договориться с ними о сотрудничестве, попутно тренируя какой-нибудь xgboost или spacy. Ещё у меня есть друг, который всё схватывает на лету и просто мозг - я себя рядом с ним чувствую мобильным процессором с низким энергопотреблением. Круче ли они меня? Совершенно точно. Прошли бы они всё, что я описал? Я сомневаюсь.
То, что меня взяли, значит лишь то, что я подошёл под все критерии, по которым меня оценивали, то есть я подхожу именно этой компании именно сейчас. И смысл в том, что каждая компания должна иметь свои собственные критерии, потому что если все ваши вопросы - из списка "300 вопросов для собеседования", то у вас проблемы. Многие компании стараются нанять лучшего, в то время как нужно искать наиболее подходящего. Это так просто, что об этом легко забыть.
Именно поэтому то, что написано выше, подходит только одной компании, и если вы задумали бездумно скопировать процесс, описанный выше - то вы ничего не поняли. Я описал вам снэпшот, всего лишь пятую версию, к которой компания пришла в результате непрерывного процесса улучшения, проб и ошибок.
Я бы сравнил создание софта с постройкой ракеты: старт всегда выглядит эффектно, но в этот момент ракетой уже не управляют: она просто делает то, что было в неё заложено. Судьба ракеты заложена уже до старта, а весь экшн на самом деле происходит во время проектировки, сборки и тестирования. Так и с компаниями: когда вы начинаете проект, ваша ракета уже летит, а куда она летит и как - это вы заложили ровно тогда, когда нанимали специалистов. Не упустите этот момент.