Sourcing on GitHub
This is a split from my post on how you should use GitHub and StackOverflow in technical recruitment. In this piece I am going to cover how to:
- utilize the built-in search engine of GitHub to find software engineers,
- X-ray GitHub to find software engineers,
- find developers based on their code contribution, and
- contact the potential candidates you have found.
1. Searching for GitHub users
GitHub has a pretty neat and advanced built-in search engine here: https://github.com/search/advanced.
The Boolean operators AND, OR and NOT are supported, but the maximum number of operators you can use is 5. Some searches will end prematurely when the server times them out, but I have only experienced this when listing millions of results. You can recognize this timeout if you see this exclamation mark.
An other limitation of this engine is, that you have to fit in 128 characters.
Although finding users is not the primary usage of this search engine, it’s pretty easy to run a search for users from a certain location, programming in a certain language — they for sure sound like a potential candidates :). To start, scroll down in the search site linked above, type in a location and hit the Search button.
Although the given example of San Francisco, CA implies that adding the state (US) or country (rest of the world) after the name of the city is the best way to use this field, that is actually not true. Searching for San Francisco, CA will give you user profiles who have set up either San Francisco OR CA as their location — as seen on the picture below.
This is still useful, but certainly not what you would expect with this writing format. So if you are determined to only see the results who describe the location name with adding the state/country (this can be pretty useful if you are for example looking for people from York, UK) you will have to change this:
Note: This editing can not be done on the original search window, just on the results page. Keep in mind that some people fill out the location field just with the country, while some others fill out the city. It’s best to make sure you have searched for both options.
The next step is to narrow down users who code in a specific language. The filters on the left side can help you choose from the most popular languages in the area, but with a bit of URL editing you can essentially choose any programming language.
If you want a programming language which is not present on the list, just change the ‘Python’ in the URL — for example for Visual Basic software engineers in London use this URL:
The spaces will be filled out automatically. GitHub classifies the repositories into the following languages — essentially this is your menu.
|Language||What to write|
|AGS Script||AGS Script|
|Ant Build System||Ant Build System|
|C2hs Haskell||C2hs Haskell|
|Cap’n Proto||Cap’n Proto|
|ColdFusion CFC||ColdFusion CFC|
|Common Lisp||Common Lisp|
|Component Pascal||Component Pascal|
|Darcs Patch||Darcs Patch|
|Ecere Projects||Ecere Projects|
|Emacs Lisp||Emacs Lisp|
|Game Maker Language||Game Maker Language|
|Gentoo Ebuild||Gentoo Ebuild|
|Gentoo Eclass||Gentoo Eclass|
|Gettext Catalog||Gettext Catalog|
|Grammatical Framework||Grammatical Framework|
|Graph Modeling Language||Graph Modeling Language|
|Graphviz (DOT)||Graphviz (DOT)|
|Groovy Server Pages||Groovy Server Pages|
|IGOR Pro||IGOR Pro|
|Inform 7||Inform 7|
|Inno Setup||Inno Setup|
|IRC log||IRC log|
|Java Server Pages||Java Server Pages|
|Literate Agda||Literate Agda|
|Literate CoffeeScript||Literate CoffeeScript|
|Literate Haskell||Literate Haskell|
|Maven POM||Maven POM|
|OpenEdge ABL||OpenEdge ABL|
|Parrot Assembly||Parrot Assembly|
|Parrot Internal Representation||Parrot Internal Representation|
|Propeller Spin||Propeller Spin|
|Protocol Buffer||Protocol Buffer|
|Public Key||Public Key|
|Pure Data||Pure Data|
|Python traceback||Python traceback|
|Ragel in Ruby Host||Ragel in Ruby Host|
|Raw token data||Raw token data|
|Standard ML||Standard ML|
|Unified Parallel C||Unified Parallel C|
|Visual Basic||Visual Basic|
|Web Ontology Language||Web Ontology Language|
The limitation of this method is that you can only filter on one programming language. Fortunately there is a way to overcome this — with the help of Google.
2. X-raying GitHub
Finding people who are using one programming language might be enough for you, but often you need proficiency in at least 2. For that, you are going to need the ability to X-ray Github.
Unlike Stackoverflow, GitHub has no part in the URL which directly shows you that a certain page is a profile page. So when you are searching GitHub you have to use a similar technique than what you can do with LinkedIn, locate certain parts of the page which are specific to user entries. An example for that might be the text “contributions in the last year” found here.
Check this search to find just user profiles.
The minimum you would like to search for is again the location and the programming language, and that is extremely easy: just add it to at the end of the string. The language is not visible in the rendered page, but is in the source code.
You can add more locations with an OR statement — keep in mind that some users will have cities, some will have countries. You can use the languages from the table above.
3. Searching for codes on GitHub
Software engineers use the internal search engine of GitHub to find codes from other developers (and the “folders” storing codes, the repositories). After you found the code, you can obviously check who created/contributed to it. This presents the opportunity to find people based on the output of their work — what better way can you imagine to narrow down your pool to people who are skilled for the job?
There is unfortunately a downside with this search method. You can not filter based on location (would not really make sense for developers to find code just from f.e. France, would it?). Adding additional criteria on the results page in the form of location:Paris does not change anything in the output as well. So this method is mostly useful for virtual opportunities or for companies with relocation packages.
The idea requires cooperation with your Hiring Manager. Ask them about a function, a short piece of example code the future hire will work with, and might currently use as well. Then you can return to the GitHub advanced search and use it to find codes of software developers containing the part provided by your HM. Once you find a code, you found the user who created it.
Let’s use the inverse square root implementation in Quake 3 (found here, supposedly it’s a difficult code :)) as an example to show this in practice. It’s C++ code, so you either have to select C++ in the dropdown list of the languages or use .cc or .cpp as extensions.
Here is what you will get, a ton of software developers using float invsqrt in C++ in a similar way than in the code used by your company/client.
The key with this is obviously your connection with the Hiring Manager, and whether he/she can come up with a specially important code example.
4. Finding contact details of candidates found on GitHub
Needless to say, the hunt for contact details is going to be the most difficult part while sourcing on GitHub. Thankfully in more and more cases there is an Email address or a website listed on the profile, and you can contact your potential candidate on these. Things get a little more complicated if this information is not given. One of your options to contact someone is to use one of the extensions mentioned in the main post, just the other way around — finding other profiles based on the GitHub profile. Alternatives to that are running a Google Image Search (right click — search Google with this Image), or running a username check on namechk.com
There used to be a wonderful trick with an API link which showed you the Email address of ALL users, but that has been addressed by GitHub and is not showing all addresses anymore. You can still check it, because some users might still have the addresses and/or you can find other useful information like a Gravatar profile link.The API link is https://api.github.com/users/flavienlaurent/ , where for any other user, just change the “flavienlaurent” part of the username.
If for some reason you have found and read this article before reading the post about what other — even more important — ways are there to use GitHub and StackOverflow in technical recruitment, be sure to read it now.