For years my reflex was: new project, new Postgres. The reasoning was lazy — “in case I need it later.” Most of the projects never grew into the database I provisioned for them.
The shift was small but real: assume SQLite, and only graduate when something
specific forces the move. Since then I have shipped four small systems on
SQLite that would have been more brittle, not less, with a server database
behind them. Backups are a cp. Migrations are easier to think about. The
file is the thing.
The cases where I still reach for Postgres:
- More than one writer at meaningful concurrency
- Genuine need for row-level access controls
- Workloads that are dominated by analytical queries on large tables
Almost everything else is a SQLite project I have not admitted is a SQLite project yet.
← Back to Discoveries