Every source behind this page, graded. Figma posts were read through
retrieved excerpts; source-code entries were read first-hand from git. Filter by kind.
Postmortem
Figma2020-01
Postmortem: Service disruption on January 21-22, 2020
Two days, two profiles on one RDS Postgres: an expensive query saturating CPU, then write IOPS and lock contention with low CPU. Fixed by cancelling queries, disabling a background process and an emergency engine upgrade.
Carry forwardA single shared database needs per-caller runtime limits before it needs a bigger instance.
https://www.figma.com/blog/post-mortem-service-disruption-on-january-21-22-2020/
Postmortem
Figma2022-06
Postmortem: Service disruptions on June 6 & 7 2022
Pub/sub load drove Engine CPU to 100% on one cluster-mode-enabled ElastiCache node; four disruptions; open files kept working, new opens and collaboration failed; no data loss.
Carry forwardFind the operations your store broadcasts to every node; they cap the cluster regardless of shard count.
https://www.figma.com/blog/postmortem-service-disruptions-on-june-6-and-7-2022/
Postmortem
Figma2019-10
An update on plugin security
Sandbox-escape bugs in the Realms shim; plugin publishing and updates halted; audit found no exploitation; a fundamental stack change to remove the bug class.
Carry forwardAn in-process isolation library needs a distribution kill switch designed in advance.
https://www.figma.com/blog/an-update-on-plugin-security/
Source
redis/redis2022-01-03
Sharded pubsub implementation (#8621)
Read from git: commit 9f8885760, co-authored by an AWS engineer, first tagged in 7.0-rc1. Confines pub/sub messages to the shard owning the channel slot.
Carry forwardUpstream fixes for a vendor-hosted engine reach you only on the vendor's version schedule.
https://github.com/redis/redis/pull/8621
Source
pgbouncer2023-04-20
Add PgBouncer peering support (#666)
Read from git: upstream scaled PgBouncer across cores with multiple processes, so_reuseport and peering for cancel requests (rolling-restart redesign followed in #902, 2024-05).
Carry forwardMulti-process scale-out adds throughput, not priority between traffic classes.
https://github.com/pgbouncer/pgbouncer/pull/666
Source
pgbouncer2026-08-27
Multithread mode (#1386, unmerged)
Read from git: 12 commits from 2025-09-28 to 2026-08-27 on a PR head not reachable from master; an earlier attempt (#1244) is also unmerged.
Carry forwardWhen the feature you need is an unmerged PR, building around it is a bet on timing, not on code.
https://github.com/pgbouncer/pgbouncer/pull/1386
Source
evanw/skew2024-02-20
Skew language repository
Read from git: first commit 2015-03-15 by Evan Wallace, 858 commits, last code change 2021-03-04, a README edit in 2024.
Carry forwardThe substrate Figma owned outright is the part it retired.
https://github.com/evanw/skew
Source
GitHub Advisory DB2019-10
GHSA-7cg8-pq9v-x98q: realms-shim sandbox breakout
Critical advisory: realms-shim versions before 1.2.1 allow escape from the sandbox.
Carry forwardTrack advisories for any library that is your security boundary as if it were your own code.
https://github.com/advisories/GHSA-7cg8-pq9v-x98q
Decision record
Figma2019-10
How Figma's multiplayer technology works
Rejects OT ("Figma isn't a text editor") and true CRDTs; server authority with last-writer-wins per property.
Carry forwardIf you have an authority, you can drop the cost CRDTs pay for not having one.
https://www.figma.com/blog/how-figmas-multiplayer-technology-works/
Decision record
Figma2024-03-14
How Figma's databases team lived to tell the scale
Evaluates and rejects CockroachDB, TiDB, Spanner, Vitess and NoSQL; shards existing RDS Postgres behind DBProxy with colos and logical sharding first; nine months.
Carry forwardProve routing on logical shards before moving a row.
https://www.figma.com/blog/how-figmas-databases-team-lived-to-tell-the-scale/
Case study
Figma2023-04
The growing pains of database architecture
One large RDS instance at 65%+ peak CPU in 2020; vertical partitioning by table group; about 30 seconds and 2% of requests per move.
Carry forwardVertical splits buy time until one table outgrows one machine.
https://www.figma.com/blog/how-figma-scaled-to-multiple-databases/
Case study
Figma, Inc.2025-07
Form S-1
Renewed AWS agreement signed 2025-05-31 commits a minimum $545 million over five years.
Carry forwardPut layer engineering cost next to the store bill before arguing for a migration.
https://www.sec.gov/Archives/edgar/data/1579878/000162828025033742/figma-sx1.htm
Eng blog
Figma2017-06
WebAssembly cut Figma's load time by 3x
C++ engine cross-compiled to asm.js, then to WebAssembly; 3x load time and about 20x parse speed.
Carry forwardCompile targets are a substrate you can change under a stable codebase.
https://www.figma.com/blog/webassembly-cut-figmas-load-time-by-3x/
Eng blog
Figma2018-05
Rust in production at Figma
TypeScript sync server rewritten in Rust: GC stalls blocked every file on a worker; a Node process per file cost too much memory; Servo compression crates caused data loss.
Carry forwardChange one side of the durability boundary at a time.
https://www.figma.com/blog/rust-in-production-at-figma/
Eng blog
Figma2019-08
How to build a plugin system on the web and also sleep well at night
Iframe sandbox tried first, plugins reach the app only through whitelisted messages; the in-process option chosen later failed in 2019.
Carry forwardWrite down the sandbox you rejected; you may need it back.
https://www.figma.com/blog/how-we-built-the-figma-plugin-system/
Eng blog
Figma2021-10
LiveGraph: real-time data fetching at Figma
Subscriptions driven by the Postgres replication stream via Kafka, not polling; a query layer over existing Postgres.
Carry forwardA change stream is a contract; record what ordering its consumers assume.
https://www.figma.com/blog/livegraph-real-time-data-fetching-at-figma/
Eng blog
Figman.d.
Keeping it 100(x) with real-time data at scale
Partitioning broke LiveGraph's global ordering; stopgap merged streams; rebuilt as an invalidation cache sharded by query hash.
Carry forwardInvalidate-and-refetch survives topology changes that incremental maintenance does not.
https://www.figma.com/blog/livegraph-real-time-data-at-scale/
Eng blog
Figma2022-10
Making multiplayer more reliable
Checkpoints every 30-60 s to S3 plus a per-file journal with sequence numbers; 95% of edits saved within 600 ms.
Carry forwardSize the durability window explicitly; it is a product number.
https://www.figma.com/blog/making-multiplayer-more-reliable/
Eng blog
Figma2024-08-08
How we migrated onto K8s in less than 12 months
ECS to EKS: no StatefulSets, a fragile etcd wrapper, no Helm; scope held to the core with the service-owner abstraction unchanged.
Carry forwardKeep the abstraction your users see fixed while you swap the orchestrator.
https://www.figma.com/blog/migrating-onto-kubernetes/
Eng blog
Figma2024-05
Compiling away our custom programming language
Skew retired via a Skew-to-TypeScript transpiler over several years; hiring, integration and tooling cost outlived its performance case.
Carry forwardRetire a home-grown substrate with a translator, not a rewrite.
https://www.figma.com/blog/figmas-journey-to-typescript-compiling-away-our-custom-programming-language/
Eng blog
Figma2024
Speeding up file load times, one page at a time
QueryGraph in multiplayer sends the requested page plus read dependencies; slowest loads 33% faster.
Carry forwardThe authority process is also the right place to decide what a client needs.
https://www.figma.com/blog/speeding-up-file-load-times-one-page-at-a-time/
Eng blog
Figma2025-10
Figma rendering: powered by WebGPU
Renderer moved WebGL to WebGPU for compute shaders and fewer global-state bugs, keeping a WebGL path during rollout.
Carry forwardKeep the old backend live while the new one earns trust.
https://www.figma.com/blog/figma-rendering-powered-by-webgpu/
Eng blog
Figman.d.
Figma's data pipeline upgrade
Daily syncs taking hours or days replaced by in-house CDC to Kafka, one topic per table, into Snowflake.
Carry forwardThe same change stream feeds both real-time product and analytics.
https://www.figma.com/blog/figmas-data-pipeline-upgrade/
Eng blog
Figma2026
Figma's next-generation data caching platform
FigCache: stateless RESP proxy in front of ElastiCache; Redis had become critical-path and near connection limits; six nines claimed since 2H 2025.
Carry forwardA proxy makes one client the only client.
https://www.figma.com/blog/figmas-next-generation-data-caching-platform/
Eng blog
Figma2026
PGKeeper: building the bouncer we needed for Postgres
Go gRPC pooler replacing PgBouncer: priority semaphore with CoDel, weighted fair sharing, load-tested at 3x peak, automatic fallback.
Carry forwardPriority belongs in front of the pool, not inside the database.
https://www.figma.com/blog/pgkeeper-building-the-bouncer-we-needed-for-postgres/
Eng blog
pganalyze2024-03
How Figma built DBProxy for sharding Postgres
A Postgres specialist's reading of DBProxy: parsing, routing, its place between application and PgBouncer.
Carry forwardIndependent reading of the same design; no new numbers.
https://pganalyze.com/blog/5mins-postgres-figma-dbproxy-sharding-postgres
Eng blog
InfoQ2026-05-05
Figma builds in-house Redis proxy to hit six nines uptime
FigCache built on ResPC, Figma's Go RPC framework over RESP; in production since 2H 2025.
Carry forwardDates the FigCache post; the uptime figure is still Figma's claim.
https://www.infoq.com/news/2026/05/figma-redis-figcache/
Eng blog
InfoQ2024-09
Figma moves from ECS to Kubernetes
Lists the stated motivations: CNCF ecosystem, cost, developer experience, resiliency.
Carry forwardCorroborates the EKS post's reasons.
https://www.infoq.com/news/2024/09/figma-ecs-kubernetes-eks
Eng blog
Duckbill2025-07
Figma's $300k daily AWS bill isn't the scandal you think it is
Divides the S-1 minimum into about $109 million a year, roughly 12% of $821 million revenue.
Carry forwardA derived figure; use it as an order of magnitude only.
https://www.duckbillhq.com/blog/figmas-300k-daily-aws-bill-isnt-the-scandal-you-think-it-is/
Eng blog
Jamsocketn.d.
You might not need a CRDT
Quotes Wallace: with the server as central authority, Figma removes CRDT overhead for a faster, leaner implementation.
Carry forwardCorroborates the multiplayer post's rejection of true CRDTs.
https://jamsocket.xyz/blog/you-might-not-need-a-crdt
Eng blog
Agoric2019-10-02
Realms-shim security updates
Upstream maintainer: four security-critical bugs fixed in realms-shim 1.2.0 and SES 0.6.3.
Carry forwardDates and sizes the 2019 plugin incident from the library side.
https://agoric.com/realms-shim-security-updates/
Eng blog
Simon Willison2024-05-04
Figma's journey to TypeScript (link note)
Context: WebAssembly removed Skew's performance case; the transpiler let teams keep shipping.
Carry forwardCorroborates the order of causes in the Skew retirement.
https://simonwillison.net/2024/May/4/figmas-journey-to-typescript/
Eng blog
Postgres Weekly2026-05-06
Issue #647
Dates PGKeeper and records that PGCat was evaluated first; Go and PGX.
Carry forwardThe bound on PGKeeper's publication date.
https://postgresweekly.com/issues/647
Talk
@Scalen.d.
LiveGraph: scaling real-time data access
Abstract: LiveGraph built at 500,000 WAU on one Postgres; now a subscribe-able distributed query cache. Abstract only; no timestamps retrieved.
Carry forwardThe only Figma scale figure tied to a specific architecture moment.
https://atscaleconference.com/videos/livegraph-scaling-real-time-data-access/
Talk
Postgres FM2024
Episode 100: To 100TB, and beyond!
Figma's databases tech lead with Notion and Adyen on very large Postgres. Guest list only retrieved; no timestamped claim cited.
Carry forwardWhere to hear the sharding trade-offs argued across three companies.
https://postgres.fm/episodes/to-100tb-and-beyond
Paper
INRIA2011
Conflict-free replicated data types (Shapiro et al.)
Defines CRDTs: convergence without coordination. Read beside Figma 2019 to see which guarantees a central authority makes redundant.
Carry forwardCRDT cost buys coordinator-freedom; do not pay for it if you have a coordinator.
https://hal.sorbonne-universite.fr/inria-00609399v1
Paper
ACM Queue2012-05
Controlling Queue Delay (Nichols, Jacobson)
CoDel: drop on time spent queued, not queue length. PGKeeper's first admission stage borrows it.
Carry forwardAdmission by sojourn time adapts to load without per-workload tuning.
https://people.engr.tamu.edu/xizhang/ECEN619/research_papers/ACM_COMMUNICATIONS_2012_2208917.2209336_Controlling_Queue_Delay_Van_Jacobson.pdf
Vendor
Redisn.d.
Redis Pub/Sub documentation
Classic cluster pub/sub propagates each message to every node; sharded pub/sub confines it to one shard.
Carry forwardThe mechanism behind the 2022 incident, in the vendor's words.
https://redis.io/docs/latest/develop/pubsub/