How to Assess Programming Skills When Hiring Software Engineers

Nick Derham
by Nick Derham, Director โ€ข C-Suite Executive Recruitment Specialist

Added on: 20th April 2026

Most technical hiring processes are broken. They reward rehearsal over real ability, create anxiety that masks talent, and still fail to predict on-the-job performance. Here is a grounded, practical framework that actually works.

Technology manager reviewing work with a developer at a computer workstation in a modern office environment.

The Real Problem With Technical Hiring

Most companies believe their technical hiring process is rigorous. In practice, it is usually one of three things: an algorithmic puzzle marathon that filters for competitive programmers, a vague “culture fit” conversation that filters for similarity, or a take-home project so enormous it filters for desperation.

None of these reliably predicts whether someone will write good code, ship reliable software, collaborate effectively with a team, or grow into a senior role. At Adria Solutions, we have worked with hundreds of engineering teams and seen the same expensive mistakes made repeatedly.

Hiring a software engineer on the basis of a LeetCode score is roughly as logical as hiring a chef by testing how fast they can recite the periodic table. Technically demanding. Entirely irrelevant.
– Adria Solutions

The goal of this guide is not to hand you a template to copy. It is to give you a genuine mental model for what you are trying to find out, and then match your process to that goal.


What You Actually Need to Assess

Before choosing any assessment method, you need clarity on what separates a good software engineer from a mediocre one in your specific context. In most product-led engineering teams, that breaks down into five things:

  1. Problem-solving process, not just answers. Can they decompose an ambiguous problem, make reasonable assumptions, and arrive at a workable solution? Do they ask the right clarifying questions?
  2. Code quality and craftsmanship. Is their code readable? Would another engineer be able to understand and modify it in six months without needing a decoder ring?
  3. Awareness of trade-offs. Do they understand what they are sacrificing when they make a design decision? Speed vs. maintainability, flexibility vs. simplicity, abstraction vs. explicitness?
  4. Communication and collaboration. Can they explain a technical decision to a non-engineer? Can they receive and give constructive feedback on code without becoming defensive or dismissive?
  5. Intellectual honesty. Are they willing to say “I don’t know” and then figure it out, or do they bluff? This matters more than people realise.

Keep this list somewhere visible when you design your process. Every element of your assessment should be earning its place by illuminating one of these dimensions.


The Best Assessment Methods (and When to Use Them)

There is no universally correct method. The right tool depends on the seniority of the role, the size of your team, the nature of the work, and how much candidate time you can reasonably ask for. Here is an honest breakdown:

MethodBest ForLimitationsSignal Quality
Live pair programmingMid-to-senior roles; assessing collaboration and communication in real timeTime-intensive; some candidates underperform due to anxietyHigh
Take-home project (scoped)Roles where code quality and architecture matter; junior to seniorCandidate time cost; cannot verify authenticity with certaintyHigh
Code review exerciseAny level; especially senior where code judgment is criticalRequires well-crafted review material; less about production abilityHigh
Technical Q&A interviewAssessing domain knowledge and depth of understandingRewards memorisation; easy to coach for; poor predictor aloneMedium
Algorithmic puzzle (LeetCode-style)Very limited: roles requiring genuine algorithm design at scale (e.g., search infrastructure, ML systems)Heavily biased toward rehearsal; high candidate drop-off; poor signal for most rolesLow for most roles
Portfolio reviewExperienced engineers with open-source or public workNot all strong engineers have public work; biases toward those with time for side projectsMedium

For most hiring processes, the combination that produces the best signal per hour invested is: a well-scoped take-home task, followed by a structured debrief and pair-programming session in which the candidate extends or refactors what they submitted.


How to Design a Take-Home Task That Works

The majority of take-home tasks fail for one of three reasons. They are too abstract to reveal real skill. They are too long and punish candidates who have jobs and families. Or they are so narrowly defined that every submission looks the same and the only thing you learn is whether someone can follow instructions.

A well-designed take-home task has five characteristics:

1. It is grounded in work that resembles your actual codebase

If your engineers spend their days building REST APIs in Node or building data pipelines in Python, the task should look like that. Not a toy algorithm. Not a puzzle designed to be “language agnostic.” The more closely the task mirrors real work, the better the signal you get about fit.

2. It is completable in two to three hours

This is not negotiable. A longer task creates attrition among your best candidates, who are the ones most likely to be juggling competing offers. It also signals that you do not respect candidate time, which is a poor way to begin a professional relationship. Scope the task tightly. The idea that a longer task reveals more is a myth.

3. It is intentionally open-ended at the edges

The core of the task should be achievable. But there should be room for a candidate to go further: to add a feature they think would be useful, to refactor something that feels inelegant, to write a brief note explaining a decision they made. This open space is where you distinguish a good submission from a great one.

4. You provide a brief specification that includes deliberate ambiguity

Real software requirements are always ambiguous. A specification that leaves some things undefined will reveal how a candidate handles uncertainty. Do they make a reasonable assumption and note it? Do they ask a clarifying question? Do they ignore it entirely and build something that does not account for edge cases? All of those responses tell you something.

5. You debrief on the submission in person or on a call

The take-home is not the end of the process; it is the beginning of a conversation. A short follow-up session in which the candidate walks you through their solution, explains decisions, and works through an extension is the highest-value part of the whole exercise. It also addresses authenticity concerns naturally: if someone submitted code they do not understand, that becomes apparent quickly.

Practical Tip

Pay candidates for their take-home time. Even a token amount signals respect, filters for companies you want to compete with, and is becoming standard practice among the best engineering employers. If you cannot do this, shorten the task until it genuinely requires no more than 90 minutes.


An all-female panel interviews a male candidate for a new job in Glasgow

Running a Technical Interview That Reveals Real Ability

The structured technical interview is a different tool from the take-home. Its job is not to test whether someone can write code under observation. That is a bad test. Its job is to explore understanding, judgment, and the thinking that sits behind code.

There are three types of questions that consistently produce useful signal:

Architecture and systems thinking questions

Present a real scenario: “We need to build a notification service that sends emails and push notifications at scale. Walk me through how you would approach the design.” These questions have no single right answer. You are looking for whether the candidate considers failure modes, trade-offs, and the needs of the users of the system. Strong engineers ask clarifying questions before diving in. They identify constraints. They acknowledge what they are sacrificing in their proposed design.

Debugging and reasoning questions

Share a piece of buggy or poorly-written code and ask them to reason through it. This tests logical thinking, code literacy, and whether they can communicate what they see. It is much closer to what engineers actually do day to day than any whiteboard algorithm.

Behavioural questions with a technical dimension

Ask about a time they made a significant technical decision that turned out to be wrong. How did they recognise the mistake? What did they do about it? What would they do differently? This question is exceptionally revealing. It surfaces intellectual honesty, pragmatism, and maturity in a way that purely technical questions cannot.

Common Mistake

Do not fill the interview with trivia questions designed to test memorisation (“What is the time complexity of a binary search tree insertion?”). These can be looked up in 30 seconds. They reveal nothing about engineering judgment and a lot about how recently someone revised for interviews.


Using Code Review as an Assessment Tool

Code review exercises are one of the most underused tools in technical hiring, and one of the most informative. They are particularly valuable for senior roles, where the ability to give and receive thoughtful feedback on code is as important as the ability to write it.

The setup is straightforward: provide a candidate with a piece of code that has real issues in it (not invented nonsense, but the kind of things that actually appear in production codebases) and ask them to review it as if they were reviewing a colleague’s pull request. Then discuss their feedback with them.

What you learn from this exercise is different from what you learn anywhere else in the process. You learn whether they prioritise the things that actually matter (correctness, security, readability, performance in that order for most applications). You learn whether they give feedback in a way that is constructive and specific or vague and condescending. You learn whether they consider the intent behind the code, not just its current form. And you learn whether they can distinguish between things that must be changed and things that are merely matters of style preference.

A candidate who gives thoughtful, prioritised, kind code review feedback is telling you exactly how they will behave as a colleague. That is the most valuable signal in any hiring process.
– Adria Solutions


Two professionals smiling during a meeting, maintaining calm nerves while communicating confidently.

Red Flags Most Hiring Managers Miss

There are obvious red flags in technical hiring: code that does not run, plagiarism, dishonesty about skills. But the signals that most often predict poor performance are subtler, and they tend to appear not in the work product itself but in how candidates behave around the work product.

  • Defensiveness about their code.ย Strong engineers know their code has weaknesses. If a candidate cannot hear any critical observation without defending every decision, that behaviour will be exhausting in a team setting.
  • No curiosity about your system.ย A candidate who does not ask a single question about your architecture, your codebase, your technical challenges, or what the role will actually involve is telling you something. Good engineers are curious about systems.
  • Oversimplification of complex problems.ย If every answer is confident and immediate, with no acknowledgment of edge cases or complexity, that confidence is often a red flag rather than a green one. Hard problems are hard.
  • No evidence of iteration.ย Code submitted as if it were written in one sitting with no comments, no second thoughts, no refactoring, is a warning sign. Real engineering involves changing your mind. A take-home submission that is too polished can sometimes signal a lack of genuine thinking.
  • An inability to explain their own code.ย This is the single most reliable signal that someone submitted work they did not write. If they cannot walk through a function and explain the reasoning, something is wrong.
  • Dismissiveness about testing.ย Some candidates will note that they “ran out of time” for tests, or that “testing is usually the QA team’s job.” These statements reveal a fundamental misunderstanding of modern software engineering practice.

What to Stop Doing Immediately

Some practices persist in technical hiring because no one has bothered to question them. Here are the ones most worth dropping:

Stop using brain teasers

Questions like “How many piano tuners are in London?” or “How would you move Mount Fuji?” were popularised by a small number of large technology companies in the early 2000s, and the evidence for their usefulness is essentially nonexistent. They test comfort with being put on the spot, not engineering skill.

Stop asking engineers to code on a whiteboard

Whiteboard coding is not a skill that exists outside of interview rooms. No professional engineer writes production code on a whiteboard. It introduces anxiety, removes the tools engineers actually use (documentation, autocomplete, the ability to run code), and actively penalises the kind of iterative, test-driven approach you want to see in a hire. Use a shared editor. Any shared editor.

Stop relying on a single interview to make a decision

One technical interview, however well-designed, is too narrow a sample. People have bad days. They get nervous. The topic happens to be one they know less well than their average. A process that combines a take-home task, a debrief, and a structured technical conversation provides dramatically more signal and also helps to counter individual interviewer bias.

Stop letting technical interviews run without a rubric

If two engineers interview the same candidate and come away with completely different impressions, and neither can articulate exactly what they were evaluating, you have a reliability problem. Agree in advance what you are looking for and what good, adequate, and poor looks like for each dimension. This takes time to build once, but it transforms the quality of your hiring decisions.

Insight from Practice

The teams that consistently hire the best engineers are not the ones with the most demanding technical gauntlets. They are the ones with the most clearly defined picture of what they are looking for, and a process that consistently reveals it.


A Framework You Can Use from Monday

If you want to overhaul your process without turning it into a six-month project, here is a practical starting point that most engineering teams can implement within a week:

  1. Write a clear role scorecard. Before you write a job description, write a one-page document that describes what the person will actually work on, what good looks like in 12 months, and what three to five qualities would make someone genuinely excellent in this role.
  2. Design a take-home task (two to three hours maximum). Based on your actual work. Include a realistic spec with deliberate ambiguity. Send it with a note telling candidates roughly how long it should take and that they should not spend more time than that.
  3. Build a short debrief script. Three to four questions designed to explore the decisions the candidate made in their submission and extend the problem slightly. This does not need to be elaborate.
  4. Add one behavioural question about a technical failure. This question alone surfaces more useful information about a candidate’s judgment and intellectual honesty than most technical tests produce.
  5. Define your scoring rubric before you start. For each dimension you care about (code quality, communication, problem-solving, trade-off awareness), write down what a strong candidate looks like and what a weak one looks like. Agree this across your interview panel before the process begins.
  6. Debrief your panel within 24 hours of each interview. Have everyone score independently before discussing. Then discuss where you disagree and why. This is where the real thinking happens.

This process is not perfect. No process is. But it will produce better signal than a LeetCode screen followed by a panel interview with no rubric, and it will treat candidates with the respect that tends to attract the people you actually want.


FAQs

The most effective approach combines a structured technical interview, a real-world take-home task, and a code review or pair-programming exercise. No single method is sufficient on its own. The goal is to evaluate problem-solving process, code quality, communication, and how a candidate handles ambiguity, not just whether they can produce correct output under pressure. A short take-home task followed by a live debrief typically provides the best return on time invested for both interviewer and candidate.

For most roles, no. LeetCode-style algorithmic puzzles favour candidates who have rehearsed competitive programming, not those who write clean, maintainable production code. They create significant attrition among strong candidates who find them irrelevant and demeaning. The exception is roles where algorithm-heavy work is genuinely central to the job, such as large-scale data infrastructure, search systems, or machine learning engineering where performance at scale is a daily concern.

No more than two to three hours of focused work. Longer tasks unfairly disadvantage candidates who are employed, have caring responsibilities, or are managing multiple processes simultaneously. The task should be scoped tightly enough to complete in that window yet open-ended enough to reveal how a candidate makes design decisions. The widespread belief that a longer task produces better signal is not supported by the experience of teams that have tried both approaches.

The most telling red flags are: no error handling or edge case consideration, inconsistent naming conventions with no apparent rationale, complete absence of any testing or notes about how the code would be tested, overengineering of simple problems, and code that works but cannot be read by another engineer. Equally important is how a candidate responds when you ask about their code. An inability to explain design decisions, or persistent defensiveness when you raise questions, is often more telling than the code itself.

The best signal for developer soft skills comes from two places: structured behavioural questions and direct observation during technical exercises. Ask how they have handled disagreements about technical direction, how they have onboarded other developers, or how they have managed technical debt on a live product. Pair-programming exercises are especially useful because communication style, patience, and the ability to explain reasoning all surface naturally without needing to ask about them directly.

Start by building a shared rubric before any interviews begin, so all interviewers are evaluating the same things. Have panel members score independently before debriefing together, to reduce anchoring bias. Standardise the questions and exercises you use so you are comparing like with like across candidates. Be particularly careful about “culture fit” as an evaluation criterion, as it often functions as a proxy for similarity to the existing team. Focus on “culture add” instead: what does this person bring that the team does not already have?

The technical assessment should happen after an initial screening conversation but before any lengthy interview panel. Asking candidates to invest significant time in a take-home task before you have had any conversation at all creates unnecessary attrition. A 20 to 30 minute introductory call to confirm basic fit and give candidates a chance to ask questions about the role is worth doing first. The take-home, debrief, and panel interview should follow in that order.

Nick Derham

Nick Derham

Director โ€ข C-Suite Executive Recruitment Specialist

Nick Derham is an IT Recruitment Specialist with 25 years of experience, including 20 years as Director of Adria Solutions. He specialises in Executive Search and is widely respected in the UK’s tech recruitment industry. Nick has provided expert commentary for specialist publications such as Tech Round, HubSpot, the UK News Group and UK Recruiter.

Find the right fit for you

We provide friendly, forward-thinking,ย 360ยฐย recruitment solutions. With two decades of experience in the tech sector, we focus on happy hiring.

Get the latest news, talent insights and trends

  • a male recruitment consultant worries if a candidate dropout will reflect poorly on his agency

    Best Practices for Managing Candidate Dropouts in Recruitment

    Candidate dropouts can be frustrating, we know. You might have invested significant time and effort into securing a top candidate, exchanged calls and emails, and are optimistic they’re a perfect…
  • Group of professionals in suits discussing documents around a large table in a formal office setting.

    Permanent vs. Contract Hires: Whatโ€™s Right for Your Business?

    Hiring decisions are some of the most important youโ€™ll make as a business leader. Beyond finding the right person, you also need to decide whether to bring someone on as…
  • A female recruitment consultant with curly hair and bright clothes is feeling happy and resilient

    How to Deal with Frustration in Recruitment

    Recruitment can be a rollercoaster for everyone involved, from hiring managers and recruiters to candidates. Recruitment is a process that can be both rewarding and, at times, incredibly frustrating for…

Send us an enquiry

About you

What are you?(Required)