Did my Figma final round last month. It's virtual now. They do not do in-person final rounds for most roles. Here's the actual structure.
Five rounds back to back over one day (with breaks). My schedule: Coding 1: 60 min. Algorithm + data structures. Two medium problems. Follow-up questions on time/space complexity. Standard. Coding 2: 60 min. More of the same but one problem was product-flavored. "Build a basic event listener system" style. Testing whether you can code something that reflects real product work, not just LeetCode patterns. System Design: 60 min. Described in another thread here. Multiplayer/collaborative scenario. Behavioral: 45 min. Two interviewers. Mix of STAR questions on impact, collaboration, and ambiguity. See the other thread on their values. Cross-functional: 45 min. This one surprised me. They asked about how I've worked with designers and PMs specifically. For an engineering role. They genuinely care whether you know how to partner across functions without being a bottleneck.
What I wish I'd known:
The cross-functional round is real. Prepare a specific story about working with a designer on a feature end-to-end. Not just "I attended the design review" but what specific input you gave, how you navigated tradeoffs between design fidelity and engineering feasibility. That's the thing they want.
Also: they sometimes add a 6th exploratory round if they're deciding between levels. Mine had one quick 30-min call with a staff engineer that felt more like a conversation than an evaluation. Happened 3 days after the main loop. Don't read too much into it if that happens.
Timeline: applied -> recruiter screen -> phone coding -> final loop -> offer. Total: about 6 weeks for me.