From the start I want to make it very clear that it is extremely hard to find a great programmer if you are not one. Many people would even say that it is impossible for someone without a programming background to find a great programmer.
Paul Graham has remarked on the impossibility of the task when discussing the 18 mistakes that kill startups:
So how do you pick good programmers if you're not a programmer? I don't think there's an answer. I was about to say you'd have to find a good programmer to help you hire people. But if you can't recognize good programmers, how would you even do that?
If you are not a programmer yourself, it is often hard to know what to look for in programmers you want to hire. Candidates might say they know Ruby or C++ or Python, but if you do not know anything about coding, then there is no way to verify their claims. Once you get even further into comparing different candidates who know the same languages, you will have no idea what to look for.
This guide cannot solve all of these issues, but it can give you ideas for good places to start if you need to find a good programmer but are not one.
1. Talk to friends who are good developers
If you do not have a programming background, try to find some developer friends to point you in the right direction. Ask about the hiring process, questions to ask in an interview, and specific answers to look for. This should give you confidence to tackle the first round of interviews on your own, but try to have a programmer or two in the room to help with later rounds. Once you start asking more technical questions, you really need to have someone around who knows what to look for.
What to Ask
To get you started, here are some good questions to ask in the early stages of the programming interview process:
- Tell me a little about yourself and a recent project you have been working on. This question will help you get to know the candidate a little better, and you can hear about some of their recent work in order gauge passion and dedication.
- What are your other time commitments? Depending on the length and complexity of your project, you may only want to hire someone you know will be dedicated to your project. However, many programmers will juggle multiple projects at once, especially if the project is smaller. Just make sure that both you and your programmer are aware of what you need.
- Do you consider yourself a developer, a product manager, or both? The ideal answer here is usually both, but assess the strengths and weaknesses of each candidate compared to the team you already have or are planning to create. Product managers are great to help design new features and interfaces, but you also need enough developers who can follow directions and build what is needed.
- How would you manage a team of programmers? This question will help you assess leadership skills and style.
- Here is what I expect from the person I hire. Be straightforward with your expectations. Things like expected time commitment, project length, and goals are all important things for candidates to know. They are judging how your company fits them as much as you are judging how they fit your company.
2. Find developers in their natural habitats
You cannot plan on just happening across a good programmer--experienced programmers with a background at Microsoft or Google are not just going to fall into your lap. Chances are, these programmers are in very high demand or might have business ideas of their own that they want to pursue. You will have better luck exploring venues where skilled developers spend their time, rather than trying to poach these guys from Facebook.
Hackathons are my favorite talent-discovery activity. A hackathon is an event where computer programmers and software developers collaborate to create new software. Some hackathons are purely social or educational, but they still provide a great source of talented developers. Many hackathons are narrowed down by specific focus, and you should target those that are relevant to your product.
Open source code contributors
Sites like GitHub offer an online repository for code where programmers can contribute to open source projects. As a plus, you can look at samples of a candidate's code before contacting them. If you do not have programming experience, you can ask a friend who does to help you look for good candidates on Github.
— GitHub (@github) June 25, 2015
Although you might cringe at the thought of hiring students, this can actually be a great way to find talented coders. If you have any contacts at different universities, ask them to forward an email about your project to CS listservs. Even better, contact any CS professors you know and ask them to recommend top students. Many of their students have been coding for years and can be just as good as programmers backed by a lot of experience. Universities will often have their own hackathons or competitions where you can find their top students as well. Who doesn't want an award winner on their team?
Start going to as many software development conferences as you can that are relevant to your project. These will be full of speakers and other attendees who are interested in that topic, and it is easy to spark up conversation. If there is a conference that you cannot make it to, look at the program online and try contacting various speakers. If they cannot help you themselves, they might be able to recommend someone who can.
Many programmers have their own personal blogs or might be mentioned on the blogs of other programmers. This can be a great source for potential candidates, and it allows you to learn about the candidate before even contacting him or her for a resume. You will be able to judge their technical skill, problem-solving ability, and writing/communication skills all in one place. Here's a collection of the top programming blogs for 2014.
3. Explore online freelancing sites
If all of this seems overwhelming, there are actually a lot of sites in place to help people find programmers if you do not have any experience with coding yourself. You should, however, do your research to find the best site for your needs. Different freelancing sites are set up in different ways, so on some you might end up stuck with the cheapest programmer instead of the best.
If you do choose to take this route, explore Toptal, a site for the top three percent of freelance developers. Toptal screens all of its applicants with language and personality tests, timed algorithm testing, technical screenings, and test projects. Once you describe your project to one of their engineers, you'll be introduced to developers hand-picked to suit your technical and cultural needs. You can work with programmers on short-term projects or as full-time members of your team for as long as need be. If you choose to go it alone, use their helpful hiring guide to get you started.
In short, if you are a non-developer looking to hire a great programmer, you are probably not going to be able to do it on your own, without at least some level of technical knowledge. Talk to friends, reach out to colleagues, and take advantage of online sites already in place to help you. The best thing you can do is to have a clear vision of your project and take your time. Nothing kills a project faster than hiring a bad developer to work on it.
4. Never hire before giving a test project
If you take one thing away from this article, it should be that you should never, ever hire a programmer without first giving a test project. It can be tempting to hire the first programmer that looks promising--after all you want to get started--but do not extend an offer until you have seen the work that your candidate produces.
Typically, testing your candidate can take the form of week-long assignments, bringing on the candidate as a consultant, or adding a probationary clause to an employee agreement. However it is difficult to create an appropriate project if you are not a programmer yourself. Fortunately, resources like StackOverflow and Test4Geeks can make the testing process easier.
Launch their sample tests, let them do the grading, and leave you to do the decision making.