Representative practice prompts
Five Datadog frontend interview practice questions
For each prompt, clarify the contract, explain ownership and trade-offs, implement or diagram the smallest credible slice, and test the failure cases. Each prompt links to the public report it is modelled on and to a practice page.
Prompt 1
Build a table of real-time data that sorts by any column
Render rows that keep arriving and changing, let the user sort by any column, and keep the sort, the selection and the scroll position stable while updates land.
Practice version modelled on a reported round: Public report: Datadog senior frontend developer loop, Valbonne, October 2024
What this measures
Derived state from a single source, stable and deterministic sorting, immutable row updates, rendering cost under frequent changes, and accessible column controls.
Clarify first
- Confirm the update rate and whether updates replace rows, append rows or both.
- Confirm whether sorting must be stable across equal values and whether a sort should pause when the user is interacting.
Strong answer should cover
- Keep raw rows in one store and derive the sorted view with a memoised comparator per column instead of sorting in place.
- Give every row a stable identity so updates replace a row without resetting selection or focus.
- Batch incoming updates per animation frame and avoid re-rendering rows that did not change.
- Expose sort controls as buttons with the current direction announced, and keep keyboard access to every column.
Common miss: Sorting the array in place or on every update, so the table flickers, the selection jumps and equal values swap places.
Practice the dynamic table (Premium) Prompt 2
Design the frontend architecture of a Live Tail log view
Design the client for a view that shows logs as they arrive, lets the user filter the stream, pause and resume it, and inspect one line without losing their place.
Practice version modelled on a reported round: Public report: Datadog senior frontend developer loop, Valbonne, October 2024
What this measures
Streaming transport choice, bounded memory and DOM, filter semantics on a moving window, pause and resume rules, and how to keep counts and timestamps truthful.
Clarify first
- Confirm the arrival rate, whether filters apply on the server or the client, and how much history must stay scrollable.
- Confirm what pause means: stop rendering, stop receiving, or buffer and show a count of new lines.
Strong answer should cover
- Choose the transport for the rate and the reconnect story, and give every line a monotonic sequence so gaps and duplicates are visible.
- Keep a bounded buffer and render a window of it; drop or compact old lines with an explicit rule the user can see.
- Apply filters to the buffer, not to the DOM, and show how many lines were hidden.
- Pause on interaction, buffer new lines with a count, and resume without duplicating or reordering.
Common miss: Appending every line to the DOM and filtering by hiding elements, so memory grows without bound and the view stalls under load.
Work through the infinite scroll list case Prompt 3
Solve an ordering-and-filtering exercise under time
A standard coding exercise on ordering and filtering a dataset, in the style of a medium algorithm problem, with follow-ups such as counting repeated words in a paragraph or matching a pattern without regular expressions.
Practice version modelled on a reported round: Public report: Datadog senior frontend developer loop, Lisbon, November 2025
What this measures
Clean algorithmic fundamentals, correct comparators and predicates, edge cases around empty input and ties, and the ability to state complexity while coding.
Clarify first
- Confirm the ordering rules for ties, case and locale, and whether the input may be mutated.
- Confirm the expected output shape and the size of the input before choosing an approach.
Strong answer should cover
- Write the comparator or predicate as a named function with the tie rule spelled out.
- Use a frequency map for counting problems and say why it is linear.
- Handle empty input, a single element and duplicates before polishing.
- State the time and space complexity and the one optimisation you would add with more time.
Common miss: Using the default sort on numbers or forgetting that the default comparator sorts by string value.
Implement Array.prototype.filter (Premium) Prompt 4
Survive incremental live coding on data and tables
The exercise starts small, then adds requirements step by step for an hour: show rows, then filter them, then group or update them, then handle a new data shape. Keep working code at every step.
Practice version modelled on a reported round: Public report: Datadog senior frontend engineer loop, Paris, September 2025
What this measures
Pace under a clock, keeping state derivable from one source as requirements grow, immutable updates, and knowing which optimisations to mention rather than build.
Clarify first
- Ask for the next step as soon as the current one works, and confirm the data shape before coding each step.
- Ask whether a quick inline solution is acceptable before extracting components or stores.
Strong answer should cover
- Finish each step with working code before refactoring, and keep the earlier steps green.
- Keep rows in one array and derive filtered, grouped and sorted views from it, so each new step is a function of the same source.
- Update rows immutably by index or identity so later steps that compare or memoise still work.
- Mention virtualisation and context providers as follow-ups and keep the hour for behaviour.
Common miss: Spending the first fifteen minutes on folder structure and questions, then running out of time on the third step.
Practice immutable row updates Prompt 5
Explain how you would build a feature or fix a major bug
Without an editor, describe how you would approach developing a feature or fixing a major bug in a data-heavy product: where you would start, what you would measure, how you would ship it safely and how you would know it worked.
Practice version modelled on a reported round: Public report: Datadog senior frontend developer loop, Lisbon, November 2025
What this measures
Product and engineering judgment, debugging method, risk management in production, and how you communicate a plan with explicit unknowns.
Clarify first
- Ask what is already known about the bug or feature: reproduction steps, affected users, metrics, deadlines.
- Ask which constraints matter most: correctness, latency, rollout safety or team capacity.
Strong answer should cover
- Reproduce or specify first; name the metric or test that proves the problem or the feature.
- Isolate the cause with evidence rather than guesses, and keep a list of what you ruled out.
- Ship behind a flag or a canary, with a rollback path and monitoring for the exact regression.
- Close the loop with a check on the metric and a note on what would prevent the next occurrence.
Common miss: Jumping to a fix without a reproduction or a success signal, so the interviewer cannot see how you would know you were done.
Read the search typing lag incident