Mining GitHub for New Hires

In search of an experienced software engineer

We have been trying to hire such a profile for the last year … The position is hopefully filled now. During that year, we have tried to mine github for candidates. Here is how we did it.

Software engineers, especially experienced, are known to be hard to find. Over the past months, we had steadily been improving our hiring process :

  • By regularly rewriting and optimizing our job post
  • By posting it on Twitter
  • By defining a precise interview template

We went from very few applications to :

  • More applications
  • More experienced candidates
  • Regular interviews
  • Effective interviews

Unfortunately, we were still not interviewing candidates as skilled as we would have liked to. We were convinced that we were offering a great job : the project is very interesting, and the team is a dream to work in.

How could we reach more great devs ?

Someday, I played with github’s Rest Api and I managed to write a short ruby script that finds the contributors to a given project that are living near Paris (France).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
require 'rubygems'
require 'rest_client'
require 'json'

RestClient.proxy = "http://proxy:3128"

def github_get(resource)
  JSON.parse(RestClient.get("https://api.github.com#{resource}", params: {
                              access_token: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
                              per_page: 200}))
end

repo = ARGV[0]


puts "searching for #{repo} contributors in France"


contributors = github_get("/repos/#{repo}/contributors")
logins_locations = contributors.map do |user|
  begin
    login = user['login']
    location = github_get("/users/#{login}")['location']
    {login: login, location: location}
  rescue Exception => e
    puts "could not see details of #{login} #{e}"
    {login: login }
  end
end


puts "Here are all the contributors"
puts logins_locations
french_contributors = logins_locations.select do |login_location|
  location = login_location[:location]
  location != nil and
    (location.downcase.include?('france') or
     location.downcase.include?('paris'))
end

puts "----------------------------"
puts "Here are all the frenchcontributors"
puts french_contributors

What’s next ?

We eventually filled the position before following our github experiment. We might continue some day though ! Here is a list of improvements I thought of :

It really looks like if software is eating recruitment …

Comments