Mining GitHub For New Hires

1 minute read

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.

Github's banner

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).

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 …

I usually write about 15 minutes worth of reading per month. I won't transfer your email. No Spam, unsubscribe whenever you want.

As a gift for subscribing, you'll receive an illustrated mini-ebook "How to start a team coding dojo"!

Leave a comment