Over the summer, I was invited to speak with the recruiting team at the S.I Systems Vancouver office. I popped in and delivered a lunch and learn style presentation with the goal of helping their team better distinguish top-tier developers from the not-so-top-tier developers. Recruiters constantly face this challenge, and given most of recruiters have little to no programming background, it is necessary to address to the issue. Below is an excerpt from the presentation.
First, we need to define what a “good” programmer is. Without a doubt, “good” varies from client to client and role to role. If Client A is looking for a developer who has to code, interface with clients, and lead a team, then interpersonal skills can factor into the definition of “good”. On the other hand, Client B may have a deadline and require a developer who is strictly there to write code. It is up to the recruiter to be able to disseminate the information given to them by the client to ensure they have the fullest understand of what “good” means in order to deliver the most suitable candidate.
Secondly, let it be known that this is all in my own personal opinion. Having been in the technology industry for 10 years as a designer, developer, consultant, and having hired developers for my own organizations, I have developed this guide as my own helpful checklist.
The first fact that is important for a recruiter to understand is this: to know if a candidate is a good programmer, a skilled programmer must write code with them. Full stop.
I firmly believe that this is the most fundamental tool to assess the actual level and talent of a software engineer. A pair programming session helps me evaluate how the developer analyzes and approaches a problem, and the quality of code written to do so.
The obvious problem here is that most recruiters are not skilled programmers. However, recruiters can rejoice in knowing there are other characteristics that can help distinguish good programmers from bad ones. I have listed them below along with example questions a recruiter could ask in an interview to help them spot talent.
Characteristic #1: Good software developers love to build stuff.
Be it lego, a bike, or their own personal productivity software, good developers are passionate about building things. Here are some questions you could ask a candidate:
- What tools have you built to make your work easier?
- What open source projects have you worked on?
- What do you love to do outside of software development?
- Could you pass along some work you’re proud of?
For some programmers, it will be impossible to pass along previous client work. However, they probably have a github profile for you to check out and pass along to your client.
Characteristic #2: Good software developers love to learn.
I have never met a good software developer who wasn’t hungry for new knowledge. They are always up to date on the latest tech news, testing out the latest languages, and are eager to gather, digest, and discuss interesting information.
- What are you reading these days?
- What programming language or framework are you learning right now?
- I just heard about Node.js and it seems pretty cool. What do you think about it?
Characteristic #3: Good software developers play nice on a team.
This characteristic is a tough one to spot. Speaking with references is a crucial component to assessing this trait, and a recruiter will have to carefully gauge the typical role the candidate played on past projects.
- Have they lead a team? Big or small? Can they follow when necessary? Or do they only follow?
- Go out for coffee and talk about things other than software development in order to better assess their general interpersonal skills
Characteristic #4: Good software developers like to analyze and solve problems.
Engage the candidate in a conversation about non-software related problems, and how they have solved them. Good software developers are always seeking ways to make things more efficient, and can break down a problem quickly in order to create a sound approach to solving it.
- How did they approach the problem?
- How do you go typically go about solving a new problem?
- Get a concrete example, not just a hypothetical situation
Characteristic #5: Good software developers can communicate complicated ideas simply.
No matter how ridiculously complex the thought/product/idea/solution is, a good software developer can communicate it simply and with clarity to his/her audience.
- What’s your favourite programming language?
- Why would a business use it?
- Why do you prefer it over other languages?
- Tell me about the last project you worked on.
Even if you don’t understand programming languages and why they are used, a good software developer should be able to communicate it to you in non-programmer terms.
In summary, it is important to understand what the client wants and how a candidate may fit that. The size of the company, team, and project will entirely affect how ‘good’ is defined, as well the pool of qualified candidates.
Before you set up a pair programming session with your client’s internal technical staff, be sure to assess the 5 characteristics listed above – it will undoubtedly help you in your quest for top-tier software engineers.
Good luck on the hunt!
As always, feel free to get in touch with me with any questions or comments!