Background
10+ years of frontend, and my last job was Senior Frontend at ByteDance. Target: Senior / Staff frontend, design systems direction, Seattle / US remote.
Timeline overview
| Date | Event | Result |
|---|---|---|
| 9/25 | Full Stack track recruiter screen (30 min, Zoom) | Passed |
| 10/5 15:00-16:00 PT | Full Stack track CoderPad coding (60 min) | Failed, formal rejection on 10/09 |
| 10/08 | Redirected to the AI Product track, new recruiter | New process starts |
| 10/12 | Signed the Figma NDA (DocuSign) | - |
| 10/13 12:30-13:00 PT | AI Product track recruiter intro (30 min, Zoom) | Passed |
| 10/15 14:00-15:00 PT | AI Product track CoderPad (60 min) | Passed, on to HM |
| 10/26 8:30-9:00 AM PT | AI Product track HM screen (30 min, Zoom) | Waiting for the result after the interview |
| 11/02 | Recruiter phone call with the result | No headcount; interview went well, my record is kept; not rejected for technical reasons |
Track 1: Software Engineer - Full Stack
Recruiter screen (9/25, 30 min)
A normal recruiter round: background, why Figma, salary expectation range, visa situation, next-round scheduling. Nothing special, just talk normally. The process moved fast, and the coding round was booked right after the call.
CoderPad (10/5, 60 min)
Format: one-on-one, CoderPad + Zoom, camera on the whole time, filters / virtual background / blur off, sharing the entire screen the whole time, and all AI tools disabled during the interview (including the one built into CoderPad).
Problem family: the nested rich-text parser family. The similar problems I had prepared included step-by-step ones like tokenize / is_well_formed / read_rich_text.
The variant I actually got was different from the version I practiced: the output was object nodes instead of plain nested arrays, and the last question also required handling input with no nesting.
Result: I did not finish case 3 of the last question, which had to do with reusing object references. I got the formal rejection on 10/09.
Lessons:
- Figma likes to give "the same family with a different output shape". Memorizing one output format is not enough; you need to practice until you can rewrite for a different shape. Object vs array, flattened vs nested are all ways they change it.
- The last question is often a combination of the earlier ones plus an edge case (for example input with no nesting), so leave time for the ending and don't grind too long on the early parts.
- Right after writing the code, build your own edge cases and run them. The interviewer cares a lot about that habit.
After this track
After the rejection the recruiter proactively redirected me to the AI Product track. I wasn't picked up from mass applications. Failing the Full Stack coding round did not affect the new track, except the NDA status had to be re-confirmed.
Track 2: Software Engineer - AI Product
Role positioning: 0-to-1 generative AI product engineering, working with the AI Research team across the whole lifecycle from model selection to launch, measurement and continuous improvement. Requires 5+ years of SWE plus 1+ year building generative AI products.
Recruiter intro (10/13, 30 min)
A new recruiter, 30-minute Zoom. The focus was confirming whether my AI background fits. I talked about ByteDance's AI customer-service chatbot + AI oncall, both built on internal models: intent understanding -> generating structured feature cards (not the agent-copilot kind that writes drafts), cascade, temperature 0, human fallback, strict cost discipline. The email mentions BrightHire transcription; you can opt out in advance and it doesn't affect the result.
CoderPad (10/15, 60 min)
Format: same as the previous round, one-on-one, 60 minutes, camera on and full-screen sharing the whole time, AI tools disabled.
Problem family: graph reachability, three questions that build on each other: directed reachability, undirected connectivity, then a variant with a blocked edge. The actual wording of the third question was: if the direct connection between two nodes is broken, does another connection still exist.
My approach: count simple paths, and if the number of paths > 1, treat it as having an alternative connection. The logic is correct (the direct edge itself counts as one path), but the complexity is exponential, and I also failed an edge case.
The better approach (from my review after the interview): remove that direct edge from the graph, then run one more O(V+E) BFS/DFS reachability check. Don't alter the caller's original graph, modify the graph itself.
Result: passed, on to the HM. It took about 5 days from the CoderPad to the result.
Lessons:
- The third question of Figma's graph problems is often "asked a different way, but the answer is the same reachability check". First work out what you need to prove, and don't start by counting paths.
- Complexity will be followed up on. If you can do O(V+E), don't write exponential, and even if you write a working version first, volunteer the better solution.
- Prepare your AI product story in advance. For the AI Product track the coding is only the ticket in, and the HM will definitely dig into your AI projects.
HM screen (10/26, 30 min)
Format: 30-minute Zoom with an EM from the Roundtripping team (based in London). There is a time difference, so it was booked for 8:30 AM PT (4:30 PM London). I joined 5 minutes early, camera on the whole time, filters off, no AI tools during the interview.
Content: purely behavioral / situational, no coding. Around my projects: goals, scope, impact, plus one question about whether anything didn't go as expected (didn't-go-to-plan).
The AI project I led with was the chatbot / tool recommendation one, directly relevant to the role. For the didn't-go-to-plan question I answered with the cost problem, and told it as a closed STAR loop (problem -> action -> result).
How it felt: the questions weren't that deep, I proactively went deeper myself, and there wasn't much positive feedback in the room. This round is a screen by nature, and the person was an EM on loan from another team, so don't over-read the feedback in the room.
Result (11/02 phone call)
The recruiter called to tell me: the AI Product role has no headcount left, my interview performance was good, and my record will be kept. It wasn't a rejection for technical reasons; the process just stopped there, and I did not get into the VO.
Preparation advice (by priority)
Coding families you must practice (all of them show up repeatedly in interview reports): Document / Layer (with undo-redo), FigJam Table, Display Sort, Resize Rectangles, nested rich-text parsing, graph reachability. Practice each one until you can change the output shape and handle edge-case input.
You don't need to bet on specific system design questions, but prepare the Figma-flavored directions: real-time collaborative editing, FigJam comments, popular files Top-K, permissions, online presence / cursors, reconnection recovery, conflict handling. These are the high-frequency directions at the VO stage.
For the AI Product track, you must have your own AI project ready: why you chose the model, how you measured the results, how you controlled cost, how you handled bad cases. Only knowing how to call an API is not enough; you have to be able to talk about the tradeoffs.
Don't lose points on logistics: join 5 minutes early, camera on the whole time, turn off all filters and virtual backgrounds, share the full screen, sign the NDA in advance. You can opt out of BrightHire transcription.
In the HM round, report scope first when talking about a project: how big the scope was, what judgment calls you made, what you gave up, and what the result was, then expand into details. For Senior / Staff rounds, only saying "what code I wrote" is not enough.
Discussion
Loading comments…