The GitHub Job Interview
blog.gigantt.com
blog.gigantt.com
I'd never do this Github interview for an open source project that was not very widely used, for the same reasons I'd never work on the company's closed source for an interview: exploitation.
In that sense, working on a toy problem is a big feature to me in an interview process, I know I'm not being cheaply exploited.
Also, other things equal, I prefer to do a code problem at interview because I know it will have helped filter out the fluff from getting into the company I'm applying to.
It doesn't matter that it's open source if you're not going to use it and no-one else apart from them is (a very real possibility).
In essence, I'd happily agree with the article after changing this:
> "You come up with a cool idea of an open-source project"
with this:
> "You find a _popular_ open-source project"
Now you can be certain (not just optimistic) that the wider community will benefit from your work.
(edit: I'm thinking along the lines of jQuery, backbone.js, nodejs, django, memcached, sqlite, Nginx, Hadoop, Linux, ..., not some dev's/company's lonely github project)
Why would someone put this on their CV?
Some trickier issues with trial periods are:
- If they currently have a job, they will typically need to quit the other job before they can do any work for you, even if it is on nights and weekends, and even if it is unpaid. Otherwise there are serious legal issues around IP. So it's no good for poaching.
- A good candidate will have several offers. Even for a two-week trial period, they will probably need to turn down those other offers. That sucks for the candidate because it will really muddy the water with those other companies if in two weeks they want a job again. They could always get offers from other companies, but if the candidate actually wanted to work at those other companies, why didn't she interview there the first time around?
Both of these are surmountable if you are a genuinely desirable employer. For one thing you have the flexibility to talk only to awesome candidates, and awesome candidates are less likely to have problems accepting offers that they previously rejected. (Perhaps even on better terms -- it's very powerful to walk away from a negotiation while you have the upper hand.)
After 15+ years of doing open source and being in Sr. Software Engineer positions where I've been responsible for interviewing hundreds of people, I'm convinced now that I would never hire anyone who doesn't have some sort of public online project. I don't care what it is, you must have some code to show.
You are saying that you only have code which is entirely private. This is most likely code you wrote for your employeer, which you can't show me anyway because chances are that it is NDA private. Or, you have code which you wrote for say, an iPhone app which you are probably never going to show to anyone. That is all fine.
However, you are also telling me that you've never integrated any open source projects into your code or relied on any non-commercial external libraries. Or, maybe you have done that.
But then I have to wonder why you've never contributed back to any of these projects that you've depended on. If you are a great dev, I'm sure you found them lacking in some way and wanted to contribute a bit back to them.
Thus, we've come full circle. Any developer that I would want to hire, has figured out that there is a massive ecosystem of open source projects out there. They are integrating them and contributing something back to them. They are drawn to these projects like flys to sh*t. These projects teach them new tricks because they are studying others code. They are drawn to give back to these projects because they are taking so much good from them. That is what makes a good developer in my eyes.
Here is a really good case in point example. Last night I was working with the amazing Underscore.js library, which I'm fairly new to. I found that I wanted to do something with it, couldn't figure it out and made a suggestion on how to improve it [1]. Someone from the community responded quickly, we had a bit of really positive back and forth and in the end I learned something new about the library. I expect that anyone I hire has the gumption to also be doing similar work.
Go fork some projects.
The whole company is built off of Open Source, but there are teams the fork the projects into internal repositories (Perforce when I left) and put a bunch of Amazon-specific 'things' into them. As a developer there, I didn't use the Open Source sites, docs, or mailing lists at all -- I used Amazon's. We had wiki's, ticket queues, and mailing lists -- all internal to Amazon. Maybe the core team that's doing the forking and merging from the trunk would or does contribute back, but for any given project >99% of the developers at Amazon don't ever work on that codebase -- or with the codebase of any of these projects.
As a developer, we just have a 'team' somewhere that does. If something doesn't work in Tomcat, we don't go find the Apache page and file a bug, or jump on the mailing group, we file a trouble ticket with the team that owns Tomcat at Amazon, and they fix it. Maybe they go to the Apache pages and mailing list, or maybe they just see the line of code in the codebase and fix it, I have no idea.
In high school, we were all told that in order to get into college, you needed to have extracurricular activities. I consider spending some time at night or on the weekends on an open source project part of the deal of being a software engineer. Not everything needs to be taught or done on the job. The people I want to hire make their own time to learn and grow.
I can find any number of jobs without your approval or that of the "cool kids."
Thanks anyway.
It's different for big companies (Google, Microsoft etc.) that have to hire by truckloads, but small, startup companies (say, <40 people), only need to hire a couple of good people and therefore can be selective and therefore can use a filter that rejects "majority of people" (especially given that filter also strongly correlates with "people they wouldn't want to hire anyway").
Now, I'm not saying it's your problem, as you also need to be hired by only one of many companies so it's perfectly valid to ignore companies that have a strong preference for open-source contributions.
However, if you do want to be considered by such companies, it's a small investment to build a portfolio of open-source code on github.
I believe this is becoming more and more important because more and more startups are founded by people who grew up in a world where open-source projects and github are a norm, not some extraordinary event as it used to be just a few years ago.
If your answer was "no", then my follow up question would be "so basically you wouldn't hire someone whose prior career had been spent at companies like yours?".
If your answer to the first question was "yes, option (2)", I'd have some follow up questions probing why the job is not able to provide enough interesting and challenging work to fully engage me.
To answer your questions though:
(1) I'd expect you to continue doing open source, as both part of the job and on your own. I do it, so should you. Case in point, we just integrated our site with WePay. WePay didn't have Java API, so I wrote one (along with my business partner) and we made it open source [a]. This benefited my company, open source and WePay all in one shot. This isn't the only one, I can point at many more large projects [b], [c], [d] (for just a short list) that we've either open sourced ourselves or contributed to. I have a clear history of coding in multiple languages. Anyone who is going to hire me knows my skill set without having to give me silly brain teasers or even read a resume. Why would anyone want to hire someone without a clear record like that?
(2) How you spend your time is up to you. There is a certain amount of work that needs to get done as part of the job and I'd expect that to get done. As long as you are getting your work done, in a reasonable time and of a good quality, I'm fine with whatever you do with your time. If that 'policy' doesn't leave you with enough energy, then I'd suggest either learning how to do better time management or find another profession / company.
As I already said, I wouldn't hire someone without seeing their source code. The single best way to really see it is to see how they've contributed and worked with open source projects. Bonus points if you find a unique project to create yourself.
[a] https://github.com/lookfirst/WePay-Java-SDK [b] http://objectify-appengine.googlecode.com [c] http://batchfb.googlecode.com [d] https://github.com/lookfirst/bootstrap
Now, I have a hard time finding enough time for my own projects, much less for contributing something to a company just for the chance to interview.
Since you're offering single digit equity, it might be worthwhile, but for the vast majority of companies, it would warrant a pass.
Also it's good to see how someone reacts to digging around in an unfamiliar code base and see how they familiarize themselves.
This way it's not officially a probation - the candidate can even say they were freelancing during this time - so the CV problem doesn't come up AND you don't look the tiniest bit like you are exploiting people.
* psych pressure
* unrealistic timeline
* googling is usually not allowed, whereas EVERYBODY uses it writing code in real life
* editor/environment is usually not "yours"
* etc..
hence the _way_ you choose to conduct a code test will, in most cases, matter a lot less than the actual _problem_ you choose that needs to be solved. the more applicable this problem is to what your business does every day the better. e.g. sometimes a "red-black tree" is crucial, other times things like a simple mobile CRUD app with a REST web service OR a thin, high throughput TCP/IP based protocol could be a lot more relevant.
of course you can't realistically expect a 100% bug free or even complete code from candidates, especially if you ask for things like an "app" or a new "protocol" => what really matters is _how_ people "get to it".
github or not, I hired several exceptional people not that long ago using a piece of paper and a white board. If it is not a face to face interview, skype and/or google docs are also effective.
It achieves several aims:
1. This approach scales. Send a prospective employee the github url and they can get started.
2. The programming puzzle can be solved in about 15 minutes. Kind of like a better Fizz Buzz.
3. The interviewee doesn't feel insulted that the employer expected them to do some work for free.
4. The employer has some assurance the person will have some source control competency, to be able to check out from a Git. repository.
5. You could test the prospective employee based on the skills you require. For example: You could even have the puzzle interact with a web service. Troubleshooting the program will involve firing up a proxy or packet sniffer to figure out why things didn't work. It might be a jQuery bug. etc.
Have you ever tried to fix an open bug on a GitHub project? It is non-trivial.
Is this not closer to the actual job than Pascal's Triangle?
Ideally you want to learn about a potential candidate's design/coding/debugging/bug-fixing/testing skills. Github project collaboration over a week or so would go a long way towards that.
But you also want to see how well the potential employee communicates with other members of the team, on a day-to-day basis. Some Developers, even good developers, have strong opinions that might rub other employees the wrong way. The key is to look at how well they work as a team.
Having them spend a day or so onsite with your existing team is invaluable. You might also want to consider paying them a nominal amount for the amount of time they would spend on the project. That just adds a professional touch to the whole experience.
If I'm onsite with your team working on your code-base, someone damn well better be paying me for it. Not to mention those kinds of shenanigans are downright illegal in some parts of the world...
Thanks to Open Source right now there are tons of public code from people, that's why we have created masterbranch.com a service to aggregate, analyze, and list all you OS but also with the option of include non-open source code (the code is not visible if the project is not open source).
Also, the idea of open sourcing a component, a side project, etc. and ask the candidates to contribute I think is a great way to have an idea about how they work.
- it took me quite a long time to find the 'Claim all your identities' - it should be in the same place I edit my profile.
- after I claim one account I don't have a link to go back and claim other accounts
- something is wrong with handling bitbucket projects, it sees only 2 of my projects
- if I go to 'Claim all your identities' for the second time, I don't see a list of my claimed accounts.
- no link to jump to my profile in the profile menu (top-right), ther should be one
- "Your profile is 40% complete" 40% of what?? it begs for a 'learn more'
- javascript ranks higher in the chart than python although it has less projects (even from the small number it recognizes) and less code
Too confusing.
- About the bitbucket projects, maybe the crawler didn't get all the links, you can send us projects to add going to "Missing projects? Add a project"
- About the link to go to your profile, there is a tab named "go to your profile" on the main nav-bar
- The progress bar needs explanations and also some work because is not working properly right now.
- The chart is ordered by the number of files. Probably we should order it using the number of files, commits, and the time but right now this's the order and maybe this is why is confusing to you.
Again, thanks for your feedback, appreciated.
https://api.bitbucket.org/1.0/users/{{ username }}/