Data and storage

PostgreSQL engineering

A relational database with transactional guarantees, JSON when you need it, full-text search and a query planner that will tell you what it is doing — our default, and the one we have to be argued out of.

What we reach for first

When we reach for it

Almost every system we build. Constraints in the database are the last defence against bad data, and they hold when the application layer is bypassed by a migration, a script or a future service nobody has written yet.

When we would argue against it

It is the wrong tool for genuinely enormous analytical scans, where a columnar warehouse is a different class of machine, and for a cache, where Redis exists. Neither is a reason to start elsewhere.

What it looks like in delivery

Migrations in the repository beside the code that needs them, foreign keys and check constraints written rather than assumed, and query plans read before an index is added. Most database performance work we are called into is a missing index and a query somebody let an ORM write.

Working in PostgreSQL?

Tell us what it is running, what it costs you today, and what you need it to do next. A senior engineer will tell you what we would keep and what we would change.