I have interviewed thousands of Software Engineers. I’ve hired some that have turned out to be superstars, some were just good, and some were mistakes.
I’ve seen commonalities among those hires that excel, and I want to share them here. With regard to software engineering interview questions, here’s my method to deliver more rockstars.
The Cost of Hiring the Wrong Person
According to the U.S. Department of Labor, the cost of a bad hire to a company is approximately 30% of the person’s yearly earnings. For a Software Engineer/Developer, that is around $40,000. However, the CEO of Link Humans says the true cost of hiring and onboarding a new employee is close to $240,000.
Whichever statistic is more accurate, hiring the wrong person will cost you a lot of money and time.
What is a Great Software Engineer?
They are the type of people I hire for my company and any company I’m involved with. They make my life easier.
- A great software engineer loves learning about new technology. Like LOVES it.
- A great software engineer is resourceful. They will instinctively find a solution even when it’s outside the standards of the project.
- A great software engineer is not satisfied with “average”.
- A great software engineer can communicate with a non-technical person effectively.
- A great software engineer can estimate accurately and deliver within the timeframe.
- A great software engineer is not a “brilliant jerk”.
- A great software engineer wants to be around other great software engineers.
- A great software engineer is not a robot that needs to be told exactly what to do.
A great software engineer can deliver three times as much good code as an average developer in a given timeframe. They are creative, and entrepreneurial, and bring forth ideas that a Product Owner may have overlooked. Over time, people tend to seek them out to “brainstorm” an idea with them.
Things I Do and Don’t Do
- I will immediately engage with a small list of recruiters that have delivered incredible candidates in the past. These recruiters are the best I’ve seen for software engineering, which is why I work with them. There’s a cost for their services, but unless that’s a problem, I reach out to them first.
- I will also reach out to my current rock stars and see if they have people to recommend. Remember – great developers tend to recommend (and want to be around) other great developers.
- I may post the job opening online, but I won’t use the standard job boards. I like to post where the developers hang out such as ProductHunt and StackOverflow. I don’t pay for the post, but use more of a general forum post. Again, I won’t do this often as it may result in 1000 replies that I have to sift through. However, if I’m able to post to only a smaller group on these sites (that I’ve networked with in the past), then I’ll do that. This would limit the results I have to sift through to maybe 10 maximum, but the quality is higher.
- Occasionally, I may have a candidate take an online technical test from Codility.com. I have slowly moved away from this since I put a higher value on the person’s attitude, but it remains a useful tool for certain circumstances. It can prove useful to gauge a candidate’s proficiency in various programming languages though.
- I typically don’t rely on the Human Resources department to send me candidates. Most HR departments are fairly lean and may not be staffed with dedicated technical recruiters that know software development. The Engineering department is ideally positioned to interview while HR plays a supporting role when the offer is made.
- I hesitate to post a job opening to my existing network on LinkedIn or Facebook. These networks are a combination of many different experience levels, and posting directly to them is like inviting everyone to spam me about how great their cousin would be for the role.
- I don’t require the candidate to have a college degree. You don’t really learn the software development process in college, so the immediate value for the job doesn’t match up. Technology changes so fast that a resourceful person who has learned to program on their own is demonstrating enthusiasm. If they do have a college degree, that’s great. It’s just not a hard requirement for me.
- This one is important – I don’t care about a person’s outward appearance. They are here to do a job and do it exceptionally well. As long as they are professional and kind to their coworkers, that’s what counts. I actually value originality, since a developer needs to think fast and be creative. If originality to them means they want blue hair, I’m all for it. We’re creating a team of rockstars, and attitude is the most important attribute.
The Interview Process
In many cases, I prefer to have one or two people with me, and it’s a one-interview process.
Invite the Smart People
I like to bring in co-workers that are currently in the same job as the open position, so they can bring an accurate job perspective. Also, if the position will be reporting to someone besides myself (who may not be a hiring manager), I include them in the interview. They deserve to have some ownership in the process, and it gives them a bit of career experience also. We’ll all be in the room together, but I always go first and ask my questions before I let the technical-level expert(s) ask their questions.
I used to interview everyone alone, but my success rate is far higher when I get confirmation from other people here. Some candidates are good at interviewing and can sway a single interviewer. This ability goes way down when multiple people talk to them.
I’m Not Always Right
One rockstar I hired was a candidate that I probably would have passed on. The person seemed tired (he came to the interview after he got off work at his current job) and I didn’t feel any energy from him. I knew he was good technically but it was between him and another person, and I was leaning toward the other person.
I had two other people in there with me and they both loved him. I reluctantly said ok, and the result was one of the best hires I’ve made. I’m not always right, which is why having some very smart people with me results in a higher success rate.
One and Done
Also, I also don’t like to do multi-stage interviews (where they come back in for a second and third interview). I think it wastes time for me and the interviewee. I want everyone to get all the information they need within 60-90 minutes. Overthinking kills productivity, so I am always trying to eliminate it.
I actually timebox myself and my colleagues to make a decision during the interview about whether or not the person is a good fit. This process has an amazing success rate. It keeps people focused on whether the person can do the job and add value to the department.
Software Engineer Interview Questions
Anyone that has performed a lot of interviews can relate to this… You ask the same questions over and over. This is actually a good thing as it “standardizes” the interview.
The only drawback is that the candidates tell their recruiters exactly what I asked them when the interview is over. Like each question word for word. So any future candidates from these recruiters seem to be a little bit more prepared and ready for these questions.
Since I have at least one technical-level expert in the room with me, I focus on the candidate’s soft skills. I know they’ll pepper the candidate with very specific coding-level questions after I’m done. I tend to ask more high-level questions to gauge their personality and commitment.
So what questions do I ask? Here they are:
Do you know what we do?
They better have looked us up on the web at a minimum. They should know what industry we’re in and be interested in it. If they come from a recruiter, they’ve been updated by them. It’s important that they have an accurate idea about the company and overall vision.
Are you currently working?
If they’re not working, why not. Any gaps in work are a giant red flag for me. Layoffs are understandable, as long as they weren’t the only person laid off. I want to know if they were let go from a previous job (and why) or if they quit the job without the security of having another job. The answers here can tell me the mindset of the person. If they quit one job for any reason without having another job first, it’s almost a dealbreaker for me. I want everyone on a team to have the right mindset from the start.
What do you like about your current job?
This will tell me what they value highly.
What do you dislike about your current job?
This may tell me the most about a person. It also demonstrates their soft skills since it’s a delicate question to answer. Do they dislike having to work overtime if the job requires it? Do they have issues with a coworker? I’m trying to see if they have legitimate complaints or if they just whine about job challenges.
If the answer has to do with the software development process at his current job, then you have to be careful that the same thing doesn’t exist at this company.
Why do you want to leave your current job?
Is it a legitimate reason, or are they thinking the “grass is greener” somewhere else? Again, we want to avoid job hoppers that will leave after six months.
Sometimes the candidate’s explanation is something that also exists at your company. If so, they probably won’t be a good fit.
What are you most proud of in your career?
Did they win “Employee of the Year”? Did they save the company a million dollars by rewriting some legacy applications? Maybe they’re not proud of anything? Their answer will be a good example of what motivates them.
What have you done that you wish you could do over?
What do they regret? Perhaps they’re embarrassed by something. This could be a good indication of what they value if they wish they could go back and improve it.
What would you like to improve about yourself?
This is more of an easy question for them to answer before the next one. People tend to have a rehearsed answer for this as well.
What kind of job would you be passionate about?
This is a huge question that tells me about what really drives them. You have to be careful that they don’t give you a rehearsed answer though. I may follow up with another question like “Tell me why that is so interesting for you” or similar. This answer may also be a deal breaker if they are describing a situation that is the opposite of this job. You want people to thrive, not get hired and be unsatisfied. That is costly.
Can you tell me about a time when you had to learn a new technology or programming language quickly? How did you approach that challenge?
This one is important to me. A rockstar is always learning new things and actually embraces new technology and different programming languages. The answer that I want to hear is that they were under pressure to deliver and they worked all weekend to learn something new such as a new programming language and ultimately saved the day. Something like that. Not all heroes wear capes ya know.
Where do you see yourself in 5 years?
Similar to the above answer, this one is pretty important. You want their desire to be close to the position’s career path. If I’m hiring for a software developer role, but this person really wants to be a salesperson in 5 years, I have to question how engaged they will be in this position.
Do you have any personal software projects you’ve created and maintained? Or do you have any Github repositories?
This one is extremely important to me. This alone shows me if they work on tech OUTSIDE of work hours.
Do they really love tech or are they burnt out after 8 hours? Do they go home after work and write an app to start their coffee maker at 6 am every morning simply because it’s a challenge? Perhaps they’re building a robot at home and have to learn a new programming language just for the fun of it.
Those are the kind of software developers you want. They are excited to bring in new solutions to work.
Have you ever launched a product on ProductHunt?
Same as above. Did they personally create anything that others find useful? Do they know what ProductHunt is? This would show if they are entrepreneurial or if they are active in the startup community. This actually helps their project management skills. They know how to get from start to finish on their own. It’s not really a requirement, but it will tell you more about their mindset as a “creator”.
I’d like you to rate your skills on a few things 1-10, 1 being no experience and 10 being that you know everything about it.
These tell me their confidence levels in their skills. I can generally tell if someone really knows their stuff before I ask this, but I want to hear their own opinion. If a novice gives themself a 10, it can be telling. Also, I will alter these based on the type of software developer position (i.e. – I won’t ask a PHP developer about their Java skills). Below are for a .Net software developer:
- C# skills – 8
- SQL skills – 7
- Selenium skills – 7
- Amazon Web Services skills – 3
- Github skills – 9 (currently using BitBucket)
I’ll also make sure they are experienced with agile software development and the overall software development life cycle.
Note – If English is not their first language, I will give them a communications score. Productivity is impacted if everyone has to interpret what was said by someone. It’s important that they are fluent in whatever spoken language your team uses.
Do you do anything fun outside of work?
This is my standard final question to wrap my portion up. I will use it to see if they have much in common with other members of the team, but it’s not really something used to hire or reject them. It’s more of my cue to the other interviewers that their moment has arrived.
Next, I let my coworkers commence with the more technical part of the interview. They grill the candidate with technical questions like, “What’s the best structure for a multidimensional array when retrieving three levels of data from a client’s API”? They also make sure to talk about data structures, dynamic programming, user interface, unit testing, and other technical skills along with programming code.
While we expect them to know about software engineering and the software development life cycle, they should also know about project management tools and agile software development.
This portion takes the majority of the time (as it should). The person should know their stuff. You can sit back and gauge the person’s communication skills during this portion. Did they answer the exact question asked or try to talk around it?
If you are an expert in software development, you know when someone else is flustered. It’s okay if the person is confused by a question, but do they ask for more information? This is critical as a software developer, so I want to see that behavior here. They shouldn’t be trying to make us think they’re smart. They should just be smart, and it should be apparent to everyone in the room. That may sound odd, but you’ll know it when you see it.
Finally, I ask them if they have any questions for us, which everyone should have at least one or two. We answer them and when they don’t have anything else, we politely thank them for their time.
How I Grade a Candidate
Immediately upon the completion of the interview, I give the person a score from 1-100. I don’t spend a ton of time on this but I do write a few notes down like pros and cons. I tend to have a short list of items that I want to remember. Kind of like highlights to sum up the interview.
I keep most resumes of people I’ve interviewed for a long time along with my notes. I have found that a person might apply for another open position in the future. Glancing at my summary notes from the initial interview helps me avoid any wasted energy later on.
I also have the people who assisted in the interview score the person as well. Their scores are a cumulative “gut check” from each person.
As a group, we’ll discuss all scores immediately after the interview for 5 minutes. This needs to be immediate when our memory is fresh about the candidate. I feel this is respectful to the candidate and allows us to make a decision and move on to other tasks. There’s no big debate here, but we quickly bring up the pros and cons. No overthinking is allowed.
- If a person scores below 85, they are rejected.
- If the person scores an 85-89, that’s hireable but I’ll probably continue to interview other candidates depending on urgency.
- If the person scores a 90 or above, I have no concerns and this person will probably get an offer from me.
It’s typically a “go or no-go” situation unless they fall in the 85-89 range. If that’s the case, a final decision may be made in a few days (I generally hate doing this) after we interview additional candidates.
That’s the majority of my proven system. Attitude is so important to a software engineering role. Technology changes overnight, and stress is part of the job. With the right interview questions, you can greatly increase your chances of adding rockstars to your team.
Remember to tailor the interview process to the company’s needs and be open-minded to candidates from non-traditional backgrounds. The best software developers often have a rebellious streak burning in them. This seems to work in their favor when they need to find alternative solutions to tough problems.
If you are struggling with your hiring process, I encourage you to reach out to me for a chat. I’d be happy to help.