Do You Even Need a Database?

Startups told to chill: simple files may beat giant databases

TLDR: A viral post says many early apps can just use simple files instead of heavy databases, and it sparked a pile-on about overengineering. Fans say modern storage is fast enough, skeptics warn you’ll reinvent SQLite, and everyone agrees: start simple, upgrade when you actually need it.

A spicy new post argues that many apps don’t need a big fancy database at all—just plain files. Cue the comment-section fireworks. Fans of the minimalist approach cheered the benchmarks showing a simple newline file and an in-memory list can fly for small apps. One user basically threw confetti at modern storage, saying today’s fast drives plus the operating system’s file cache make disk reads feel like yesterday’s memory speeds. The roast of day-one “enterprise stacks” followed fast: think a full fleet of services just to collect email signups—“peak feature vomit,” cracked one commenter.

But the anti-hype squad pushed back hard. The top clapback: keep going down this path and you’re just rebuilding the very thing you skipped—hello, SQLite, the mini-database that lives in a file. They warned about messy edge cases like backups, search, and multiple users editing at once. Meanwhile, the nostalgics took a victory lap down memory lane, reminiscing about sci‑fi file systems that promised database-like powers—remember WinFS and BeOS?—before, as one put it, “the football gets yanked away.”

The vibe check: use files for tiny projects, don’t spin up a whole factory for a lemonade stand. But once you need serious search and safety, graduate to a real database. Common sense dressed like drama—and the comments loved it. Read the post for receipts.

Key Points

  • The article argues many applications, especially early-stage ones, can use simple files instead of a full database.
  • The authors set up three JSONL files (users, products, orders) and two endpoints, benchmarking GET /users/:id.
  • Approach 1 reads the file on each request by scanning and parsing lines; it has O(n) read complexity.
  • Approach 2 loads records into an in-memory hash map and appends writes to the file for durability; reads are a single map lookup.
  • Implementations in Go, Bun (TypeScript), and Rust were load-tested with wrk; results are discussed conceptually, emphasizing trade-offs rather than specific numbers.

Hottest takes

"a jsonl file and a single go binary will literally outlive most startup runways." — vovanidze
"At some point, don't you just end up making a low-quality, poorly-tested reinvention of SQLite by doing this and adding features?" — z3ugma
"the football always gets yanked away" — chuckadams
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.