Sample interview
Senior Frontend Engineer
7 questions · 60 minutes
React and TypeScript product engineering, with performance, accessibility and testing.
Illustrative: the job post, candidate and results are examples.
Why this interview
Requirements
The job requires
- React and TypeScript
- Frontend performance
- Accessibility
- Testing
Claims
The résumé claims
- React and Next.js, 5 years
- Built a design system
- Jest and Testing Library
Focus
So the interview tests
- Async UI and state
- Browser fundamentals
- Component design
- Accessibility
The plan we propose
Every question comes with the reason it was chosen. The interviewer can swap any of them before sending.
- 1
Search results for a query you already deleted
Multiple choice · Advanced · ~4 min
Why this question: The job is React-heavy and the résumé claims five years of it. Request races in effects are where that experience shows.
Try it below - 2
A settings toggle that does not re-render
Multiple choice · Advanced · ~4 min
Why this question: Checks the state-update mental model behind most "the UI did not update" bugs.
- 3
A product filter that freezes the page while typing
Multiple choice · Advanced · ~4 min
Why this question: The job requires frontend performance. Tests reasoning about the main thread instead of reaching for tools.
- 4
A modal that shows up behind the header
Multiple choice · Advanced · ~4 min
Why this question: Design system work means owning layout and layering. A common CSS bug that needs a real model, not trial and error.
Try it below - 5
An accessibility audit flags the checkout button
Select all · Intermediate · ~3 min
Why this question: The job requires accessibility. Semantic HTML is the most frequent audit finding.
- 6
A save test that fails one run in ten
Multiple choice · Intermediate · ~3 min
Why this question: The résumé claims Testing Library. Waiting correctly for async UI separates real use from familiarity.
- 7
A shared Button with twelve boolean props
Multiple choice · Senior · ~5 min
Why this question: A design system claim deserves a component API design question.
Try two of the questions
Answer as the candidate would. The interviewer guide beside each question is what the interviewer sees.
Search results for a query you already deleted
Candidate view
Exactly what the candidate sees. Try answering it.
Users type quickly into the search box, which updates query on every keystroke. Sometimes, after they finish typing "react hooks", the list shows results for "react h". The server returns correct results for every request.
What causes this, and what is the right fix?
1function SearchResults({ query }: { query: string }) {2 const [results, setResults] = useState<Result[]>([]);34 useEffect(() => {5 fetch(`/api/search?q=${encodeURIComponent(query)}`)6 .then(res => res.json())7 .then(setResults);8 }, [query]);910 return <ResultList items={results} />;11}
Choose an answer to check it.
A modal that shows up behind the header
Candidate view
Exactly what the candidate sees. Try answering it.
The checkout modal covers the page content but sits behind the sticky header, even with z-index: 9999. Raising it to 99999 changes nothing.
Why, and what is the most robust fix?
1.site-header {2 position: sticky;3 top: 0;4 z-index: 10;5}67main {8 position: relative;9 z-index: 1;10}1112/* The modal is rendered inside <main>. */13.modal {14 position: fixed;15 inset: 0;16 z-index: 9999;17}
Choose an answer to check it.
See what the interview actually established
Built only from the interviewer's judgment on each question. The job and résumé decide what gets tested; they never count as evidence.
What the interview established
Strongest evidence was in React & UI state and Testing & quality. Browser & web platform showed mixed evidence. Accessibility had the weakest evidence among required areas.
4 of 4 required areas evaluated · 7 questions judged by the interviewer
Required competencies
From the job. Open a row for the questions and notes behind it.
AccessibilityWeak evidence from a single questionWeak
An accessibility audit flags the checkout button
WeakInterviewer
Believed role="button" makes a div keyboard accessible. Worth a follow-up on semantics.
Browser & web platformMixed
A product filter that freezes the page while typing
MixedInterviewer
Reached for debouncing first; needed a prompt to see that rendering 50,000 rows was the real cost.
A save test that fails one run in ten
StrongInterviewer
Used findBy and explained why a fixed sleep stays flaky.
React & UI stateStrong
Search results for a query you already deleted
StrongInterviewer
Spotted the out-of-order responses straight away and wrote effect cleanup with AbortController.
A settings toggle that does not re-render
StrongInterviewer
Explained why memo skipped the render and why undo history changed too.
A shared Button with twelve boolean props
StrongInterviewer
Proposed variant props and composition, with a migration plan for existing call sites.
Testing & qualityStrong
A save test that fails one run in ten
StrongInterviewer
Used findBy and explained why a fixed sleep stays flaky.
Also observed
Not required for this role, but the questions produced evidence.
Caching & performanceMixed
A product filter that freezes the page while typing
MixedInterviewer
Reached for debouncing first; needed a prompt to see that rendering 50,000 rows was the real cost.
Concurrency & runtimeStrong
Search results for a query you already deleted
StrongInterviewer
Spotted the out-of-order responses straight away and wrote effect cleanup with AbortController.
CSS & layoutStrong
A modal that shows up behind the header
StrongInterviewer
Found the stacking context on main and suggested a portal.
System designStrong
A shared Button with twelve boolean props
StrongInterviewer
Proposed variant props and composition, with a migration plan for existing call sites.
How they worked
The kind of work the questions asked for, across competencies.
Build interviews like this for your roles.
Post a job, and we propose an interview for every applicant from the job and their résumé.