— Infrastructure

Why we pick Firestore over Postgres every single time.

A document store with real-time listeners and fine-grained security rules removes most of the operational work that comes with running a relational cluster. Postgres is the fallback, not the default.

4 min readUpdated 2026-06-02By Aryan Singh Pokharia, Founding Member & Lead Developer
Data center server room, representing managed database infrastructureAptixLabs · 2026-05-08

The studio defaults to Firestore in Native Mode as the primary database. It's a serverless document store with real-time listeners, fine-grained security rules and global replication out of the box. For a small team it removes most of the operational work that comes with running a Postgres cluster.

Where Firestore wins

  • Real-time listeners — every client surface gets push updates without a separate message bus
  • Security rules — declarative, testable, enforced at the storage layer
  • Zero ops — no Postgres pool tuning, no replica failover, no upgrade windows
  • Global replication — multi-region writes for partners who need them
  • Cost — single-digit dollars a month at the studio's current traffic

Where Postgres wins (and when we pick it)

Firestore loses to Postgres when a project needs complex joins, strong relational constraints, or aggregation queries at scale. For analytics and reporting we export Firestore to BigQuery via the Firestore-to-BigQuery extension and run SQL there — that covers most "I need joins" use cases without changing the primary store.

The studio reaches for Cloud SQL Postgres only when a project genuinely needs SQL constraints from day one — invoice-driven products, marketplaces with strong consistency requirements, anything that ages into a financial system. Most products don't.

Schema rules of thumb

  • Denormalise hot paths — duplicate fields the UI reads frequently
  • Normalise rarely-touched fields — they can be a join away
  • One document per user-facing entity, not per database row
  • Use subcollections for unbounded one-to-many; arrays for bounded

The honest case against Firestore

It would be dishonest to pretend Firestore wins everything. Complex reporting queries are painful — there are no joins, no GROUP BY, no ad-hoc analytics. Aggregations need either denormalised counters you maintain yourself or an export to BigQuery. If your product is fundamentally a reporting tool, Firestore is the wrong primary store and we will tell you so. Picking it by default does not mean picking it blind.

A rule of thumb for the choice

Ask one question: does this product need joins and constraints to be correct, or just to be convenient? A banking ledger needs them to be correct — pick Postgres. A fitness app, a social feed, a messaging product needs them only for occasional reporting — pick Firestore and export to BigQuery for the analytics. We have made both calls; the mistake is making the choice by habit instead of by the shape of the data.

Have a project like this?

The studio is taking on a small number of partners. Tell us what you're building — we reply within a working day.

Start a conversation