Как мы проводим собеседования в Барселоне

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


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


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


Подача заявки


Мы пробовали агентства (я сам пришел пять с лишним лет назад через агентство), но в результате остановились на сарафанном радио и прямых контактах. В Барселоне живет два миллиона человек, но разработчиков высокого уровня не так много, и я всех знаю если не в лицо, то по именам.


У нас есть тестовое задание среднего уровня сложности. Любой открытый репозиторий с чем-то посерьезнее helloworld — разумеется, заменяет тестовое задание. Претендующему на позицию «не начинающий» потребуется от шести часов до двух дней на его выполнение и оформление. Еще ни один профессионал не отказался его сделать — вместо белой доски, инверсии списка и вопросов по синтаксису непосредственно на собеседовании. Мы собираемся работать вместе годы — два дня тут погоды не сделают. Мы не оплачиваем тестовое задание, и я считаю это важным пунктом оценки соискателя: если человек требует рубль за каждый чих, мы вряд ли сработаемся. Когда тестовое задание только сформулировалось, я был первым, кто его решил — как для сопоставления с кодом кандидатов, так и просто, чтобы не забронзоветь.


Мы принимаем тестовые задания на любом языке, с некоторыми исключениями: в команду фронта мы просим использовать эмбер, потому что идеологически он отличается от хайпового реакта, и хочется посмотреть на умение работать именно в этой парадигме. В команду руби мы просим руби или эликсир. В команду микросервисов — все, что угодно, на ваш выбор. Обычно выбирают эликсир, или эрланг, как указано в вакансии, но были и хаскель, и скала.


По результатам тестового задания мы коллегиально принимаем решение: один из ведущих разработчиков его бегло просматриает, и если оценка выше 7/10 — еще двое просматривают его тщательно, как на код ревью. Если ответ — да (средняя оценка выше 8/10), мы запускаем процесс, и мы считаем, что это нам нужен этот человек, а не наоборот. Строго говоря, ровно с этого момента мы начинаем завлекать кандидата. Если он не явится на очное собседование пьяным и в семейных трусах — мы обязаны его уговорить работать с нами, чего бы это ни стоило.


Собеседование


Уговариваем мы не деньгами. Офис на 22 этаже Torre Mapfre — прямо над пляжем Икария — единственное материальное благо, которое мы упоминаем. Мы обязательно рассказываем, что много публикуем в OSS. Упоминаем, что один из членов команды — core committer компилятора и стандартной библиотеки основного используемого языка. Корпоративный технический блог, который регулярно попадает в еженедельные дайджесты самого интересного. Меня, в конце концов, в этом стеке на SO знают все, кто хоть как-то с ним связан.


Еще мы очень подробно рассказываем про условия работы, разнообразие и крутизну инструментария, участие в профильных конференциях, хостинг эликсир-митапов в Барселоне, парные сессии, процесс достижения консенсуса по архитектуре, плоскую систему управления, курсы, которые постоянно стихийно создаются ведущими специалистами. Если человек хочет расти — мы очень внятно показываем, почему тут — самое идеальное место. На очном собеседовании мы два часа рассказываем, почему соискатель хочет работать именно у нас, покупаем его, так сказать. Потом 15 минут его терзают эйчары, но я не припомню ни единого случая, когда мнение эйчара что-то значило против мнения трех ведущих специалистов. Если нам соискатель глянулся — мы его возьмем, даже если он асоциальный психопат с приводами в милицию.


Эта система работает для нас, и три недели назад мы переманили последнего разработчика в Барселоне, которого хотели переманить. Поэтому, собственно, я и собрался написать эту заметку.


Ну, и в конце, добавим немного технических подробностей.


Бонус. Примеры кода, которые сразу да, или сразу нет


Ruby → сразу нет


  • нарушение SRP
  • смешивание чистых методов и какого-нибудь IO в одной сущности
  • копи-паста вместо абстракций
  • встроенные типы (integer, float, double) для выражения денежных сумм

Ruby → почти сразу нет


  • методы, изменяющие ресивер (array.shuffle!), кроме внятно обоснованных
  • использование each итератора для маппинга или редьюсинга
  • инстанс-переменные для передачи состояния из метода в метод
  • инстансы там, где достаточно статических методов
  • .map{...}.map{...}.map{...} вместо одного прохода, если размер коллекции неизвестен
  • методы, принесенные рельсами, там, где достаточно обычного руби
  • лишние локальные переменные

Ruby → почти сразу да


  • each_with_object со сложным аккумулятором вместо двойного прохода по коллекции
  • уместное использовние proc/lambda, например, в case
  • assert_raise в тестах
  • тесты на неожиданный ввод
  • dry-rb
  • flip-flop (шучу, конечно).

Elixir → сразу нет


  • отсутствие спек для диалайзера
  • отсутствие документации для публичных функций, doctest обязателен
  • что угодно другое там, где можно pattern matching
  • неконтролируемый краш процессов

Elixir → почти сразу нет


  • код не подвергался воздействию форматтера
  • неуместные пайпы
  • использование if (кроме вырожденных случаев)
  • Phoenix для мини-задачи (вместо Plug)

Elixir → почти сразу да


  • использование DynamicSupervisor, GenStage, Flow
  • property based tests
  • использование @behaviour для описания интерфейса
  • свой протокол (где уместно)
  • своя имплементация Access
  • уместное использование __using__(opts)

Ну вот, как-то так. Я понимаю, что написанное выше попахивает вкусовщиной, но это так и должно быть. Мы не хотим быть идеальными собеседователями. Мы хотим максимизировать найм людей, которые нам нужны и которым будет комфортно с нами. В одном флаконе. И нам это удается именно из-за этой предвзятости на берегу. Как показывает опыт, в сухом остатке мы имеем почти 100% конверсию: люди, которые к нам приходят — остаются надолго, и им у нас комфортно.

Комментарии 29

    0
    Офис на 22 этаже Torre Mapfre — прямо над пляжем Икария

    Бинокль дадите?:-)
      0

      Ну не 220-й же. Но есть подзорная труба у окон, выходящих на город.


      :)

      +1
      Ну вот, как-то так. Я понимаю, что написанное выше попахивает вкусовщиной, но это так и должно быть.
      А вот эти все требования как-то где-то оглашается заранее, или это тоже часть отбора, «чтоб звёзды сошлись», что у вас с кандидатом одинаковая вкусовщина?
        –2

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

          0

          Если не сложно не могли бы вы дать примеры хороших книг и гайдов по elixir (можно в лс). Спасибо

            0

            Запросто.


            Начинать нужно отсюда: https://elixir-lang.org/getting-started/introduction.html
            Потом не повредит https://learnyousomeerlang.com/content (оно про эрланг, но принципы OTP — это 99% того, почему люди выбирают эликсир).
            Потом можно уже смотреть на Elixir In Action Саши Юрича (автора нескольких очень внятных библиотек) и на закуску — Metaprograming Elixir Криса Маккорда, автора Phoenix.




            Если появятся вопросы — не стесняйтесь, задавайте. Можно мне, а можно на SO (это почти наверняка тоже мне :)), можно на https://elixirforum.com — сообщество очень дружелюбное.

        +9

        В этой статье столько наглости и хамства, что я просто фалломорфировал (простите мне пожалуйста подобную сентенцию) от восхищения.


        Претендующему на позицию «не начинающий» потребуется от шести часов до двух дней на его выполнение и оформление.

        Меня восхищает подобная наглость — особенно вкупе с последующим жлобством.


        Еще ни один профессионал не отказался его сделать — вместо белой доски, инверсии списка и вопросов по синтаксису непосредственно на собеседовании.

        Сходу обгажены все те, кто отказывается — типа "непрофессионалы". Восхитительно. С понтом: у нас работают профессионалы, а все остальные в округе — не д'Артаньяны.
        Аплодирую стоя. Аплодирую наглости.


        Мы собираемся работать вместе годы — два дня тут погоды не сделают.

        Кто вы такие, чтобы распоряжаться личным временем другого человека? И указывать ему насколько ЕГО время "стоит ему погоды"?
        Здесь — аплодирую хамству. И неуважению. Тоже стоя.


        Мы не оплачиваем тестовое задание, и я считаю это важным пунктом оценки соискателя: если человек требует рубль за каждый чих, мы вряд ли сработаемся.

        Собственно — жлобство. Т.е. соискателю — ни в коем случае нельзя быть жлобом… Вы, почему-то присвоили это качество исключительно себе.
        Браво.
        Вишенкой на торте идёт — автоматическое обвинение в непрофессионализме (отказался — значит непрофессионал, ведь ни один "профессионал" — ранее не отказывался), если профессионал отказывается выполнять работу до 2 дней бесплатно всего лишь для того, чтобы быть "протестированным" вами.
        Гениально!


        Хочется спросить — ребята, вы у себя в Испании уже социализм построили? Или там пока ещё капитализм?
        Вопрос — риторический.


        P.S. Кусочек из Википедии: Профессионалы обычно зарабатывают деньги используя свои навыки и умения, их деятельность является их профессией.
        Т.е. предлагая "профессионалу" поработать от 6 часов до 2 дней бесплатно — это как раз сомнения в их профессионализме.
        Я конечно понимаю, что к формулировке можно придраться — там стоит слово "обычно"… Но в том то и фишка профессионала, что именно он определяет, когда это "обычно" работает, а когда нет. Он, а не вы.

          –2
          Но в том то и фишка профессионала, что именно он определяет, когда это "обычно" работает, а когда нет. Он, а не вы.

          Не нужно передергивать. Мы ничего не определяем. Не хотите — как хотите. Полная свобода выбора.


          Люди, которые пишут решения на SO, которыми вы потом пользуетесь — тоже делают это бесплатно. Весь неэнтерпрайзный OSS — бесплатно. Даже текст выше я написал бесплатно, прикиньте.


          Просто профессионал способен заработать столько, чтобы не пересчитывать каждый час работы в деньги. Это просто.

            +3
            Мы ничего не определяем.

            В данном случае вы пытаетесь определить, что человек "профессионал" должен потратить приличную часть своего личного времени на вас и сделать это бесплатно — т.е. навязываете ему свою цену. В случае отказа соглашаться на ваши условия — обвиняете в "непрофессионализме". Автоматически. Всего лишь за то, что он может быть не согласен с вашими условиями найма.
            Причём делаете это из состояния суперпозиции: ты профессионал — докажи нам это. Причём сделай это бесплатно.
            Это непрофессионально ;).


            Причём пытаетесь подать это как фишку элитарности. Ребята выдыхайте — это всё уже давно придумано до вас. Я как минимум за последние полгода читал минимум 4 статьи на хабре где это подавалось в таком же стиле — "круче нас тока яйца! Докажите, что можете работать у нас — тужтесь, тужтесь!"
            Вообще — смешно наблюдать, как какой-нибудь "эффективный манагер" или HR придумывает "гениальный" маркетинговый ход, который работает в краткосрочной перспективе в конкретных условиях, а потом этот ход расплзается по всем компаниям, как панацея от/для <нужное вписать>.


            Причём тут бесплатные сторонние решения? Любой профессионал ради хобби или челледжа, действительно может поучаствовать в чём то бесплатном "интересу ради". Сам для себя решить и сам поучаствовать. Но при чём тут вы? Это личный выбор человека — участвовать или нет в проекте, где сразу описывается, что это бесплатно и весь профит только моральный.
            Вы же его нанимаете не на хобби и не на челлендж, а на банальную работу. Банальные "8/5 с менеджерами и митингами". Писать код не "ради фана", а "что скажут и за деньги". Так при чём тут "неэнтерпрайзный OSS" — чтобы это ни значило (обычно принято давать расшифровку аббревиатур, во избежание разности толкований)?


            Я тоже писал текст на хабр. Бесплатно. Ради фана. И что? Я уже профессионал или ещё нет? По вашей градации — нет. Потому что вашего бесплатного тестирования не прошёл. Что не мешает мне вполне успешно зарабатывать на жизнь программированием.


            Как вам встречная идея — принимайте на работу всех людей — профессионалов, у которого есть хоть какое-то участие в бесплатном проекте? Вы же это цените, как аргумент? Ну так вперёд — почему бы нет? Open Source repository на GitHub — берём, заверните два.
            Слабо?
            Это именно то что вы предлагаете, только перевёрнутое с ног на голову: вы предлагаете работать в конторе, которая является котом в мешке, и для работы предлагаете соискателю бесплатно для вас доказать то, что он достоин работы.
            А тут вам идея: брать соискателей, которые являются "котом в мешке", но у них уже есть доказательства своей деятельности (в открытых проектах) и они готовы работать за зарплату.
            Грубо говоря: вы пытаетесь переложить все риски на плечи соискателя не заплатив при этом, а я вам предлагаю — принять их на себя, оплатив издержки.


            Кстати интересный момент — вы упоминаете что это критерии для "не начинающего" "профессионала". Прекрасно. Т.е. человек до того, как прийти к вам уже где-то работал. Там, где он работал — его уже тестировали. Как минимум — 1 раз. Он тестирование прошёл и успешно применял свои навыки. Почему вы не доверяете другой компании, уже протестировавшей вашего потенциального "не начинающего" соискателя?

              –2
              Open Source repository на GitHub — берём, заверните два.

              Это так и есть. Репозиторий, разумеется, заменяет тестовое задание, забыл упомянуть, спасибо, сейчас добавлю.


              Все остальное — причудливые игры вашего вялого воображения. Говорю же: не нравится сделать тестовое задание — ну и отлично, лучше раньше, чем позже.

                +3

                А мне определённо нравится, как вы переводите отсутствие внятной аргументации со своей стороны на персональные качества оппонента. Такого непосредственного хамства — я уже достаточно давно не встречал.
                Это не "мы — жлобы последние", а "у вас вялое воображение".
                Сразу видно — настоящий манагер от программирования! Ещё чуть-чуть и станете — эффективным.
                Не аплодирую только потому, что уже несколько раз аплодировал — аж руки отбил.

                  –1
                  А мне определённо нравится, как вы переводите отсутствие внятной аргументации со своей стороны на персональные качества оппонента
                  от автора тезиса в первом же сообщении:
                  Собственно — жлобство. Т.е. соискателю — ни в коем случае нельзя быть жлобом… Вы, почему-то присвоили это качество исключительно себе.
                –2
                вы предлагаете работать в конторе, которая является котом в мешке

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

              +3
              Вы мне напоминаете людей, который ругаются, что, мол, какую кошмарную чушь показывают по телевизору, нервничают, плюют в экран и т.п., вместо того, чтобы нажать на кнопку и перестать этот самый телевизор смотреть.

              Если вы не хотите тратить два часа или два дня своего времени бесплатно, ну так не тратьте, хозяин-барин. Если для вас тестовое задание «хамство, жлобство, наглость», ну не ваше это, расслабьтесь.
              Если у компании получается набирать людей, и они всем довольны, то скорее всего компания всё делает правильно, а вы чего-то не понимаете.
                0

                Именно так, да.

                  +3

                  Я ни в коем случае не претендую на экспертное мнение в методах наёма сотрудников — нанимают и ладно с ними.
                  Но как возможный потенциальный соискатель — я восхищённо-возмутился такой неприкрытой манере предоставления информации о методе этого наёма: эдакого стиля "д'Артаньяны только мы, а все остальные — понятно кто". Ведь кто-то может и взять на вооружение — я не просто так упомянул, что зачастую методы съёма разлетаются как пирожки по HR конторам. Чур нас, чур от таких "щедрых" предложений.
                  Добавило гаммы — ощущение обвинение в непрофессионализме от жлобов, в случае, если ты окажешься — слишком ценящим своё личное время индивидуумом.
                  Т.е. эдакая лёгкая узурпация диктатуры с самого начала ознакомительного монолога (ссылку нервным не смотреть).


                  Ещё раз повторюсь — нанимают и хр… с ними хорошо. Пусть их бизнес процветает.

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

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

                  Ваша контора ничего из себя не представляет (никому неизвестна), но в ней работают отборные «профессионалы», то есть те, кто применяет исключительно «командные» шаблоны, типа не использовать Integer для денег. Не находите странным, что контора ничего из себя не представляет, а «профессионалы» в ней считают свои шаблоны идеалом? Нет ли тут зависимости одного от другого?

                  В целом эликсир, руби (и даже не хаскель) — это очень узкая ниша в программировании. В эту нишу идут исключительно «из любви к искусству», то есть к своим привычкам, своему стилю, исходя из соображений эмоциональных (нравится/не нравится). Ну вот и у вас именно такая команда — у неё есть жёсткие шаблоны и от них они не то что отказываться не собираются, но крайне агрессивно банят всех, кто шаблон нарушает (на работу «сразу нет»). А что если человек в копейках всё считает, ну и целочисленный тип использует? Или в десятых долях копеек, что бы с округлениями не мутить? Сразу нет, потому что есть шаблон, который в реальности полезен в весьма небольшом количестве случаев.

                  Создание мира под себя — это, конечно, приятно. И ещё приятнее, если такой праздник жизни оплачивает работодатель. Но вы там в своей башне из слоновой кости несколько оторвались от реальности, не находите? Технические решения уровня округления копеек имеют наивысший приоритет, а вот смысл происходящего (то есть бизнес-значимость) вообще никак не присутствует. И архитектурные решения никому, разумеется, не интересны. Потому что не дело холопов решать за «правильных пацанов». Холоп должен кодить, при чём строго в том стиле, в котором кодит пахан. Иначе пахану скучно жить станет…
                    –7

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

                    0
                    Можете привести пример текста тестового задания?
                    0
                    Забавно что chapuza переводится с испанского как халтура ) извините за офтоп. В Испании живут и работают точно не ради денег… Особенно в жадном регионе каталонии
                      +1

                      Забавно не это, а то, что до сих пор существуют люди, которые воспринимают сборище тупых хомячков, называемое «хабр» — всерьез. Разумеется, я знаю, как переводится «chapuza» и специально подобрал такой ник.


                      В местах, где мне доводится вести серьезные интересные дискуссии с умными людьми  — я подписываюсь полным именем, очевидно.

                        –1

                        Мне интересно, а зачем вы тогда тут нарисовались со своей статьёй? Раз тут "тупые хомячки"? Захотелось признания, не оценили, а теперь хамите внаглую… Нехорошо.
                        Вам бы следовало помнить, что: как вы яхту назовёте — так она и поплывёт… А вы тонете очень хреново.


                        P.S. Ваше поведение заставляет сомневаться в том, что "умные люди" — принимают вас в своё сообщество. Вы вон — "на хомячках" в неприкрытое хамство ударились.

                          0
                          Захотелось признания, не оценили [...]

                          Щито? Когда мне хотелось признания, я написал самую комментируемую заметку на хабре за всю историю сайта.


                          вы тонете очень хреново

                          Нам очень ценно ваше мнение.


                          Ваше поведение заставляет сомневаться [...]

                          Так сомневайтесь, я не против.

                            –1
                            Щито? Когда мне хотелось признания, я написал самую комментируемую заметку на хабре за всю историю сайта.

                            Максимальное количество комментариев за ваши статьи получила вот эта вот статья. И вот этим вы похваляетесь как примером "получения признания"? Банальщиной которую люди интеллигентные назвали бы "банальной провокацией", а чуть менее интеллигентые — "вбросом дурнопахнущей коричневой субстанции на вентилятор"?
                            Вам не стыдно вообще это вот приводить в качестве примера "самореализации"? Хотя… хамство и стыд — вещи мало совместные.

                              0
                              похваляетесь

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

                                –1

                                Прежде чем давать подобные советы — научитесь вежливости. Это как минимум.


                                Когда мне хотелось признания, я написал самую комментируемую заметку на хабре за всю историю сайта

                                Что это как не похвальба?
                                Кстати похвальба лживая: на данный момент (30.03.2020) эта статья имеет 1984 коммента. По быстрому поиску я нашёл как минимум эту статью с 2266 комментами — вам ещё работать и работать над "самой комментируемой заметкой". Так что поздравляю вас соврамши.


                                P.S.
                                Хотя может быть ложь и чрезмерное эго — ваши коньки?

                          0
                          Забавно не это, а то, что до сих пор существуют люди, которые воспринимают сборище тупых хомячков, называемое «хабр» — всерьез. Разумеется, я знаю, как переводится «chapuza» и специально подобрал такой ник.

                          Что ты тут забыл тогда? Ты же не хомячок, верно?

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое