Я единственный из 1400, или самый крутой рекрутинг, что я проходил

7290f7fd5e99ccbed5b6e3832aef774e.jpg

Я уже лет 10 пишу код на питоне, и последние 2.5 года стабильно работал на американскую компанию. Наверно, многим знакома история, когда ты кодишь-кодишь, вроде всё неплохо, и внезапно ты — самый знающий и опытный в команде и добро пожаловать в тим лиды. Астрологи объявили неделю менеджмента, количество кода снизилось на 100%.

Попробовав себя менеджером, я понял, что я дебил (как менеджер), и начал искать другую работу. Ребятушки, я офигел от того, насколько разный подход у компаний к найму. И мне кажется, я нашёл кое-что интересное, а если точнее — самый логичный и организованный процесс найма, что я видел.

Как это бывает

Прежде чем холиварить на тему «как надо», давайте вместе согласимся, как не надо.

HR

В более-менее крупных компаниях есть HR — это скрипты, которые по ключевым словам находят людей в LinkedIn и пишут им шаблонные сообщения (и даже способны вести диалог на уровне яндекс.алисы: знают захардкоженныеи ответы, по всему остальному отсылают куда-нибудь). Очень часто компаниям лень писать такие скрипты и они нанимают миловидных девушек для этого, но блин, ребята, за один вечер можно написать неплохого HR, который будет донимать людей в соцсетях и писать описание вакансии в телеграме — так ещё и работать будет 24/7, и стоить дешевле. Рекомендую.

Так как я искал работу, то я осмелился включить в LI опцию «open to job offers» — и меня завалило предложениями, бессмысленными и беспощадными. Шутят, что LinkedIn — это сайт знакомств для айтишников, где последние постоянно отшивают девушек. В какой-то момент я задолбался тратить время на вводную часть и хотел хакнуть систему, говоря, чтобы они сразу дали мне самое сложное тестовое задание, и если я справлюсь, то имеет смысл говорить дальше -, но меня редиректили на стадию «нужно сначала познакомиться друг с другом».

1d6312d974ef184e33c92a821448252f.jpg

Какой я вынес из этого вывод? Увы, 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

ea095a5c8713769d50d05323f885aeff.jpg

Люди продают себя, и поэтому CV — это как Инстаграм: люди добавляют туда только лучше, а всё что «не очень», деликатно умалчивают.

Как-то у нас было собеседование с мужчиной — лет 40, почасовая оплата такая, что я шёл на интервью, как будто это он меня будет собеседовать, а не я его. Как он классно говорил про свои проекты! Я был просто уверен, что он крут, залетит к нам на проект, всё наконец заработает, меня вышвырнут как слабое звено и я останусь ни с чем, буду плакать и искать работу. Когда мы дали ему тестовое задание, он его зафейлил, от слова «совсем». Я прям не верил глазам, там всего-то пробежать по json и вытащить определённые значения -, но он был слишком крут для этого. И тут я понял: CV, описание опыта, всякие там профили на сайтах — это всё ничто, это только bias, который зачастую ошибочен, потому что это одна сторона медали — лучшая. Мы все не без недостатков -, но как работодатель, я хочу знать все стороны — с некоторыми я могу мириться, с некоторыми нет.

Если вкратце — у девочки нет имени у кандидатов не должно быть истории, просто берите и проверяйте их на то, что ценится на данной вакансии, без оглядки на прошлое.

Ребята, я нашёл

Да, я нашёл ту компанию, которая возвела рекрутинг в абсолют. Они ушли от стандартной «HR, Interview, Test task» схемы, и сделали рекрутинг постоянно изменяющимся процессом, когда собирается статистика и на её основе части процесса добавляются/изменяются/удаляются. Когда я устраивался в эту компанию, я проходил через пятую версию процесса отбора кандидатов. Сейчас мы работаем над седьмой.

Далее я расскажу про все шаги, через которые я прошёл. Вакансия: senior python developer (django, remote only) — это важно, потому что иная вакансия привела бы к совершенно другим шагам.

Итак, как это выглядит.

Без HR

Тут нет HR. Зачем? Мы постим объявление на разных площадках и имеем постоянный поток кандидатов. Есть подозрение, что это даже дешевле HR.

Размещаемое объявление максимально полно описывает вакансию, то есть если кандидат подаёт заявку — он уже знает, сколько и когда нужно будет работать, какая вилка, какие правила в компании и тд, и чтобы это узнать, он потратил 5 минут, а не час на телефоне. Если ему стало интересно, он может почитать наш порядок работы на github — репа публичная.

Стоит ли говорить, что объявление постоянно улучшается на основе статистики — мы смотрим, что работает, а что нет, меняем параграфы, что-то уточняем итд — и это действительно работает, описание вакансии сильно влияет на то, кто и в каком количестве будет подавать заявки. Разумеется, есть человек, занимающийся объявлениями, но никакого живого общения с кандидатами на начальном этапе нет.

Самый тупой фильтр на свете

Представьте, что у вас есть постоянный поток кандидатов. Интервью с каждым — самоубийство. Разбор тестового задания каждого — куча времени. Что, если я скажу, что есть способ отсечь 80% неподходящих кандидатов вообще без телодвижений?

Первый вопрос кандидату — его стаж. Это не какое-то число из головы — напротив, мы взяли статистику и нашли такое число N, что кандидаты со стажем меньше N лет никогда не проходили все этапы. То есть, согласно всем нашим наблюдениям, это минимальный порог для успешного прохождения собеседования. Поэтому мы запилили формочку, где кандидат тыкает своё число и либо проходит дальше, либо мы вежливо отказываем. Зачем это? Каждый этап отбора стоит компании всё больше и больше (и по деньгам, и по ресурсам), и этот маленький вопрос значительно снижает нагрузку.

Пиши код

6c54cf28b744cd7e725ad9be257dcea0.jpg

Кто-то тут на Хабре писал, что тестовые задания фу-фу-фу, но я-то знаю, что задания на кодинг как старый добрый кольт: уравнивают всех. Много опыта, мало опыта, красивое CV или его отсутствие — покажите мне свой код, и я скажу, кто вы. Сколько раз было: на словах ты Лев Толстой, а на деле у вас тут мешок эксепшнов. Не знаю, если кто-то тут нанимает разрабов без хоть какого-то кодинга — расскажите мне, как так-то?

У нас раньше был live coding, но есть огромные минусы:

1) это стресс для кандидатов — никто не любит, когда рассматривают и оценивают, как он кодит;

2) он не показывает реальные способности программиста в обычной среде — обычно человек кодит в спокойной обстановке, попивая кофе, а тут он висит на звонке и должен что-то сообразить — я сам, например, люблю live coding, но тупею процентов на 50;

3) live coding требует, чтобы кто-то из команды на нём присутствовал.

Итак, задание на написание кода нужно, но только не live coding и без человеческого участия. Как вы, наверно, догадались, есть много сервисов, которые позволяют тестировать кандидатов в автоматическом режиме. Мы используем один из таких, там есть окно для ввода кода и можно запускать программы на питоне (и на других языках тоже). Просто кидается ссылка на тест, а потом можно забрать результаты по API. Наши задания простые, на их решение хватает и 15 минут, но мы даём 1.5 часа. На некоторые задания уходит менее 2 минут, так что это действительно простые вещи. Ну, например, инвертировать содержимое в маленьком файле, типа data[::-1], без подводных камней. Вы не поверите, но это отсекает 80% народа, серьёзно — хотя они претендуют на место senior python developer.

Тестируется всё, что требуется от кандидата

Когда кандидат проходит базовый тест (повторюсь: он очень лёгкий), ему даётся задание на дебаггинг. Этого важная штука по нескольким причинам:

1) это последняя линия обороны перед участием человека в рекрутинге, то есть если человек прошёл этот этап, компания начинает тратить ресурсы на рекрутинг;

2) это задание, которое довольно хорошо отбирает сеньоров;

3) оно опять же полностью автоматическое.

Я не могу проспойлерить, что это за задание, но оно проверяет часть скиллов, которые пригодятся в реальных проектах, и оно проверяет базовое понимание вещей. На это задание тратится порядка 2 часов, но, к счастью, кодить не надо — нужно подумать и написать ответ.

Итак, после этого шага перед нами есть сеньор помидор, и мы ничего на это не потратили. Ура! Но пора вспомнить, что у нас есть совесть, и начать уже общаться с кандидатом.

Тестовое задание

Далее уже сложнее — тестовое задание. Кандидат ставит трекер и логгирует время, потраченное на решение задания. Оно тоже классное по нескольким причинам:

1) позволяет кандидату разобраться с трекером, который используется в компании,

2) мы оцениваем продуктивность кандидата (потому что трекер считает время) — это наверно одно из самых важных свойств, потому что вы не сможете сделать успешный продукт, если кандидат будет в 10 раз медленнее, чем вы от него ожидаете

3) мы оцениваем умение кандидата работать удалённо

4) задание «fuzzy» — сказано, что должно быть в итоге, но как это получить — кандидат решает сам; мы оцениваем, насколько кандидат умеет здраво мыслить и понимать требования клиентов

5) разрабы делают код ревью и отсылают подробные комментарии кандидату в любом случае — т.е. всегда.

Да, это долгий процесс — может занимать 3 часа у кандидата. Как сделать, чтобы он не бросил эту затею? Мы заранее говорим, что все работы будут оценены вручную, и по каждой из них будет сделан детальный code review. И мы делаем, причём каждый такой ревью занимает в среднем 40 минут -, но тем не менее мы не игнорируем ни одного кандидата. Это мотивирует, потому что даже если кандидата завернут, он точно будет знать, почему и над чем нужно работать.

Интервью

Вот тут уже случается разговор с СЕО компании. Это не интервью в классическом смысле — скорее знакомство и ответы на вопросы. На этом этапе никакого отсева :)

Пробный период

Далее кандидат попадает на пробный период.

Он прекрасен для кандидата, потому что

1) кандидату платят полную ставку, как если бы он уже полноценно работал,

2) кандидат считается полноценным членом команды (без всяких исключений) и имеет равный со всеми голос.

Этот же период ужасен для комании, потому что

1) компания может потратить в 5 раз больше заработанного кандидатом только на его сопровождение — то есть кандидат наработал на 40$, но все люди, задействованные в этом, потратили на это своё время на 200$.

Избыточные задания

Хоть период и тестовый, но сразу никто кандидата на реальный проект не бросает -, а делаем мы вот что. У нас есть пара реальных и уже решённых задач (то есть с точки зрения реальной работы в них нет смысла) -, но всё равно даём их кандидату. Эти задачи

1) опять же выявляют способности кандидата в некоторых специфических областях;

2) позволяют сравнить кандидата; так как все в компании прошли через эти задачи, можно считать эти задачи эталонными и использовать для сравнения членов команды: кто быстрее, у кого лучше скиллы и так далее (это кстати популярная тема — дать одно задание разным разрабам и смотреть как каждый будет решать его)

Опять же, напомню, что хоть эти решения ни на что не влияют, компания за них платит реальную зарплату и идёт в минус. Для нас это всё ещё рекрутинг, но с точки зрения кандидата он уже отбил всё время, потраченное на все этапы, и вполне себе нормально зарабатывает.

Некритичные задачи

Если избыточные задания пройдены успешно (а многие заваливают), то кандидату даются какие-либо реальные, но некритичные задачи — то есть это ещё не работа над проектами клиентов, но уже полезная деятельность — например, добавить функционал на сайт или написать несколько скриптов для улучшения процесса рекрутинга :)

Если и тут кандидат выжил — то мучения кончаются и у нас появляется новый разработчик, и мы знаем, что он крут, то есть в нём присутствует всё, что мы от него ожидаем.

К чему всё это

Заголовок не врёт — до меня компания забраковала 1400 кандидатов. Когда я это узнал, я почувствовал, что я самый классный парень на деревне — кто ещё может таким похвастаться? А потом подумал и понял, что нет. Не я самый классный, а рекрутинг.

У меня на прошлой работе есть чел, который мультитул — он круто пишет код, может настроить логгирование в cloudwatch, позвонить в какую-нибудь команию и договориться с ними о сотрудничестве, попутно тренируя какой-нибудь xgboost или spacy. Ещё у меня есть друг, который всё схватывает на лету и просто мозг — я себя рядом с ним чувствую мобильным процессором с низким энергопотреблением. Круче ли они меня? Совершенно точно. Прошли бы они всё, что я описал? Я сомневаюсь.

То, что меня взяли, значит лишь то, что я подошёл под все критерии, по которым меня оценивали, то есть я подхожу именно этой компании именно сейчас. И смысл в том, что каждая компания должна иметь свои собственные критерии, потому что если все ваши вопросы — из списка »300 вопросов для собеседования», то у вас проблемы. Многие компании стараются нанять лучшего, в то время как нужно искать наиболее подходящего. Это так просто, что об этом легко забыть.

Именно поэтому то, что написано выше, подходит только одной компании, и если вы задумали бедумно скопировать процесс, описанный выше — то вы ничего не поняли. Я описал вам снэпшот, всего лишь пятую версию, к которой компания пришла в результате непрерывного процесса улучшения, проб и ошибок.

Я бы сравнил создание софта с постройкой ракеты: старт всегда выглядит эффектно, но в этот момент ракетой уже не управляют: она просто делает то, что было в неё заложено. Судьба ракеты заложена уже до старта, а весь экшн на самом деле происходит во время проектировки, сборки и тестирования. Так и с компаниями: когда вы начинаете проект, ваша ракета уже летит, а куда она летит и как — это вы заложили ровно тогда, когда нанимали специалистов. Не упустите этот момент.

© Habrahabr.ru