Pull to refresh

Как нанять лучших инженеров не убив при этом себя

Reading time 6 min
Views 2.1K
Original author: Sau Sheong Chang
Garena, в которой я сейчас работаю, находится в процессе роста и я занимаюсь наймом инженеров, сисадминов и подобного персонала, чтобы удовлетворить аппетиты растущей платформы и выдержать планы и сроки выпуска продуктов. Проблема, с которой я постоянно сталкиваюсь, заключается в том, что не только одна наша компании занимается поиском и наймом инженеров. Это особенно актуально сейчас, когда многие компании опубликовали свои ежегодные бонусы (или отсутствие оных) и неудовлетворённые рядовые сотрудники компаний пополняют ряды соискателей. Иными словами, собираются в кучу музыкальные стулья с компаниями и инженерами.
«музыкальные стулья» (детская игра; под музыку дети ходят вокруг ряда стульев; когда музыка прекращается, играющие бросаются занимать стулья, которых на один меньше, чем играющих)

Нечего и говорить, что это является причиной определенных сложностей с наймом. Отрадно, что есть много кандидатов. Однако обратной стороной данного факта является проблема сохранения высоко квалифицированного инженера с адекватным складом ума в рамках растущего cтартапа. В то же время подбор и утверждение кандидата должны быть быстрыми, так как промедление, даже с частично подходящим кандидатом, чревато его потерей в течение одного-двух дней.

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



В книге Why Flip a Coin: The Art and Science of Good Decisions, H.W. Lewis писал об аналогичной (хотя и более строгой) проблеме, связанной со знакомством. Вместо выбора кандидатов в книге рассказано о выборе жены, а вместо проведения интервью, рассмотрена проблема знакомства. Однако, в отличии от книги, где предполагается что Вы можете встречаться только с одним человеком за раз, в моей ситуации я, очевидно, могу проинтервьюировать более чем одного кандидата. Тем не менее, возникающие проблемы в значительной степени неизменны, если я буду интервьюировать слишком много кандидатов и потрачу слишком много времени на принятие решения, то они будут перехвачены другими компаниями. Не говоря уже о том, что я, вероятно, ещё до того умру с пеной у рта от передозировки общения.

В книге Льюис предложил следующую стратегию — скажем, мы выбираем из списка состоящего из 20 кандидатов. Вместо того, чтобы интервьюировать каждого, мы случайным образом выбираем и интервьюируем 4х кандидатов и выбираем лучшего из этого списка-образца. Теперь, имея в запасе этого лучшего из этих 4х кандидатов, мы интервьюируем остальную часть списка по одному до тех пор, пока мы не встретим кого-либо лучшего и, в итоге, нанимаем этого кандидата.

Как вы догадались, эта стратегия является вероятностной и не гарантирует выбор наилучшего кандидата. В самом деле, есть 2 наихудших варианта развития событий. Во-первых, если мы случайно выбрали 4х худших кандидатов в качестве списка-образца и первый кандидат, выбранный из остальной части списка, будет 5 м худшим, то мы наймем 5 го худшего кандидата. Не хорошо. И наоборот, если самый лучший кандидат находится в списке-образце, то мы рискуем провести 20 интервью, а затем потерять этого лучшего кандидата, поскольку весь процесс занял слишком много времени. Снова плохо.

Итак, хорошая ли это стратегия? Кроме того, какая оптимальная численность списка (общее число кандидатов) и списка-образца нам необходима для того, чтобы извлечь максимальную пользу из этой стратегии? Давайте будем хорошими инженерами и воспользуемся моделированием методом Монте-Карло, чтобы найти ответ.

Давайте начнем с численности списка в 20 кандидатов, а затем переберем численность списка-образца от 0 до 19. Для каждого списка-образца мы находим вероятность того, что кандидат, которого мы выбираем, является лучшим кандидатом в списке. На самом деле мы уже знаем эту вероятность, если список-образец равен 0 или 19. В случае если список-образец равен 0, будет выбран первый кандидат, которого мы интервьюируем (поскольку не с кем сравнивать), поэтому вероятность равна 1/20, и составляет 5%. Аналогичным образом со списком-образцом равным 19, нам придется выбрать последнего кандидат и вероятность этого также равна 1/20 и составляет 5%.

Вот Ruby код моделирующий это. Прогоним моделирование 100,000 раз, чтобы рассчитать вероятность как можно более точно, и сохраняем результат в CSV файл optimal.csv
  1.  
  2. require 'rubygems'
  3. require 'faster_csv'
  4.  
  5. population_size = 20
  6. sample_size = 0..population_size-1
  7. iteration_size = 100000
  8. FasterCSV.open('optimal.csv', 'w') do |csv|
  9.   sample_size.each do |size|
  10.     is_best_choice_count = 0
  11.     iteration_size.times do
  12.       # создаем список и сортируем случайным образом
  13.       population = (0..population_size-1).to_a.sort_by {rand}
  14.       # получаем список-образец
  15.       sample = population.slice(0..size-1)
  16.       rest_of_population = population[size..population_size-1]
  17.       # это лучший из списка-образца?
  18.       best_sample = sample.sort.last
  19.       # находим наилучшего выбранного этой стратегией
  20.       best_next = rest_of_population.find {|i| i > best_sample}
  21.       best_population = population.sort.last
  22.       # наилучший ли это выбор? считаем сколько раз этот выбор наилучший
  23.       is_best_choice_count += 1 if best_next == best_population
  24.     end
  25.     best_probability = is_best_choice_count.to_f/iteration_size.to_f
  26.     csv << [size, best_probability]
  27.   end
  28. end
  29.  


Код достаточно самоочевидный (особенно со всеми комментариями), поэтому я не буду вдаваться в подробности. Результат показан ниже на линейном графике, после открытия и разметки файла в MS Excel. Как вы можете видеть, если вы выберите 4 кандидатов в качестве списка-образца, вы будете иметь примерно 1 шанс из 3, что вы выбираете наилучшего кандидата. Лучшие шансы, если выбрать 7 кандидатов в качестве списка-образца. В этом случае вероятность того, что вы выберете наилучшего кандидата около 38,5%. Выглядит не очень хорошо.
Best

Но, честно говоря, в случае нескольких кандидатов мне не нужно, что бы кандидат был «наилучший» (во всяком случае, такие оценки носят субъективный характер). Допустим, я хочу получить кандидата находящегося в верхней четверти списка (верхние 25%). Каковы мои шансы тогда?

Вот пересмотренный код, который моделирует это.

  1.  
  2. require 'rubygems'
  3. require 'faster_csv'
  4.  
  5. population_size = 20
  6. sample_size = 0..population_size-1
  7. iteration_size = 100000
  8. top = (population_size-5)..(population_size-1)
  9. FasterCSV.open('optimal.csv', 'w') do |csv|
  10.   sample_size.each do |size|
  11.     is_best_choice_count = 0
  12.     is_top_choice_count = 0
  13.     iteration_size.times do
  14.       population = (0..population_size-1).to_a.sort_by {rand}
  15.       sample = population.slice(0..size-1)
  16.       rest_of_population = population[size..population_size-1]
  17.       best_sample = sample.sort.last
  18.       best_next = rest_of_population.find {|i| i > best_sample}
  19.       best_population = population.sort.last
  20.       top_population = population.sort[top]
  21.       is_best_choice_count += 1 if best_next == best_population
  22.       is_top_choice_count += 1 if top_population.include? best_next
  23.     end
  24.     best_probability = is_best_choice_count.to_f/iteration_size.to_f
  25.     top_probability = is_top_choice_count.to_f/iteration_size.to_f
  26.     csv << [size, best_probability, top_probability]
  27.   end
  28. end
  29.  


В файле Optimal.csv мы добавили новую колонку, которая содержит верхнюю четверть (top 25%) кандидатов. Ниже показан новый график. Для сравнения добавлены результаты предыдущего моделирования.
Best+25

Теперь результат обнадеживает, наиболее оптимальный размер списка-образца составляет 4 (хотя для практических целей и 3 достаточно хорошо, так как разница между 3 и 4 мала). В этом случае вероятность выбора кандидата из верхней четверти списка устремляется к 72,7%. Великолепно!

Теперь разберемся с 20 кандидатами. Как насчет списка с большим количеством кандидатов? Как эта стратегия выдержит, скажем, список, содержащий 100 кандидатов?
100+Best+25

Как вы видите, эта стратегия не подходит для определения наилучшего кандидата из большого списка (список-образец слишком велик, а вероятность успеха слишком низка). Этот результат хуже, чем полученный нами для списка с меньшей численностью. Однако, если нас устроит кандидат из верхней четверти списка (т.е. будем менее требовательны), нам достаточно 7 кандидатов в списке-образце, при этом вероятность достижения необходимых результатов составит 90.63%. Это изумительные шансы!

Это значит, если вы менеджер по найму с сотней кандидатов, вам не нужно пытаться убить себя, интервьюируя каждого. Просто проинтервьюируйте список-образец из 7 кандидатов, выберите лучшего, а затем интервьюируйте остальных одного за другим, пока не встретите того, который лучше, чем лучший в списке-образце. Вероятность того, что вы выберите кого-либо из лучших 25% списка в 100 кандидатов составит 90.63% (и это, вероятно, будет тот, кто вам нужен)!
Tags:
Hubs:
+1
Comments 18
Comments Comments 18

Articles