Ask HN: How do you or your company handle coding assigments for interviewers?
Greetings Hacker News,
The company I work for uses a coding project to help vet developers in our interview process; this is something I have been thinking about how to improve upon, as we use a mix of often poor fitting tools and manual processes in this stage of the interview. As an example we use our in house git repo manager to store and review applicant code, which is challenging because we either get a huge number of repositories created unrelated to our actual work, or continually need to keep sticking assignments down into a single repository which gets big and/or ugly as time goes on. Actually executing code submitted is also painful sometimes as not everyone interviewing who wants to test the code knows how to meaningfully sandbox it, which creates additional headaches when things go off the rails. These problems in the process are important for us as it often creates huge distractions from the actual work that needs to get done.Does the company or organization you work for today use a coding project as part of the interview process? Do you use any special tools, tricks or services to facilitate that stage of the interview? When you incorporate coding projects into your interview process, do you just do review, or do you also try and execute the code? Do you experience any similar pain points around this? If your organization doesn't use a coding project, barring the understandable philosophical objections to the exercise, would you consider using a coding project if there was a better way to manage having an applicant submit and get their code reviewed/tested?
As always, I really appreciate the wonderful insight this community always seems to bring. :)
3 comments
[ 3.1 ms ] story [ 20.5 ms ] thread- Have applicants keep their code in their own repo. No need to clutter your VCS with their stuff. Anyone applying for a development position should already have one anyway. If you're concerned about applicants scanning Github for completed assignments, have them upload a zip of the code to <insert favorite cloud service here>. Clear the bucket/folder every 30 days (easily automated).
- Tell applicants exactly what you are going to do test their code. Tell them the steps you will take exactly and that if their code doesn't run with these steps you won't try to debug it. Don't be heartless though, if it doesn't run at first let them know and give them an opportunity to fix it. We all make mistakes.
- As for sandboxing, take care of it yourself. Provide a base docker image or include instructions on how to setup vagrant. We used to provide a vagrant file and include instruction on how to setup it up and get your code inside of it. Developers that struggled with this, struggled with the assignment in general. This is especially relevant if you deploy your code using some kind of virtualization.
- Be very specific in your requirements and in the details of the environment that their code will be run in. If you don't want to jump through hoops getting a machine to be able to run their code let them know their code should work on a clean install of <your favorite OS> with no additional system packages aside from the language itself and required compilers/toolchain (maven, pip, godep, virtualenv, etc). If the assignment requires other stuff be installed, Pillow an image processing lib for Python requires some C libraries be installed for example, install it yourself and let them know the version you have and that their code should work with that. Docker is your friend here.
Depending on the assignment, I just assign them to add a new feature just to see how capable they are and what it looks like.
Once I get their code, I do a quick pull request to see the changes and scan for the basics: comments, capabilities, and security concerns. I'll often google some of the sections to see where they got it from and check it against security advisories and otherwise.
The cost of hiring someone who can't spend 5 minutes googling for the correct answer is far higher than the cost of me taking a good long look at their solution to the problem.