What choosing a database actually means
A database is where your app starts keeping receipts.
It is not just “a place to store stuff.” It decides:
- how your data is structured
- how easy it is to query later
- how permissions work
- whether new features feel clean or cursed
That is why database decisions feel small at the prototype stage and surprisingly expensive once the app has momentum.
When you actually need a database
You probably need a real database once your app has:
- user accounts that should keep their own private data
- saved content, drafts, uploads, or anything people expect to come back to later
- app state that should persist across devices or browser sessions
- records that relate to each other or feed search, filters, and growing lists
- analytics or event data you want to inspect over time
- multiple users touching the same product data
- local storage and JSON files that are starting to feel like a dare
- A model that fits your app, not just your first demo
- Good docs and dashboards so debugging is not miserable
- Clear auth and permissions story
- Easy local development and deployment paths
- Escape hatches for when the app gets more serious
What changed this month
The database category did not flip upside down, but the direction is clear: database tools are getting more agent-aware.
Supabase is tightening security defaults around which tables are exposed through its Data API. That is a very good thing in an AI-assisted world where a coding agent might happily create five tables while you are getting coffee and then act surprised when permissions matter.
Neon keeps leaning into branching and AI-agent workflows. That makes it a stronger pick when you want each preview, migration, or experimental agent run to have its own Postgres sandbox instead of poking the production database with a broom handle.
Firebase is still the speed pick, but Firestore search/JOIN improvements and SQL Connect momentum make it feel less boxed in. I still would not choose it for every relational SaaS app, but the old warning label is getting smaller.
Turso is the most interesting mover if your app is SQLite-style. Sync, many small databases, and lightweight deployment patterns are real reasons to care. Just do not pick it because the word SQLite makes your brain feel indie and cool. Pick it because the app actually benefits from that approach.
Convex, InstantDB, and PocketBase are joining the watchlist for the same reason: they are not generic “every database problem” answers, and that is the point.
Convex is compelling when the app is fundamentally realtime and reactive. InstantDB is compelling when collaboration and frontend-driven sync are the actual product, not a decorative checkbox. PocketBase is compelling when you want a tiny self-hosted backend that can make a prototype feel real before the infrastructure committee arrives, wearing a tiny badge that says “have we considered Kubernetes?”
Common mistakes
- Choosing a database based only on the easiest tutorial
- Ignoring permissions until after private user data already exists
- Treating “works for the prototype” as the same thing as “good for the product”