Figma is a collaborative design tool that runs in the browser. Several people can work in the same file at once, see each other's cursors, and watch shapes move as teammates edit them. Delivering that experience combines three hard problems: keeping shared state consistent while many people change it, rendering large and detailed canvases smoothly on ordinary hardware, and making all of it feel effortless to designers who care intensely about how a tool behaves.
That context tends to shape how candidates describe the interviews. Many report coding problems that feel close to real product work rather than pure puzzles, and design conversations that reward an understanding of collaboration, performance, and user experience. This guide covers those themes and the representative problem types worth practising, rather than claiming to know specific prompts.
The process, as candidates typically describe it
Reports generally describe stages like the ones below. The number, order, and format of rounds vary, so read the table as a rough outline rather than a description of your loop.
| Stage | What candidates commonly describe | Focus |
|---|---|---|
| Recruiter conversation | Background, role fit, and team interests | Motivation and relevant experience |
| Technical screen | A practical coding problem in a shared editor | Clean, working code and clear communication |
| Later technical interviews | Further coding, plus system or product design for many roles | Data modelling, collaboration, performance |
| Behavioural and values | Collaboration, ownership, and how you work with design and product partners | STAR stories with concrete outcomes |
Topic emphasis: where to spend prep hours
- Practical data structures. Trees, maps, stacks, and graphs applied to real structures such as a document of nested layers. Our LeetCode patterns guide covers the algorithm floor efficiently.
- JavaScript and TypeScript fluency. Especially for product and frontend roles: closures, the event loop, immutability, and typing a data model well. Rendering and infrastructure teams may use other languages.
- State management. Undo and redo, selection, derived state, and applying changes as small, reversible operations.
- Real-time collaboration concepts. Concurrent edits, conflict resolution, presence, and reconnection.
- Rendering and performance. Frame budgets, avoiding unnecessary work, spatial indexing, and profiling.
- Geometry basics. Bounding boxes, hit testing, transforms, and snapping.
Real-time multiplayer: the ideas worth knowing
When two people edit the same object at the same moment, their changes arrive in different orders on different machines. Without a rule for resolving that, each person could end up looking at a different document. Collaborative software broadly solves this with techniques in two related families:
- Operational transformation (OT). Operations are adjusted against concurrent operations so they still make sense when applied in a different order. It is classically associated with collaborative text editing.
- Conflict-free replicated data types (CRDTs). Data structures designed so that replicas applying the same set of updates, in any order, converge to the same state.
Text editing is a demanding case because character positions shift constantly; our collaborative document editing walkthrough covers that version of the problem in depth. A design file is shaped differently. It is closer to a tree of objects, each with properties like position, size, fill, and parent. Figma's engineering team has written publicly that its multiplayer system took inspiration from CRDT ideas while relying on a central server, rather than being a pure peer-to-peer design. You do not need internal detail for an interview; you need to reason clearly about the concepts:
- Granularity. Resolving conflicts per property means one person changing a colour and another moving the same shape do not collide at all.
- Last-writer-wins registers. For a single property, a deterministic ordering (for example a logical clock plus a client id) decides the winner so every replica agrees.
- Optimistic local updates. Apply edits locally at once for responsiveness, then reconcile when the server confirms or rejects them.
- Structural conflicts. Reparenting can create cycles if two people move objects into each other at the same time; the system needs a rule to reject or repair that.
- Presence and reconnection. Cursors and selections are ephemeral and can be lossy, while document changes must survive a dropped connection.
Here is a small TypeScript sketch of per-property last-writer-wins state. Every replica that receives the same updates, in any order, ends up with the same values.
type ObjectId = string;
type Stamp = { clock: number; client: string };
type Update = { id: ObjectId; prop: string; value: unknown; stamp: Stamp };
function newer(a: Stamp, b: Stamp): boolean {
// Deterministic total order: higher clock wins, client id breaks ties.
return a.clock !== b.clock ? a.clock > b.clock : a.client > b.client;
}
class Replica {
private values = new Map<string, { value: unknown; stamp: Stamp }>();
private clock = 0;
constructor(private readonly client: string) {}
localEdit(id: ObjectId, prop: string, value: unknown): Update {
this.clock += 1;
const update = { id, prop, value, stamp: { clock: this.clock, client: this.client } };
this.apply(update);
return update; // send to server / peers
}
apply(u: Update): void {
this.clock = Math.max(this.clock, u.stamp.clock); // Lamport-style clock
const key = `${u.id}:${u.prop}`;
const current = this.values.get(key);
if (!current || newer(u.stamp, current.stamp)) {
this.values.set(key, { value: u.value, stamp: u.stamp });
} // older update: ignore
}
get(id: ObjectId, prop: string): unknown {
return this.values.get(`${id}:${prop}`)?.value;
}
}
The strong answer discusses what the sketch leaves out: deleting an object that someone else is editing, keeping an ordered list of children consistent, preventing reparenting cycles, how undo should behave when a teammate has since changed the same property, and why a central server can simplify ordering compared with a fully peer-to-peer approach.
Rendering and performance in the browser
A design file can contain thousands of layers, and users expect panning, zooming, and dragging to feel instant. Figma has publicly discussed compiling performance-critical code to WebAssembly and drawing the canvas with GPU-accelerated browser graphics rather than ordinary page elements. For interview purposes, the transferable principles are what matter:
- Frame budget. At 60 frames per second there are roughly 16 milliseconds per frame; anything slower shows up as stutter.
- Do less work. Only redraw what changed, cull objects outside the viewport, and cache results that are expensive to recompute.
- Spatial indexing. Structures like quadtrees or grid buckets make hit testing and viewport queries fast instead of scanning every object.
- Keep the main thread free. Batch updates, avoid layout thrashing, and move heavy computation off the interaction path where possible.
- Memory awareness. Large files stress memory, so compact representations and careful object lifetimes matter.
- Measure first. Profile before optimising, and explain how you would confirm an improvement.
For general architecture fundamentals such as caching, queues, and storage, our system design reference is a useful refresher before a design round.
Product-minded engineering
Design tools live or die on feel. Candidates often describe interviewers who appreciate engineers that think like users. That shows up as:
- Asking how a feature is used before deciding how to build it.
- Noticing surprising behaviour, such as an undo that reverts a teammate's change instead of your own.
- Prioritising perceived speed through optimistic updates and immediate feedback.
- Discussing trade-offs in user terms, not only in terms of complexity or cost.
If you are interviewing for a product frontend role, our frontend interview help page covers the broader range of UI, JavaScript, and browser topics.
Representative problem types
- Tree manipulation. Move, group, or delete nodes in a layer hierarchy while keeping parent and child links valid.
- Undo and redo. Implement a history stack of reversible operations, including grouping several changes into one step.
- Geometry and hit testing. Find which shape is under a point, compute bounding boxes, or detect overlapping rectangles.
- Layout logic. Arrange items in rows or columns with spacing and wrapping, similar to auto-layout style behaviour.
- Conflict resolution. Merge concurrent property updates deterministically, as in the sketch above.
- Performance-sensitive querying. Return objects visible in a viewport efficiently using a spatial index.
- System design. Design a real-time presence service, a comments system on a shared canvas, or version history for collaborative files.
What interviewers tend to value
- Working code. Practical problems reward solutions that run and handle edge cases, not just a sketch of an idea.
- Clear data modelling. Choosing representations that make operations simple and correct.
- Reasoning about concurrency. Thinking through what happens when events arrive out of order.
- Performance awareness. Knowing where time goes and how to measure it.
- User empathy. Connecting technical choices to how the product feels.
A note on integrity: prepare thoroughly and reason honestly in the room. Follow-up questions on collaboration and performance quickly move past memorised answers, and genuine understanding is what holds up.
A focused two-week prep plan
- Days 1-3: Core patterns with an emphasis on trees, maps, stacks, and graphs, written as clean, runnable code.
- Days 4-5: Language refresh for your role, such as TypeScript types, closures, the event loop, and immutable updates.
- Days 6-8: Practical drills: a layer tree with move and group operations, undo and redo with grouped steps, and rectangle hit testing.
- Days 9-11: Collaboration and performance: implement a per-property last-writer-wins replica, then explain cycle prevention, deletes, and viewport queries with a spatial index.
- Days 12-14: Design practice out loud for presence, comments, and version history, plus behavioural STAR stories about working closely with designers and product partners.
Practise structured answers for practical coding rounds
CoPilot Interview is a native desktop AI interview assistant for Windows and macOS that surfaces structured approaches and talking points for coding, design, and behavioural questions. It has a permanent free tier, so you can try it at no cost.
Try the free tierFAQ
What kind of coding questions does Figma ask?
Candidates commonly describe practical coding problems that feel close to real product work, such as manipulating a tree of objects, implementing undo and redo, or handling geometry and layout, alongside standard data structures and algorithms. The exact mix depends on the team and level, so confirm the format with your recruiter.
Do I need to know CRDTs or operational transformation for a Figma interview?
You do not need to be a research expert, but understanding the core ideas is useful preparation for a company built around real-time collaboration. Be able to explain why concurrent edits conflict, how approaches in the CRDT and operational transformation family converge, and the trade-offs of a central server versus fully peer-to-peer designs. Whether it comes up depends on the team.
Is a Figma interview mostly frontend?
Not necessarily. Figma hires across product frontend, rendering and graphics, backend infrastructure, and other areas, and each team emphasises different skills. Frontend and product roles often lean on JavaScript or TypeScript and browser performance, while infrastructure roles lean on backend and distributed systems. Read the job description and ask your recruiter what your loop covers.
What does product-minded engineering mean in an interview?
It means connecting technical decisions to what users experience. In practice, that looks like asking how a feature will be used, noticing when a technically correct result would feel wrong to a designer, prioritising perceived responsiveness, and being willing to discuss trade-offs in terms of user impact rather than only complexity.
How many interview rounds does Figma have?
There is no single reliable number, because it varies by role, level, and team. Candidates typically describe a recruiter conversation, one or more technical screens, and a set of later interviews covering coding, design, and behavioural or values topics. Processes change over time, so ask your recruiter for the exact structure of your loop.