NTIOT's Engineering Hiring Bar and Interview Process, Explained
Why we structured our interview process around judgment rather than syntax trivia, and what each stage is actually designed to filter for.
We get asked, fairly often, why NTIOT's interview process takes longer than a lot of comparable outsourcing firms, and why we're willing to lose candidates to competitors who move faster. The honest answer is that clients are trusting us with production systems and, in some engagements, regulated data — and a fast process optimized for filling seats quickly is a different process than one optimized for the judgment that kind of work requires. We built ours around the second goal, and we've kept it even when it's cost us candidates and internal patience.
We stopped testing syntax knowledge years ago
Early on, our technical screens looked like most companies' — algorithm questions, language trivia, whiteboard coding under time pressure. We dropped most of that after noticing it correlated poorly with on-the-job performance. Someone who can recite the time complexity of five sorting algorithms from memory isn't necessarily someone who will make good architectural trade-offs on a live client system with incomplete requirements and a deadline.
What we test for instead:
- Reasoning under ambiguity. We give candidates a deliberately underspecified problem and watch what questions they ask before writing any code. Candidates who start coding immediately, without clarifying the ambiguous parts, tend to struggle on real engagements where requirements are genuinely incomplete at the start.
- Trade-off articulation, not "correct" answers. For system design rounds, there often isn't one right answer — we're listening for whether a candidate can name the trade-off they're accepting and why, not whether they land on the same design our interviewer would have picked.
- How they handle being wrong. We deliberately push back on a candidate's design mid-interview, even when their original answer was reasonable, specifically to see whether they can update their position with new information or whether they dig in defensively. Client engagements involve being told "this won't work for our compliance requirements" regularly, and how someone responds to that in an interview is a real signal.
The process has four stages, each testing something different
- A take-home exercise, time-boxed to roughly three hours, based on a realistic (never a live client's) problem in the candidate's stated area of strength. We're explicit that we're evaluating code they'd actually be comfortable shipping, not a clever one-off solution — readability and test coverage count as much as the core logic working.
- A live code review session, where the candidate reviews a PR we've prepared containing a mix of reasonable code and a few deliberately planted issues — a race condition, an unhandled edge case, a security gap. This has turned out to be one of our highest-signal stages, because reviewing code well is a distinct skill from writing it, and it's exactly the skill a dedicated team member needs when working semi-independently on a client's codebase.
- A system design conversation scaled to the role — for a senior candidate, this might be designing a multi-region data pipeline; for an earlier-career candidate, something more contained, like designing a rate limiter. The scaling matters: we're not testing everyone against the same bar, we're testing whether their design thinking matches what the role actually requires.
- A values and working-style conversation, not a formality — we specifically probe how a candidate has handled disagreement with a manager or client, and how they've handled being on a team that missed a deadline. Technical strength that comes with poor collaboration habits doesn't hold up on multi-month client engagements where trust is the actual product being delivered.
What we deliberately don't do
We don't do surprise pop quizzes on obscure language features, and we don't do adversarial "gotcha" questions designed to make a candidate feel bad under pressure. Neither predicts real performance, and both select for people who are good at interviews specifically rather than good at the job.
Why we're willing to lose candidates over this
The process takes 2-3 weeks end to end, longer than some competitors' single-day process. We've had strong candidates take faster offers elsewhere because of it. That's an accepted cost, not an oversight — the alternative is hiring faster and finding the judgment gaps six months into a client engagement, which is far more expensive for everyone, including the candidate who ends up in a role that doesn't fit.
What the bar actually protects
Clients evaluating NTIOT as an outsourcing partner are, in effect, trusting our hiring bar as a proxy for the work quality they'll get, since they can't personally interview every engineer on a dedicated team. Keeping that bar consistent — the same four stages, the same emphasis on judgment over trivia, regardless of how urgently a role needs filling — is what makes "NTIOT engineer" mean something specific and dependable across a growing team, rather than a label that varies wildly depending on who happened to be hiring that quarter.
If you're curious what this looks like from the candidate side rather than the client side, our open engineering roles and the take-home exercises tied to them are listed on our careers page, along with a more detailed breakdown of what each stage evaluates.
Yen Pham
Head of Talent & People