Levels.fyi
Millions of users, Google Sheets as the database
Levels.fyi ran salary data for millions of monthly visitors with Google Forms, Google Sheets, AWS Lambda, and JSON files in S3 — no Postgres on day one. They moved to a real database only after product-market fit, not before.
2017–2019
No backend server, just Forms and Sheets
AWS Lambda
Google Forms
Google Sheets
API Gateway
S3
CloudFront
The founders launched Levels.fyi without a traditional database or API server. Submissions came through Google Forms; data lived in Google Sheets; Lambda plus API Gateway handled writes; reads were baked into JSON on S3 and served through a CDN.
Their engineering blog is explicit: this let them focus on product-market fit instead of provisioning RDS instances they did not yet need.
Lesson
Premature optimization is still the root of all evil — even when your site is about six-figure compensation packages.
2019–2021
Millions of users on spreadsheet glue
AWS Lambda
Google Sheets
S3 JSON bundles
Browser-side aggregation
CDN cache
The architecture scaled to millions of users and worked for roughly 24 months, according to their post. Every salary record could ship to the browser in a single JSON file; charts and stats ran client-side.
Pain arrived as files grew to multiple megabytes, Lambda timed out on big transforms, and they hit Google Sheets API rate limits — plus the 10-million-cell cap, which they temporarily worked around by sharding into multiple sheets.
Lesson
Spreadsheet backends buy time, not immortality. Know what breaks first (file size, API limits, scrapeability) and plan the exit before users feel it.
2022–today
Postgres arrives; Sheets stays in the loop
Node.js API
PostgreSQL
Google Sheets (ops/review)
CDN
They migrated reads and writes to Postgres and real APIs while duplicating writes to Sheets during transition — no big-bang rewrite. A January 2024 update notes Sheets still used throughout operations alongside Postgres.
Their philosophy did not flip to "scale everything." One of their most trafficked services still ran on a single Node.js instance serving tens of thousands of requests per hour when they published the story.
Lesson
Graduate to Postgres when spreadsheets hurt, not when Hacker News says you should. Keep the simple tools for ops if they still earn their keep.
Sources
- Levels.fyi — How we scaled to millions with Google Sheets as a backend
- Levels.fyi — Hitting the 10M cell limit on Google Sheets
- Levels.fyi — How we built scalable search with PostgreSQL
Facts drawn from public engineering posts and interviews. Numbers are approximate where sources disagree — we're stack advisors, not historians.
Get the right stack for YOUR scale — not theirs
Levels.fyi's stack made sense for Levels.fyi. Yours won't — and copying theirs is how you end up with a $4k/month bill and three unused Kubernetes clusters.
Plan my stack — free