Frontend Engineer
Structured interview questions for Frontend Engineer, with what a strong answer surfaces for each one.
BehavioralTechnical decision-making Describe the hardest frontend decision in your last role (framework migration, state-management choice, performance refactor). Why was it hard and how did you make it?
What a strong answer surfacesAbility to structure a decision under uncertainty: identifying the conditions (browser support, team skill, existing codebase), explicit trade-offs, consulting the affected people (design, backend, PM), validating afterwards with data (bundle size, Lighthouse, error rate). Bonus: the candidate mentions changing their mind along the way or documenting the decision. Anyone who describes an obvious decision in hindsight rarely weighed it seriously.
BehavioralDebugging and investigation Tell me about a UI bug or performance regression in production that you fixed. What was the symptom, how did you diagnose it and how long did it take?
What a strong answer surfacesA structured debugging method: reproduction in the browser (DevTools, Performance tab, Network tab), identifying the affected devices or browsers, hypotheses validated by experiment. Honesty about duration (a real production frontend bug is rarely done in under 30 minutes, especially with browser incompatibilities). Bonus: the candidate names the root cause and the systemic fix, not just the hotfix. Answers like I built a CSS workaround with no diagnosis point to weak investigative ability.
BehavioralLearning ability and humility Describe a moment when you had to refactor or rewrite a component you had built yourself just a few months earlier. What had happened in the meantime?
What a strong answer surfacesTechnical humility and an ability to learn. Bonus: the candidate names what they would do differently from the start today (e.g. composition over inheritance, hooks extraction, clearer props contracts). Anyone who never really had to refactor their own components either shipped nothing into real production or never evolved the product over time.
SituationalTechnical courage In a code review you spot an accessibility gap (missing ARIA labels, unreachable focus, no keyboard operability) in a senior colleague's PR. How do you react?
What a strong answer surfacesAbility to flag a technical weakness without blocking: a factual comment in the PR (here is the risk for keyboard or screen-reader users, here is my suggested fix), an offer to help solve it, escalation to the tech lead if the PR is merged despite the comment. Anyone who lets it slide because the profile is senior, or who treats accessibility as a nice-to-have, shows a lack of technical courage and gaps in frontend understanding.
SituationalCommunication with product A Product Manager asks for a frontend feature (a complex filter with 10 dimensions) that you estimate at 3 weeks. The PM wants it in one week. How do you react?
What a strong answer surfacesClarifying the need before negotiating the timeline (perhaps the critical filter dimensions can ship in one week, the rest in V2). Offering options: an MVP in one week plus V2 in two weeks, an explicit scope cut, a workable UI variant with fewer edge cases. Answers like I can do it in a week if I work the weekend are a warning flag (a signal of poor self-management).
SituationalPragmatism and prioritization You join a frontend with significant technical debt: no TypeScript types, 800-line components, no design system, no clear test setup. What does your 60-day plan look like?
What a strong answer surfacesDiagnosis first: no attempt to fix everything at once. Prioritization by risk and impact (typically: first enforce TypeScript in new components and type the critical existing ones, then consolidate the 8-12 most-used components, then a lightweight test setup for the critical flows). Alignment with the team and tech lead before each move. Anyone who dives straight into a full rewrite or immediately declares a Material UI design system shows a lack of pragmatism.
CaseSystem design Design: we want to add a reusable table with sorting, filtering, pagination and configurable columns to our application. How do you design the component?
What a strong answer surfacesClarification before proposing (expected row count, data source, server vs. client sorting, accessibility requirements, how many places it is reused). A coherent architecture: composition vs. configuration props, a clear slot or render-prop API, virtualization above which row count, keyboard navigation, ARIA roles for tables. Bonus: acknowledging the zones of uncertainty (I'd build a POC with React Aria or TanStack Table before deciding what to build ourselves). Anyone who jumps straight into code without clarifying shows a design weakness.
CaseDebugging and investigation Debug: on mobile in Safari on iOS the app becomes sluggish after 30 seconds of use. In Chrome on desktop nothing is noticeable. How do you proceed?
What a strong answer surfacesA structured method: (1) reproduce on a real device or via BrowserStack, not just the desktop DevTools emulator, (2) profile with Safari Web Inspector over USB debugging, (3) order the hypotheses (a memory leak in a listener binding, excessive re-renders, heavy animations, layout thrashing, large images with no lazy loading), (4) compare metrics (CPU, memory, long tasks, FPS). Anyone who jumps straight to it's probably Safari without investigating has a bias and underestimates iOS-specific quirks (e.g. WebKit memory management).
CaseOptimization Performance: one page of your application scores 35 on Lighthouse Mobile with a 6-second LCP. You have two weeks to get the score above 80 and LCP under 2.5 seconds. Action plan?
What a strong answer surfacesMeasure before optimizing: Lighthouse, WebPageTest, Chrome DevTools Performance tab, RUM data if available. Identify the bottleneck (render-blocking JS or CSS, large unoptimized images, no code splitting, heavy third-party scripts, unused JavaScript, missing caching headers). Prioritize by effort times impact: typically image optimization and code splitting first, then limiting third-party scripts, then server response time. Answers like I add server-side rendering with no diagnosis point to premature optimization. Bonus: recognizing that LCP problems usually sit with images, web fonts or a late hydration step.
TechnicalCode quality What is your frontend test strategy? Describe your last project: how many tests, which types (unit, component, integration, E2E), what coverage, and what did you really measure?
What a strong answer surfacesUnderstanding of the frontend test pyramid (many unit tests on hooks and utilities, component tests with Testing Library on behavior rather than implementation, few E2E in Playwright or Cypress on the critical flows). Distinguishing coverage from value (90 % coverage on presentational components weighs less than 60 % on a checkout flow). Bonus: the candidate cites a case where a test prevented a real regression. Anyone who names snapshot tests as their core strategy or simply answers 100 % coverage with no distinction shows weak judgment.
TechnicalFrontend fundamentals What is the difference between useEffect, useLayoutEffect and a state-driven render in React? When do you use which tool? (Or the Vue equivalent.)
What a strong answer surfacesuseEffect: runs after commit, asynchronously to the browser paint, suited to data fetching, logging, subscriptions. useLayoutEffect: runs synchronously after commit, before paint, suited to measurements and imperative DOM access that must avoid layout flicker. Prefer a state-driven render when the information can be derived from props or state (no effect needed). Anyone who cannot separate the three mechanisms builds the classic frontend anti-patterns: double renders, flicker, race conditions in effects. Vue equivalent: watchEffect vs. computed vs. lifecycle hooks.
TechnicalPragmatism and prioritization You join a poorly organized React or Vue codebase: 500-line components, props drilling across 5 levels, no separation of logic and presentation, mixed styling approaches. Your action plan in 60 days, without breaking everything?
What a strong answer surfacesA stepwise approach: (1) map the critical components and recurring patterns, (2) first extract hooks or composables and business logic (high leverage, low risk), (3) split large components along functional boundaries, not technical schemas, (4) introduce a state manager only where props drilling actually hurts (Context or Pinia at an SMB, Redux or Zustand at higher volume), (5) unify the styling strategy without a big-bang migration. Anyone who wants to switch everything to React Server Components or Nuxt 4 right away shows a lack of pragmatism.
ValuesCoachability How do you take a critical code review of frontend code you were convinced was good?
What a strong answer surfacesOpenness: the ability to separate the code from personal ego. Bonus: the candidate cites a case where a review actually made them rethink (e.g. accessibility notes that seemed unimportant at first). Anyone who describes explaining their logic to the reviewer instead of listening shows a coachability weakness; at an SMB with a small frontend team that is a hard knock-out signal.
ValuesAccessibility and quality What role does accessibility play in your daily work? Describe concretely what you checked or implemented on the last component you built.
What a strong answer surfacesAn active accessibility posture: semantic HTML as standard, keyboard navigation tested, focus order and visible focus checked, ARIA roles only where needed, contrast validated, a screen-reader test at least once per non-trivial component. Bonus: the candidate names a concrete tool (axe, Lighthouse, VoiceOver, NVDA) and a case where an accessibility audit delivered a real usage improvement. Anyone who treats accessibility as an end-of-project task or blanket-delegates it to QA shows a gap that gets expensive at an SMB (lawsuits under the BFSG since mid-2025 are real).
ValuesTeamwork with product and design How do you work with designers and Product Managers? Describe a situation where you pushed back on a design brief.
What a strong answer surfacesA partnership posture: constructive challenging on the basis of feasibility, performance or accessibility risk, alternative proposals with a sketch or prototype. Bonus: the candidate cites a case where they accepted the original brief after discussion (no systematic opposition). Anyone who describes designers as they don't understand the tech or PMs as they talk too much shows a teamwork weakness that gets especially expensive at an SMB with a small product team.
Evaluation playbook
The Frontend Engineer role reveals itself across five evaluation stages. The hands-on exercise (stage 3) is the most telling stage: frontend can be discussed in theory for two hours without showing whether someone really masters state management, accessibility and performance day to day. Keep the exercise short (2-3 hours) and close to daily work.
Stage 1: CV and portfolio review
Read the CV, GitHub and (if available) personal website side by side. Look for stack consistency (a profile with 5 years of React now learning Vue is more plausible than someone who jumped between seven frameworks), stability (at least 18-24 months in previous roles) and specialization signals: contributions to design systems, conference talks on performance, accessibility audits, visible open-source maintenance. The degree counts less than the last 3-5 years of practice: a self-taught engineer with 5 years of solid production experience weighs more than a top-university graduate with 2 years of extended internship. Negative signal: exclusively tutorial-clone repos with no real product usage.
Stage 2: Phone screen (30 min)
Three questions only: (1) Describe the most recent frontend project you are proudest of; what was your concrete contribution and what usage impact did it have?, (2) Which technical decision did you make recently that you still have doubts about? (humility and reflection), (3) Why are you looking to move now? Outcome: go/no-go in a 5-minute debrief. Avoid trivia questions about framework APIs at this point; look for unfiltered frontend thinking.
Stage 3: Technical interview (60-90 min)
Pair programming or code review on a bounded task (45-60 min), followed by 15-30 min of Q&A on architecture, state management and concrete decisions. A typical task: extend a component with a feature (with tests and accessibility requirements), identify a performance hotspot in an existing component, or debug a UI-bug reproduction case. Assess the ability to think out loud, ask clarifying questions, write tests and watch for accessibility and performance. Avoid purely academic algorithms with no link to daily work.
Stage 4: Frontend system-design exercise (60 min)
An architecture discussion on a concrete frontend case: how would you design [a complex UI component, a multi-step flow, an offline-capable application, a reusable table building block]? Assess the ability to clarify conditions before proposing (browser support, localization, accessibility level, expected data volume), weigh simplicity against reusability, explain the interplay with the design system and backend, and recognize zones of uncertainty. This stage is the most predictive for a Frontend Engineer who has to make technical decisions independently at an SMB.
Stage 5: References (structured check)
Call two references: a former tech lead or direct manager and a former frontend or design colleague. Ask both the same 4 questions: What is she/he strongest at (UI quality, performance, accessibility, design system, tests)? Where would you hire someone complementary? Would you hire them again tomorrow, why? An example of a difficult technical decision made independently? The fourth question delivers the real autonomy signal.
How to recognize a great hire
| Trait | Below bar | On bar | Above bar |
|---|---|---|---|
| Frontend soundness | Stumbles over fundamentals (box model, event loop, the chosen framework's render cycle, asynchronous data flows). Finds solutions by trial and error with no clear mental model. Hard to put on a new framework. | Masters the current stack independently (React or Vue with TypeScript, common build tooling, standard state pattern). Can learn a new framework in 2-4 weeks. Understands the fundamentals well enough to debug deeply when needed. | A reference for the stack on the team and able to switch to a new stack within a few weeks. Anticipates the classic traps (re-render storms, hydration mismatches, memory leaks in subscriptions). Builds useful, not premature, abstractions and knows the limits of their own framework choice. |
| Performance, accessibility and quality | Ships without a Lighthouse or accessibility check. Loads heavy libraries with no code splitting, ignores keyboard navigation and screen-reader support. Coverage is an end in itself rather than a safety net. | Routine checks in the workflow: Lighthouse per feature, accessibility smoke tests (axe or Lighthouse audit, keyboard test), targeted tests on the critical flows. Knows the most common anti-patterns (huge images with no next-gen format, render-blocking web fonts, missing ARIA roles) and avoids them. | Actively defends performance and accessibility bars on the team. Establishes budgets (bundle size, LCP, INP) and audit routines. Educates colleagues with concrete examples and tooling setup. Can say no to a design mockup that cannot be built accessibly or performantly without a workaround. |
| Design system and composition | No clear component strategy; every new page introduces new patterns. Copies markup and styles instead of composing. Handovers with a pixel-pushers mentality and no understanding of tokens and variants. | Structures components to fit the team size: tokens for color, spacing and typography, a clear separation between primitives and product-specific components, cleanly typed props contracts. Handovers with documented edge cases (empty state, error state, loading state, responsive). | A reference on the team for design-system maintenance: documented conventions, a versioning pattern, close collaboration with designers on shared tokens, alignment via Storybook or comparable tooling. Can say no to designs that destabilize the system without becoming dogmatic. |
| Autonomy and resourcefulness | Blocks for hours on an unfamiliar topic without asking for help, or asks at the first obstacle. No structured debugging strategy. Never reads library source code. | Can diagnose independently on familiar topics; asks for help after investigating first (a summary of the problem, hypotheses, what has already been tried). Reads a library's source when needed. | High resourcefulness on unfamiliar topics: reads the source of dependencies, instruments the browser (Performance tab, memory snapshots, coverage tool), isolates root causes even in third-party code. Documents the findings for the team. |
| Communication and teamwork | Explains their own work poorly to non-technical people. Defensive in reviews and critique sessions. Works in a silo, shares little context. Systematic opposition to designers or PMs. | Can explain their work to design, PM or management in clear language. Takes reviews constructively. Shares context in team reviews and 1:1s. Can back a technical constraint with a sketch or prototype. | A bridge between frontend, design, backend and product. Facilitates technical debriefs and design handovers, makes trade-offs understandable, negotiates timelines transparently. A reference on the team for cross-functional communication. |
30 / 60 / 90 day success plan
By day 30
- Local development environment fully set up and deployment of a (even trivial) PR to production validated
- Read and understood the code of the 3 most business-critical frontend modules plus the design-system library
- First documented 1:1 with the tech lead and with a designer on conventions, identified debt and priorities
- First substantial PR (UI bug fix or small component) with tests and accessibility check reviewed and merged
By day 60
- Delivered a complete frontend feature end to end (component, tests, accessibility, performance check, deployment) independently
- First PR review of a colleague with structured feedback on code quality, accessibility and performance, not just an approve click
- Facilitated the first independent handover session with design for a non-trivial component
- Wrote or updated documentation of a recently worked pattern in the design system
By day 90
- Regular delivery (1-2 PRs per week) with quality in code, accessibility and performance confirmed in review
- First technical decision made independently on an ambiguous topic (library choice, refactor of a main component, new pattern in the design system)
- Informal mentoring of a junior or new profile (pair programming, educational reviews on accessibility or performance)
- Formal review with the tech lead: ramp validated, development plan on 1-2 focus areas (e.g. deeper performance practice, building a component pattern, mentoring responsibility)