Home › Stages › Technical

Stage 3 — Technical interview

60–90 minutes with frontend leadership. The most demanding stage. Some combination of: technical discussion, live coding exercise, design exercise, and possibly a take-home that you walk through. The bar isn't perfection — it's thinking like a senior engineer out loud.

01What this stage probably looks like

For senior frontend roles, common formats:

  1. Discussion-heavy — they ask you about systems, patterns, trade-offs. Walk through how you'd build X, debug Y, scale Z.
  2. Take-home review — they give you a small project beforehand and use the interview to walk through your code.
  3. Live coding — pair on a small problem in real time. Sometimes a CodeSandbox / repl, sometimes whiteboard pseudocode.
  4. System design — "design the frontend for an inventory dashboard with X requirements." More common at staff level but possible.

Likely some combination of 1 + (3 or 4). Plan for both.

02Discussion topics they'll probe

Reread these technical pages the day before:

03Live coding strategy

The protocol — say these things in order, regardless of the problem

  1. Restate the problem in your own words. "So if I'm understanding right, we need to..." Catches misunderstandings before you write code.
  2. Ask clarifying questions. What's the data shape? What edge cases? Performance constraints? Network failure? Empty state? "These are the kinds of questions I'd normally ask before starting." This is the most senior thing you can do.
  3. Sketch the approach out loud. "I'm thinking I'll start by... then handle... and treat X as a stretch goal." This lets them course-correct early.
  4. Talk while you code. Narrate your thinking. The interviewer learns more from your reasoning than your typing.
  5. Test as you go. Run the code, console.log values. Don't write 80 lines and pray.
  6. Acknowledge what you'd do with more time. "I'd extract this into a hook, add tests, and handle X edge case — happy to do any of those if useful."

Common live-coding prompts to expect

Build a typeahead / autocomplete

Classic. They want to see you handle:

  • Debouncing the input
  • Cancelling stale requests
  • Handling empty / loading / error states
  • Keyboard navigation (up/down/enter/escape)
  • Accessibility — proper ARIA combobox pattern

If you only get the first three in, that's a strong B+. If you mention the others as stretch goals you'd add, you've signaled senior-level thinking.

Implement a custom hook (e.g., useFetch / useDebounce / useLocalStorage)

Tests your understanding of hooks fundamentals. Key things to nail:

  • Cleanup in useEffect
  • Stable function references where needed
  • Avoiding stale closures
  • Sensible TypeScript generics
  • Good API ergonomics (returned shape, options object)
Render a list with a filter / sort

Easy on the surface, scored on details:

  • Stable keys
  • Memoization where it matters (useMemo for filtered/sorted derived value)
  • Proper input handling (controlled inputs)
  • Clean separation of UI from logic
Component composition (modal, dropdown, etc.)

Great chance to show off compound components, portals, focus management, ARIA. If you build a modal, mention:

  • Portal to body
  • Trap focus inside while open, return on close
  • ESC to close, click-outside to close
  • Aria-modal, aria-labelledby
  • Prevent body scroll while open

You don't have to implement all of it in the time given. Mentioning it is most of the score.

JS algorithm warm-up (less common at senior level, but possible)

Don't expect leetcode mediums. More likely: "Given this nested object, flatten it" or "deduplicate this array of objects by property X."

Approach:

  1. Clarify input shape and edge cases (empty, undefined, nested at varying depths)
  2. Talk through a brute-force solution first, then refine
  3. Use built-ins where they exist (Map, Set, Object.entries)

04Take-home strategy

If they sent a take-home before the interview, the interview is a code review of your submission. Prep:

  1. Reread your own code. You wrote it days or weeks ago. Refresh.
  2. Write a 1-page README — what you built, what you'd improve given more time, what trade-offs you made and why. Hand it to them at the start of the interview if possible.
  3. Have an opinion on every choice. "I used X because Y. I considered Z but it was overkill for the scope."
  4. Identify your weakest code. They will find it. Beat them to it: "I'm not happy with how I structured X — given more time I'd refactor to Y."
  5. Prepare answers for likely follow-ups — how would you scale this, how would you test it more thoroughly, how would you handle X edge case.

05System design exercise

If they ask "design the frontend for X": the process is more important than the answer. They want to see how you think.

The 6-step protocol

  1. Clarify scope. "What's the user flow? How many users? Real-time? Mobile? Offline-first?" 2–3 minutes here is well spent.
  2. Define the surface. Sketch the main screens or features. "Sounds like we have these views: dashboard, detail, edit, list."
  3. Identify the hard parts. What's actually challenging here? Real-time sync? 100k rows? Offline edits? Auth flow? Multi-tenant?
  4. Walk through the architecture. Routing, data flow, state architecture, component boundaries. Reference real tools: TanStack Query for server state, Zustand for client, React Router for routing, react-hook-form for forms.
  5. Address each hard part with a specific approach. "For the 100k rows: virtualization with AG Grid in server-side row mode, push grouping to the backend."
  6. Acknowledge trade-offs and what you'd defer. "I'd start with X. If we hit Y problem, I'd reach for Z. Without that, it's premature."

Likely prompts

06Code review you might be asked to do

Some interviewers hand you a piece of (intentionally flawed) code and ask "review this." What they're testing: your eye, your priorities, your communication.

Common bugs / smells they'll plant:

Approach: scan the code top to bottom, identify issues at three levels — bugs (definitely wrong), smells (questionable), and stylistic preferences (last priority). Talk through them in that order. Distinguish "must fix" from "I'd suggest" — that's senior judgment.

07What they're scoring

What earns points

  • Talking through trade-offs out loud
  • Asking clarifying questions before coding
  • Acknowledging what you'd do with more time
  • Spotting bugs before they point them out
  • Naming things well, structuring code cleanly
  • Knowing when to keep something simple
  • Comfort with ambiguity

What loses points

  • Silent typing for 10 minutes
  • Pretending to know something you don't
  • Over-engineering a simple problem
  • Defensive responses to feedback
  • Getting flustered when stuck — say "I'm stuck, let me think out loud"
  • Forgetting basic things and refusing to look them up — "I'd MDN this in a real setting" is fine

08If you get stuck

Say so. "I'm stuck on this part. Let me back up and try a different angle." This is a senior move. The opposite — silently typing nonsense for 5 minutes — looks much worse.

You can also ask for a hint. "If you're willing to nudge me, I'd take a hint here." Most interviewers will, and how you take the hint and run with it is itself a signal.