
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:
- 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?
- 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?
- 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?
- 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?
- 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:
| Method | Best For | Limitations | Signal Quality |
|---|---|---|---|
| Live pair programming | Mid-to-senior roles; assessing collaboration and communication in real time | Time-intensive; some candidates underperform due to anxiety | High |
| Take-home project (scoped) | Roles where code quality and architecture matter; junior to senior | Candidate time cost; cannot verify authenticity with certainty | High |
| Code review exercise | Any level; especially senior where code judgment is critical | Requires well-crafted review material; less about production ability | High |
| Technical Q&A interview | Assessing domain knowledge and depth of understanding | Rewards memorisation; easy to coach for; poor predictor alone | Medium |
| 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 roles | Low for most roles |
| Portfolio review | Experienced engineers with open-source or public work | Not all strong engineers have public work; biases toward those with time for side projects | Medium |
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.

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

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:
- 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.
- 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.
- 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.
- 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.
- 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.
- 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

Nick Derham
Director โข C-Suite Executive Recruitment Specialist
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.





