Interview questions for a mid-level frontend engineer.
Mid-level frontend engineers should know React's primitives cold and be starting to care about accessibility and performance. Ten questions to check both.
The questions.
-
01technical baseline · react
When does useEffect run, and when do you pass a dependency array?
Strong answerAfter render, after every render by default, deps limit when. Knows [] = mount-only, no deps = every render. Cleanup function explained.Weak answerConfuses useEffect with useState. Or 'always pass empty array.' -
02technical baseline · css
When would you use CSS Grid vs Flexbox?
Strong answerGrid for 2D layouts, Flexbox for 1D. Knows they compose. Not dogmatic.Weak answer'I just use whichever I'm used to.' No sense of when each is right. -
03technical medium · forms
Design a form validation UX. What do you get wrong if you validate on blur vs on submit vs as-you-type?
Strong answerKnows the UX research: as-you-type is annoying before user finishes, submit is late. Hybrid: validate on blur AFTER first submit attempt. Accessibility: announce errors properly.Weak answer'We'll validate on submit.' Or validates every keystroke without understanding why that's bad. -
04experience baseline · resume-probe
You shipped a redesign of X. What was measurably better after — and how did you measure it?
Strong answerSpecific metric (conversion, bounce, time-on-page). Honest about what got worse. Follow-up iterations based on data.Weak answer'Users liked it more.' No metric. No follow-up. -
05technical medium · performance
Your page's Largest Contentful Paint is 4.2s. Users are complaining. Where do you start?
Strong answerMeasures before guessing — Lighthouse, RUM data. Investigates render-blocking resources, image sizes, critical CSS, TTFB. Considers SSR/prerender if relevant.Weak answerAdds lazy-loading everywhere without measuring. Or 'we'll upgrade the CDN.' -
06technical baseline · css
What's the box model?
Strong answercontent / padding / border / margin. Understands box-sizing: border-box and why most people use it.Weak answerCan't explain why 'width: 100%' sometimes overflows. -
07technical medium · build-tools
What actually happens when you run `npm run build` on a React app?
Strong answerBundler walks the dep graph from entry. Tree-shakes. Minifies. Code-splits. Outputs hashed assets. Generates manifest. Knows webpack/vite/esbuild by more than name.Weak answer'It makes the code smaller.' Doesn't understand the pipeline. -
08situational baseline · handoff
Designer hands you a Figma file with inconsistent spacing. What do you do?
Strong answerAsks the designer before reinterpreting. Proposes a consistent spacing scale. Not silent acquiescence, not rejection.Weak answerImplements whatever pixel values are there without questioning. -
09communication medium · explaining
Explain hydration mismatches to a backend engineer who writes mostly Python.
Strong answerConcrete example. No React-specific jargon that doesn't translate. Uses an analogy the listener gets.Weak answerTalks about virtual DOM reconciliation and loses the listener. -
10technical hard · accessibility
Audit this button: `<div class='btn' onclick='submit()'>Save</div>`. What's wrong, in priority order?
Strong answerNot keyboard-reachable. Not semantic (screen readers skip it). No focus ring. onclick-only breaks JS-disabled edge cases. Mentions ARIA only as last resort, not first.Weak answerOnly mentions ARIA. Doesn't notice keyboard/focus issues.
Lucida runs round one for you, and books the shortlist on your calendar.
Adaptive interviews tuned to the role, rubric-backed scoring, and a founder-ready briefing for every candidate who clears the bar. You do the human call.