Assessments and technical interviews for AI roles
The selection procedure for technical AI roles differs fundamentally from traditional software engineering tracks. Where classic development tracks often lean on general data structures and LeetCode puzzles, AI and machine learning roles call for a combination of mathematical insight, statistical data processing, infrastructure knowledge, and hands-on experience with non-deterministic models. This article is aimed primarily at candidates, career changers, and engineers preparing for applications within the Dutch AI field.
To understand how these interviews are structured, it is wise to first analyze which skills employers are actually looking for. Anyone who wants insight into the broader dynamics of the Dutch labor market and demand for specific profiles can explore the AI labor market in the Netherlands to see which sectors attract the most technical capacity. In practice, the weight and angle of technical selections turn out to correlate strongly with the maturity of the organization.
The structure of a modern AI selection process
A representative selection procedure for an AI Engineer or Machine Learning Engineer usually consists of four consecutive phases. Each phase tests a different layer of professional competence, with the candidate funnel narrowing at every step:
| Phase | Type of interview / test | Primary focus | Time frame |
|---|---|---|---|
| 1. Screening | Technical recruiter / lead | Realism of the CV, motivation, communication | 30–45 minutes |
| 2. Practical test | Take-home or live coding | Data manipulation, API integration, code quality | 2–4 hours (or 60 min live) |
| 3. Deep-dive interview | AI system design & architecture | Scalability, latency, evaluation metrics | 60–90 minutes |
| 4. Culture & values | Team members and management | Collaboration, dealing with uncertainty, ethics | 45–60 minutes |
During the first screening, recruiters assess whether the experience on paper matches actual knowledge. Many candidates flaunt certificates without deep project experience. Anyone who wants to know how the market views formal diplomas versus practical projects can consult the overview of AI certifications to judge which credentials really add value during a selection.
The shift in phases two and three is striking: where interviewers used to ask candidates to implement backpropagation or neural networks manually from scratch, today it is about robust integration of existing foundation models, processing unstructured data, and safeguarding reliability in production environments.
Live coding: from algorithms to data streams
Live coding interviews in the AI domain rarely focus purely on abstract mathematical proofs. Employers want to see how candidate developers handle realistic data processing, vector calculations, and calling model endpoints under time pressure. A common pitfall is that candidates start typing too soon without first exploring edge cases in the input data.
Below is a typical example of an assignment that may come up in a live 45-minute session: implementing a robust chunking and embedding pipeline with error handling, token limiting, and exponential backoff.
import time
from typing import List, Dict, Any
def batch_text_chunks(text: str, chunk_size: int = 500, overlap: int = 50) -> List[str]:
"""Breekt een lange tekst op in overlappende segmenten."""
if not text or chunk_size <= 0:
return []
chunks = []
start = 0
text_length = len(text)
while start < text_length:
end = min(start + chunk_size, text_length)
chunks.append(text[start:end])
if end == text_length:
break
start += (chunk_size - overlap)
return chunks
def mock_embedding_client(batch: List[str]) -> List[List[float]]:
"""Simuleert een API-call naar een vector-endpoint."""
# In een live assessment toetst men hier foutafhandeling en retries
if not batch:
return []
return [[0.015, -0.032, 0.881] for _ in batch]
def process_corpus(documents: List[str], max_retries: int = 3) -> Dict[str, Any]:
processed_records = []
for doc_id, doc in enumerate(documents):
chunks = batch_text_chunks(doc)
retries = 0
while retries < max_retries:
try:
embeddings = mock_embedding_client(chunks)
for chunk, emb in zip(chunks, embeddings):
processed_records.append({
"doc_id": doc_id,
"text": chunk,
"vector": emb
})
break
except Exception as err:
retries += 1
time.sleep(2 ** retries)
if retries == max_retries:
raise RuntimeError(f"API-fout na {max_retries} pogingen: {err}")
return {"total_chunks": len(processed_records), "records": processed_records}
In sessions like these the interviewer watches not only for a working script but above all for structure: are functions neatly given type hints, are exceptions caught, and can the candidate explain why exponential backoff is necessary with external API dependencies? Handling empty lists, invalid characters, and token limits also weighs heavily.
The take-home assignment: pitfalls, scoring, and best practices
The take-home assignment is a favored instrument at mid-sized tech companies and consultancy firms. The candidate gets, say, 48 to 72 hours to build a mini RAG system (Retrieval-Augmented Generation), a classification model, or a data extraction tool. Although this produces less acute stress than being watched live, the format has clear drawbacks and risks.
One persistent problem is time spent. Companies often state that the assignment should take at most three hours, then judge the result against a yardstick with fifteen hours of work behind it. To protect yourself while still demonstrating craftsmanship, it is crucial to keep a tight scope and document missing parts explicitly in a README.md.
Anyone who wants to prepare thoroughly for the methodical aspects of this type of assignment would do well to work through the guide to preparing for a technical assessment for a detailed breakdown of submission formats and checklist criteria.
Take-home reviewers usually look at four fixed pillars in the repository:
- Reproducibility: Can the code run without configuration errors through a
Dockerfileor a clearrequirements.txtwith pinned package versions? - Architectural choices: Is there a clear separation between data ingestion, search logic, and presentation?
- Error handling and logging: Does the project contain structured logs and does it handle dropped network connections gracefully?
- Documentation: Does the
README.mdexplain the trade-offs made, known limitations, and hypothetical next steps given more time?
AI system design: architecture, latency, and trade-offs
For senior roles the system design interview is decisive. Here the candidate is given an open-ended problem, such as: "Design a semantic search engine for five million legal documents that delivers results within 250 milliseconds under strict GDPR conditions."
Interviewers test four core aspects here:
- Data infrastructure: How do document ingestion, parsing, and synchronization on updates work?
- Vector search vs. hybrid search: Is dense vector indexing used exclusively (HNSW, IVF-PQ), or does the design combine it with traditional BM25 search algorithms to find technical terms accurately?
- Cost and latency: Which caching strategies (semantic caching) are applied to limit expensive model calls?
- Evaluation and monitoring: How does the system detect hallucinations, drift in search results, or stale context?
The schema below shows what a realistic reference architecture looks like during a system design interview for enterprise search systems:
[Gebruiker / Client]
│
▼
[API Gateway & Rate Limiter]
│
├──────────────────────────────┐
▼ ▼
[Semantische Cache (Redis)] [Query Rewriter / HyDE]
(Cache hit: <10ms) │
▼
[Hybride Zoeklaag (BM25 + Vector)]
│
▼
[Cross-Encoder Re-ranker]
│
▼
[LLM Synthese & Guardrails]
│
▼
[Antwoord + Bronverwijzing]
The ability to weigh alternatives — for instance why a cross-encoder re-ranker raises latency by 80ms but improves relevance (NDCG@10) by 18% — is what sets an experienced architect apart from a junior developer.
Cost calculations and token economics in interviews
A crucial part of modern AI interviews that is often overlooked is financial insight into model operations. A strong AI engineer can produce a realistic estimate of the operational costs (OPEX) of a proposed architecture at speed.
Suppose a company wants to implement a customer service bot for 100,000 interactions per day. Each interaction consists on average of 1,500 input tokens (system prompt, conversation history, and RAG context) and generates 300 output tokens. A candidate has to be able to calculate the monthly costs for various model classes straight away:
| Model class | Indicative US dollar list prices per model class per 1M tokens (in / out; rates vary by provider) | Cost per interaction | Monthly cost (3M interactions) |
|---|---|---|---|
| Frontier LLM (e.g. GPT-4o, Claude Sonnet) | $ 2,50 / $ 10,00 | $ 0,00675 | $ 20.250 |
| Lightweight LLM (e.g. GPT-4o-mini, Flash) | $ 0,15 / $ 0,60 | $ 0,000405 | $ 1.215 |
| Self-hosted open source (e.g. Llama-3-8B on GPU) | Fixed GPU infrastructure (2x A10G) | Variable, based on load | $ 1,400 (fixed hosting) |
By demonstrating during an assessment how caching, query classification (simple questions to a small model, complex ones to a frontier model), and local embeddings cut costs by more than 80%, a candidate shows they can think along on business-critical terms.
Practical cases: dealing with non-deterministic models
A classic software interview tests deterministic logic: input X always yields output Y. In AI systems that is fundamentally different. LLMs and probabilistic models show inherent variance, temperature sensitivity, and vulnerabilities such as prompt injections.
During technical conversations, interviewers increasingly present real-world problems involving failure modes. Think of questions about what should happen when an upstream model suddenly breaks structured JSON output, or how to deal with token rate limits during unexpected traffic peaks. Anyone who wants to know exactly how interviewers phrase these questions and what strong answer structures look like can study frequently asked interview questions for AI roles in preparation for in-depth technical conversations.
Candidates who proactively mention during the interview how they set up evaluation frameworks (such as RAGAS or automated LLM-as-a-Judge evaluations) make a strong impression immediately. It shows that model development does not stop at a working prototype but only begins with systematic quality assurance.
Measurement methods and evaluation frameworks: RAGAS, NDCG, and LLM-as-a-Judge
When interviewers ask how the performance of an AI application is measured, many candidates fall short by talking only about "manual testing" or "seeing whether it looks right". In professional environments, being able to implement automated and quantitative metrics is expected.
The three most important measurement methods that come up in assessments are:
- RAG-specific metrics (RAGAS framework):
- Faithfulness: To what extent is the generated answer directly traceable to the retrieved context (measuring hallucinations).
- Answer relevance: Does the answer actually address the initial user question, without irrelevant digressions?
- Context precision & recall: Does the retrieved context contain all the information needed to answer the question, and is the most relevant passage at the top?
- Information retrieval (IR metrics): Calculating Mean Reciprocal Rank (MRR) and Normalized Discounted Cumulative Gain (NDCG@k) to validate the ranking of embeddings and vector databases.
- LLM-as-a-Judge: Deploying a stronger model to run pairwise comparisons on production results, including techniques to mitigate positional bias and verbosity bias.
Organizational context and team dynamics in the Netherlands
Not every company tests at the same level. Within Dutch business we see roughly three categories of employer, each with its own assessment style:
| Type of organization | Assessment angle | Main evaluation criterion |
|---|---|---|
| AI scale-ups / product companies | Live coding & architecture | Deep Python/C++ skills, scalability, latency |
| Large corporates / banks | System design, governance & security | GDPR compliance, robustness, auditability |
| Consultancy & service providers | Case study & client presentation | Translating a business problem into an AI solution |
Implementing AI capacity also demands a broader cultural shift from organizations than simply hiring technical staff. Organizations struggling to integrate new technical talent into existing structures will find depth in the analysis of AI adoption within teams, which centers on the balance between technical firepower and organizational anchoring.
Evaluation criteria: what recruiters and leads watch for
When a review committee convenes after an assessment, lead engineers usually apply a fixed scoring matrix. Knowing these criteria helps you place the right emphases during the conversation:
- Problem analysis and decomposition: Does the candidate ask about constraints before writing code? Are assumptions named explicitly?
- Code hygiene and modularity: Is the code readable, tested, and maintainable, or is it a chain of nested loops without clear separation of functions?
- Statistical and mathematical foundation: Does the candidate understand what happens under the hood with embedding spaces, loss functions, and matrix multiplications?
- Pragmatism vs. over-engineering: Does the candidate opt for a simple open-source model or a rule-based fallback when a complex neural network is superfluous?
Weak spots surface quickly when a candidate leans exclusively on abstract libraries (such as LangChain) without understanding which HTTP calls, prompts, and vector operations actually take place underneath. The ability to work bare-metal with APIs and numpy arrays shows real foundation.
A practical preparation strategy for candidates
Targeted preparation for technical assessments calls for a structured approach over a period of two to four weeks. The most effective strategy consists of working through three consecutive steps:
Step 1: refresh the fundamentals (week 1). Focus on core concepts: vector similarity metrics (cosine distance, dot product), tokenization algorithms (BPE), quantization techniques (GGUF, AWQ), and basic data processing with Pandas and NumPy.
Step 2: build working prototypes (weeks 2–3). Build small working components independently without heavy frameworks: write your own chunking mechanism, implement a simple vector retriever with a SQLite or ChromaDB backend, and build a robust evaluation loop that measures precision and recall on a small test set.
Step 3: mock interviews and architecture sessions (week 4). Practice reasoning out loud while drawing system diagrams. Discuss trade-offs between latency, throughput, and model size. Formulating your thinking steps out loud teaches you to communicate comfortably during live assessments.
Through this systematic preparation, a technical interview turns from an intimidating exam into a substantive dialogue centered on craftsmanship, realism, and problem-solving ability.


