Figma interview questions
Big tech · 4 questions reported
- junior 0
- mid 3
- senior 1
These are 4 technical questions candidates reported being asked in Figma interviews for AI engineer, ML engineer and applied AI engineer roles, each with a model answer you can say out loud in a minute or two. They cover tokenization, ai judges, fine-tuning & alignment and ml system design: 0 junior, 3 mid-level and 1 senior questions. Every question comes from a public interview write-up that names Figma.Updated
Figma tokenization questions
Model answer
Interface: one keyphrase per text or several, overlapping or not, labelled as offsets or strings?
Tokenizer: which vocabulary, cased or not. Map character labels to token start and end with the fast tokenizer's offset mapping, and decide what happens when a label cuts through a subword. Texts over 512 tokens need sliding windows.
Valid spans: end not before start, a maximum length, a no-answer case. Outputs: top spans as character offsets with scores.
Figma models as judges questions
Model answer
Split tasks by verifiability. Exact requests, like setting a padding, get hard assertions on the document diff: the target property changed, and nothing else did.
Open-ended requests get a multimodal judge over before and after renders, scored per rubric criterion: intent followed, content preserved, layout intact. Calibrate each judge against designer labels and track agreement over time.
The platform: versioned files and instructions, sandboxed runs, stored traces, per-slice results, and a regression gate.
Figma fine-tuning and alignment questions
Model answer
A SQuAD-style head: two logits per token, for start and end.
import torch
import torch.nn as nn
import torch.nn.functional as F
class SpanModel(nn.Module):
def __init__(self, encoder, hidden):
super().__init__()
self.encoder = encoder
self.head = nn.Linear(hidden, 2)
def forward(self, ids, attn):
out = self.encoder(input_ids=ids,
attention_mask=attn)
s, e = self.head(out.last_hidden_state).unbind(-1)
neg = torch.finfo(s.dtype).min
pad = attn == 0
s = s.masked_fill(pad, neg)
return s, e.masked_fill(pad, neg)
def train_step(model, opt, b):
model.train()
s, e = model(b["ids"], b["attn"])
loss = (F.cross_entropy(s, b["start"])
+ F.cross_entropy(e, b["end"])) / 2
opt.zero_grad()
loss.backward()
opt.step()
return loss.item()
Interviewers check that pads are masked, labels are token indices mapped from character offsets, and validation runs under no_grad and eval mode. Decode the best pair with end not before start and a length cap, then score exact match and token F1 against the gold character spans.
Figma mL system design questions
Model answer
Feed: optimize meaningful engagement, like opens and remixes, checked against retention. Retrieve, then rank; cold-start users get content embeddings and popular-by-segment items, plus a small exploration slot run as a bandit. Evaluate offline with NDCG, then A/B.
HTML: an LLM with design-system components in context and constrained output. Check that the output parses and renders, then compare rendered screenshots against references with a calibrated judge. Online, track how often users keep the result.
Each question comes from a public interview write-up or video that names Figma; the answers are ours. Not affiliated with Figma.