Why teams migrate — and why some shouldn't
The trigger is almost always queries. Firestore is excellent at "fetch this document and its children" and painful at everything relational: joins, aggregates, reporting, ad-hoc filters across collections. Teams end up duplicating data into denormalized mirrors just to make one dashboard query possible, and every duplicated field is a consistency bug waiting for a missed write. Postgres makes those queries one JOIN or one GROUP BY. Cost is the second trigger — Firestore bills per document read, so a poorly-shaped listener that re-reads 500 documents per screen shows up directly on the invoice, while Supabase bills by instance size regardless of read volume.
The honest counter-case: if your data really is document-shaped, your queries are key-value lookups, and offline-first mobile sync matters (Firestore's local persistence is still stronger than anything in the Supabase client), migrating buys you a rewrite and no new capability. I work in both stacks — Callidus runs on Firebase, Pizzeria Bestek on Supabase — and the deciding question is never "which is better" but "what shape are your queries in twelve months".