Hiring Engineers is Hard - Are You Doing It Right?

Josh Cole·20/06/2022·19 min·4,327 words

Hiring good people is incredibly hard, and despite what it might feel like, hiring is one of the most difficult tasks you will be required to do at work. It’s a process fraught with pitfalls, subconscious biases, and dead ends. It takes valuable time away from the day-to-day work that somehow still has to get done. It consumes a huge amount of time and energy for all involved, interviewees and interviewers alike. And mistakes can be extremely costly, damaging team moral and culture, and even derailing entire businesses.

Given all that, I’m sure you’d agree — it’s important to get it right first time.

Over the last ten years I’ve reviewed thousands of CVs and interviewed hundreds of people, mostly for roles rooted in engineering but occasionally in other areas too. Hiring is such an immensely vast topic that I’m sure I could sit here and write a book on the subject… perhaps one day. For now I shall settle for explaining some of the green ✅ and red ❌ flags I keep an eagle eye out for when interviewing candidates.

My philosophy when interviewing candidates is that green flags are like brownie points and red flags are like strikes. Earning lots of brownie points might put you ahead of other strong candidates, but it’s three strikes and you’re out. It’s never worth hiring someone with a lot of negatives just because they shine in one area - if you’re considering doing that you might want to take a fresh look at your motivations.

So it’s time to put on your detective hat. 🕵️‍♂️ A good interviewer is very much like a detective, investigating every angle to sniff out clues as to what the candidate is really like under the surface. Green and red flags alike provide invaluable clues to how a candidate will approach their work and the value they’ll bring to the team.

🟢 Green Flags

We’ll start with the positive. There are certain things a candidate will do or say that will pique my interest. It’s not important for candidates to have every single item on this list but the more they have the stronger they are. Having lots of these points can put them in front of other strong candidates but they can never cancel out a strike.


✅ Curiosity and passion

What this is: Engineering is such a broad and tough discipline that it takes real motivation to see difficult and time consuming tasks through to the end. It helps immensely if the individual is passionate about engineering or some aspect of it, and that usually manifests itself as curiosity.

How to spot it: Candidates who are curious naturally want to know more about subjects that interest them. Often they’ll mention side projects or other things they’re doing outside of work to satiate their curiosity. Another trait that tends to indicate curiosity is self-directed learning.

Questions to ask:

  1. Are you working on any side projects at the moment?
  2. What are you interested in learning about?
  3. Tell me about a project you really enjoyed working on? Why did you enjoy it?
  4. Tell me about a project you disliked working on? Why was that?

✅ Opinionated

What this is: Devising solutions to complicated problems so often relies on diverse intellectual opinions. We all have such different life journeys which give us all a unique perspective and unique ideas. It’s important that engineers care enough to advocate for their positions, not to mention being able to form a useful opinion in the first place.

How to spot it: This often shows up as passion. You might see the candidate’s eyes light up whilst they talk animatedly about a particular topic. It’s a good sign when a candidate is willing to challenge the established dogma with a well considered alternative view and doesn’t shy away from tackling controversial topics.

Questions to ask:

  1. Tell me about a time you and a colleague had differing technical opinions and how you resolved the difference?
  2. Tell me about a project you really enjoyed working on? Why did you enjoy it?
  3. What are the different levels of testing and why is each important?
  4. What’s your most controversial technical opinion?

✅ Open-minded

What this is: Forming opinions isn’t enough. Engineers also need to be cognitively flexible as their favourite pet idea may not be optimal for the situation at hand. It’s not always easy to see where one is going wrong without being willing to consider opposing perspectives.

How to spot it: Candidates can demonstrate open-mindedness by being able and willing to consider alternative viewpoints. It will be possible to constructively challenge them on their opinions without their ego running riot. In fact, they should enjoy the riposte.

Questions to ask:

  1. Tell me about a time you and a colleague had differing technical opinions and how you resolved the difference?
  2. What are you currently learning about?
  3. How do you stay up-to-date with all the new frameworks, languages, design patterns, etc?

✅ Ability and willingness to learn

What this is: Close-minded individuals may possess a well-formed ability to learn, but they are effectively choosing not to learn because they won’t consider alternative viewpoints. Similarly, you may find individuals who are open-minded but aren’t adept at learning new concepts.

How to spot it: A good indicator for learning is reading. In the age of on-demand videos and instant gratification reading has become a bit of a lost art but it’s an incredibly valuable skill. You’ll also find people who enjoy learning are the same people who are always exploring and finding new things to learn.

Questions to ask:

  1. Are you working on any side projects at the moment?
  2. What are you interested in/currently learning about?
  3. How do you stay up-to-date with all the new frameworks, languages, design patterns, etc?
  4. What’s the biggest mistake you’ve made at work? How did you recover from it?

✅ A team player

What and why: Engineering is a team sport. Much of the software we build these days is extremely complex with lots of moving parts, languages, and tools. It’s impossible for an individual to do everything alone, rather, good engineers support each other, help their colleagues solve tough problems, and actively share their knowledge.

How to spot it: Candidates who are team players will talk about how they have supported other team members, pair programming often comes up, as does coaching, partaking in brown bag sessions, pointing teammates to particular resources, or pitching in when needed.

Questions to ask:

  1. Tell me about a time that collaborating with teammates was really essential?
  2. What’s the best way to help less experienced engineers to learn and improve?
  3. Do you prefer to work remotely or in an office? How does that benefit you?
  4. What does leadership mean to you?

✅ Honest

What this is: Everybody makes mistakes. We’re all human, but the key is to always learn something from our mistakes. Without honesty it’s not possible to objectively scrutinise what happened and put a plan in place to ensure it doesn’t happen again. People who hide their mistakes are destined not to grow (and neither will their team).

How to spot it: Given a psychologically safe environment, honest people will be willing to admit their mistakes. They’ll be transparent and open about their limitations and weaknesses, and they won’t try to cover up their rough edges or say what they think you want to hear.

Questions to ask:

  1. What’s the biggest gap or weakness in your skillset?
  2. What’s the biggest mistake you’ve made at work? How did you recover from it?

✅ Positive outlook

What this is: Sometimes, work is just a slog. That’s the nature of work at times, it can’t always be fun and games, and sometimes it’s downright challenging and stressful. Boring and frustrating work is something we all have to deal with from time to time so it helps to have a positive attitude to lighten the tough times. Positive energy goes a long way.

How to spot it: Hopefully this comes across clearly when speaking to a candidate. But I always like to uncover past work experiences the candidate disliked. The way a candidate talks about their least favourite aspects of work tells you a huge amount about their personality and resilience.

Questions to ask:

  1. Tell me about a project you disliked working on? Why was that?
  2. How do you keep yourself motivated when the work is a slog?

✅ Creativity

What this is: Increasingly there are tools, frameworks, and automations that are slowly making the life of an engineer easier and easier. The boring, repetitive work (what’s called “routine cognitive” work) is being automated, leaving just the creative aspects of the role. That’s why it’s more important than ever for engineers to be creative problem solvers, able to combine their experience and expertise to deliver novel solutions to new challenges.

How to spot it: Creativity can manifest itself in many different ways. I like to see candidates who can solve problems with novel, non-obvious solutions. So called ‘lateral’ thinkers. The candidate should show an automatic, intrinsic desire to problem solve and not require much prompting.

Questions to ask:

  1. Tell me about a time you took ownership solving a problem?
  2. How would your colleagues describe your contribution to the team?
  3. Given [scenario x] - what would you do?

✅ Detail orientated

What this is: Creativity is great but you can’t engineer anything without getting down and dirty in the details. Bugs 🪲 love it when engineers don’t pay attention to the details. They find all the crevasses and corners to hide in. And they replicate. Before long, you have an infestation on your hands.

How to spot it: Programming is the act of describing to a machine in extreme detail the steps required to complete a task. Candidates should be able to decompose a task and describe the steps clearly in sufficient detail so that someone unfamiliar with the task could successfully complete it without help.

Questions to ask:

  1. Imagine you’re explaining to a robot how to [make a cup of coffee] - what steps would the robot need to take?
  2. How would your colleagues describe your contribution to the team?

✅ Proactive

What this is: You want people on your team who are willing to step up and take responsibility. You want people who upon spotting problems are willing to take ownership of fixing them, or at the very least, reporting them. It’s a terrible waste to have incredibly capable people who only do the bare minimum because “it’s not their problem”. Yes, this is a organisational culture issue, but it’s also a personality trait.

How to spot it: Dig into when and why a candidate has taken ownership of a problem in the past. Do they have pride in their work and do they want to do the best job possible? Proactive individuals won’t wait to be told, they’ll jump in and do what they know to be right.

Questions to ask:

  1. Tell me about a time you took ownership solving a problem?

✅ Goal orientated

What this is: Never have I worked on a team where there isn’t a beefy backlog and a long wish list of new features, bug fixes, and technical debt to work through. Being goal-orientated helps one to focus on delivering value rather than just churning through tickets, i.e. busywork. Candidates should be motivated and directed by their own goals and those of the organisation.

How to spot it: The easiest way to spot this is in candidates who keep track of their personal goals. That won’t be everyone, so for all the rest you should look for candidates that can talk about their previous work goals and how they made progress against them.

Questions to ask:

  1. Are you working towards any personal goals at the moment? What are they?
  2. Tell me about the goals you’ve been working towards at work? Why are they important?

✅ Sense of humour

What this is: It’s important to take into account nerves in an interview situation. Intense personal evaluation is not a pleasant psychological situation, however, it’s always nice to see a sense of humour shining through. Humour helps teams to coalesce and perform well, and it helps both individuals and teams to push through when times are tough.

How to spot it: Candidates with a sense of humour will be able to make light of difficult or stressful situations in a professional manner. Humour isn’t about offending people, it’s about shared experiences and unexpected ideas.

Questions to ask:

  1. Tell me about a project you disliked working on? Why was that?
  2. How would your colleagues describe your contribution to the team?

✅ Humble

What this is: No rockstars please. 🎸 No one individual is better than the team, no matter how talented they may be. Teams must be able to work together and one bad egg with an ego the size of Mount Everest can torpedo a well-functioning team.

How to spot it: You want people on your team who do take their fare share of credit but also share it around as well. Humble people don’t hog the limelight, they shine it on their teammates. Look for people who aren’t all ego and are willing to praise the wins of their teammates.

Questions to ask:

  1. Tell me about a time you and a colleague had differing technical opinions and how you resolved the difference?
  2. How do you keep yourself motivated when the work is a slog?
  3. Which of your colleagues do you most admire? Why’s that?

✅ Confident

What this is: Confidence is important. Without it people can’t stand up for their viewpoint, and valuable ideas get lost. You don’t want to end up with the loudest voice in the room calling the shots by virtue of their volume. You always want the best ideas to come to the fore regardless of where they come from.

How to spot it: Candidates who are confident are able to speak up when there are opposing views. They understand that their opinion still holds tremendous value even if it’s different from everybody else, and even if it isn’t chosen as the final ‘solution’.

Questions to ask:

  1. Tell me about a time you and a colleague had differing technical opinions and how you resolved the difference?
  2. How would your colleagues describe your contribution to the team?
  3. What’s the biggest mistake you’ve made at work? How did you recover from it?

✅ More conversation than Q&A

What this is: And finally it’s often a good sign when an interview just flows. When it feels more like a conversation than a one-sided Q&A. That being said it’s important to ensure you aren’t favouring candidates just because you personally get on with them and they’re comfortable in interviews. It’s an easy trap to fall in to.

How to spot it: It should be obvious when things go smoothly, but remember to make allowances for nerves, cultural differences, communication style, introversion, language barriers, personality compatibility, and so on.

🔴 Red Flags

I could easily have taken all the green flags and simply flipped them to make this list. Job done. But that wouldn’t be doing it justice. There are some specifics I want to call out here as you’ll want to identify these before you make a decision to hire someone.

Personally, I operate a three strikes and you’re out policy. The reason being because the negative impact of hiring a bad egg is significantly higher than the negative impact of hiring a candidate who is slightly less strong than another (hypothetical) candidate.

Furthermore, I’ve bifurcated this section into ‘strikes’ and ‘flags’. Strikes are serious infractions whilst flags are less serious but are still important clues you need to take notice of.


Major Strikes

Strikes are serious. Any candidate who gets three strikes is out, regardless of how good they might be in other areas.

❌ Using too much jargon, waffling, rambling, or general poor communication

Communication is so very important in engineering. Developers need to work with many different stakeholders day-to-day including designers, product owners, scrum masters, managers, customers, and of course other developers. Without the ability to communicate clearly and concisely, a developer is liable to misunderstand requirements, struggle to advocate for their viewpoint, fail to promote themselves and their teams, and be less effective at their job. After all, what is programming if not communication with a machine?

❌ Dispassionate

If a candidate is not very passionate or curious about engineering in general or the role you’re hiring for, or even the company and industry you operate in, it’s a solid indicator that they could quit early or not put their best energy into the job. In particular, a lack of excitement or curiosity for engineering is a big red flag for me. It makes me ask why this individual is even a coder if they don’t love it? Are they just chasing the money? Engineering is hard and people who don’t love it don’t excel. Similarly, if they don’t ask insightful questions about the company or job, are they really that interested?

❌ Rockstar

A rockstar developer is an individual who is usually excellent at their job, possibly even phenomenal… and they know it. They have the full ‘rockstar’ personality and an ego to match, making them difficult to work with as they often won’t listen to other’s opinions or even explain their own perspective to them. You might think it’s fine to hire one individual like this because their output is just so much better/more than the rest of the team, and what harm can it do really? However, you’ll soon find out that one bad egg can ruin a team, tanking productivity, and causing people to transfer or quit.

❌ Saying what they think you want to hear or being a ‘yes person’

This kind of individual won’t ever present dissenting opinions, they won’t bring their unique ideas and experiences to the table. They’ll just do what you ask. Which means you’ll be asking a lot, or rather, telling them a lot. You’ll be constantly telling them what they need to do next and they won’t take any initiative either out of fear of being wrong or laziness. This becomes worse over time and eventually the individual won’t think independently. This is also one of the reasons that micromanaging is so damaging but that’s a topic for another day!

❌ Carelessness

Really this is the opposite to the green flag ‘attention to detail’, but I list it here as a red flag because it’s so important. You wouldn’t hire a careless civil engineer to build a bridge because disaster would (eventually) ensue. Software engineering requires similar extreme attention to detail and whilst it may not feel quite as life and death, the impacts can actually be extremely far reaching. Mistakes in software can and do costs lives, and they certainly cost businesses an awful lot of time and money every year.

❌ Cave dweller

Engineers who just want to sit in a dark room by themselves and code away may be absolute geniuses, but it’s not very likely they’ll be able to collaborate effectively with other team members. They may want to do everything their way rather than take on board new techniques or better ways of working. For some roles that are more academic or research-orientated you may need someone who can just plug away at the keyboard for long periods of time. For all other roles, try and avoid this behaviour. Teamwork is a necessity not an option.

❌ Flakiness and repeated rescheduling

People who have a lot going on in their life or are too disorganised to keep to a committed time will not have their eye on the ball at work. It’s also a basic unit of respect to keep your commitments when you make them. Repeatedly changing your mind and messing people around won’t be limited to the interview process, it will bleed into the day job, affecting meetings, deadlines, and wasting other people’s valuable time.

❌ Dishonesty

This one is simple. If you catch someone being dishonest in an interview you can be sure they will continue that behaviour on the job. As with everything, it’s a matter of degree. Everybody stretches the truth and bigs up their skills and achievements during the interview process. It becomes a problem when that stretching becomes ‘breaking’ — only you can define where that line sits for you.

Minor Flags

These flags don’t automatically disqualify candidates but you should be wary of them and take them into consideration in balance with the green flags.

⚠️ Academic over-correctness and perfectionism

A close relative of the cave dweller is someone who views engineering as very academic, and will spend inordinate amounts of time and energy ensuring their work is ‘academically’ correct. In the right role this trait can be very useful and often necessary, but I would argue in the majority of roles commercial pressure makes it almost impossible for things to be done perfectly. Excellence breeds quality whilst perfectionism saps productivity.

⚠️ Lack of confidence, lack of self-promotion

Not everybody is going to be super confident all the time. We all have periods where our confidence takes a knock or we experience imposter syndrome when we’re trying to push ourselves beyond our comfort zones. I’ve often found that people lacking in confidence are stronger than they give themselves credit for, and it just takes a supportive environment and emotionally intelligent leader to unlock their super power.

However, confidence can become a problem where the role stretches the individual two or three steps outside their comfort zone when actually they can only cope with taking a single step at a time. Building an individual’s confidence takes time and requires gradual progress rather than long leaps. If your team setup doesn’t allow for this then think long and hard about hiring them.

⚠️ Negativity, moaning, badmouthing others, not taking ownership

Some people are pessimistic. That’s human nature, but there are limits to what is acceptable in a team environment. Someone who is always negative about work, especially if they’re negative about and badmouthing other people, will drag down a team and hurt morale. Everybody has these days though and that’s where humour comes in, it helps inordinately when there’s a challenging period.

Negativity is closely related to not taking ownership. People who take ownership of their own challenges and behaviours will not be as negative because they have a strong internal locus of control. People who who have a weak internal locus of control on the other hand, often feel powerless and subjected to the whims of the universe. This can manifest as negativity or ‘venting’. A good way to tease out this trait is to ask candidates what the biggest mistake they ever made was and how they recovered from it.

⚠️ Many of their work tenures are too short or too long

It’s not a good sign if a permanent candidate has a string of short roles one after the other. One short role is understandable because they may have been mis-sold a job and decided it wasn’t for them once they started. Multiple short tenures in a row is an issue though. It tells me that the candidate either doesn’t know what they want, can’t commit long-term, or isn’t getting on well with their coworkers. None of which are good traits to have.

For permanent engineers I would expect to see jobs that last for one to two years. Less than a year is problematic. But so is staying for a long period of time. People who stay in the same job for many years (or even just at the same employer) tend to stagnate. For me, five years is a long time for an engineer to stay at a single employer or job. The benefit of moving jobs is that candidates get to see different ways of working, different engineering techniques, and so on. They effectively get a much broader ‘education’. This is a good thing.

⚠️ Gaps in work history

I don’t necessarily have an issue with CVs that have gaps. I too, live in the real world and understand that stuff happens, life gets in the way, and people sometimes need time to look after themselves and reset. People can and should choose to take time off from work for family, travelling, and health if they have the opportunity to do so. Life is short and not all about work.

So for me, gaps on a CV are not a problem, but they do need to be explained, and explained right on the CV. Candidates that don’t do this can end up getting discounted before they even get a chance to talk about the gaps. That being said, the bigger the gap, the harder it will be for the individual to step back into employment.

⚠️ Salary expectations aren’t commensurate with their ability

The salary a candidate asks for is one data point I use to ascertain their experience level. If a candidate asks for a senior salary it indicates to me they see themselves as a senior developer, and I would expect them to comfortably perform at that level in the role. If the requested salary feels too high, it makes me ask whether the candidate is just chasing the money, or worse, isn’t self-aware enough to price their ability accurately. On the flip side, if the requested salary feels low it may indicate a lack of confidence.


There’s an awful lot here and to be honest I haven’t even started to scratch the surface. Hiring is incredibly difficult despite what it might feel like. It consumes a large amount of energy and time for all involved and is strewn with traps and cognitive biases.

One of the mental models that helps me to navigate the hiring landscape is the idea of green and red flags. Green flags are like brownie points, they help you compare suitable candidates, whilst red flags have the power to disqualify candidates from the process. Three strikes and you’re out has served me well.