Journal / Technology

Technology

Supabase vs. Firebase When You Are the Whole Engineering Team

The feature comparison is not the decision. For a team of one, the question is what happens on the day you need to leave — and the two platforms answer it very differently.

10 min readResolution

Every comparison of these two platforms is a feature table, and the feature table is close to useless — both do authentication, storage, realtime and serverless functions, and any gap present today is a roadmap item. For a company where one person maintains everything, the deciding questions are different, and there are three of them.

Question one: where does authorization live?

This is the real architectural fork, and it is not a matter of taste.

Supabase is Postgres. Access control is expressed as row-level security policies inside the database, in SQL. Firebase expresses it as security rules in a dedicated declarative language sitting in front of the datastore.

For a solo maintainer the difference that matters is what a mistake looks like. A wrong RLS policy is a query returning nothing, or returning rows it should not, and it is testable by connecting as a given user and running a select. It is also the same language you already write your queries in. Rules in a separate DSL are a second language, with a second mental model, and their failure mode is quieter.

This is not a claim that one is more secure. Both are secure when correct. The claim is that one has a shorter distance between "I think this is right" and "I have confirmed it is right", and for a single maintainer that distance is the entire risk surface.

client Aclient Bclient C row-level security policy one shared table the client is public. the policy is not.
fig. 01 — isolation enforced by the database, not by the client

Question two: what shape is your data, really?

Document stores are excellent when access patterns are known in advance and reads dominate. They punish you when a question arrives that the document shape did not anticipate — which, for business software, is the normal case. A client asks for a report crossing three entities nobody planned to cross, and in a relational store that is a join, while in a document store it is either a data migration or a denormalisation you now maintain forever.

Small business applications — billing, access control, parcel management, scheduling — are relational almost without exception. Entities reference each other, reporting is cross-cutting, and requirements arrive from the client rather than from the schema. Choosing a document store for this shape means paying for flexibility you do not have and giving up querying you will need.

Question three: what does leaving cost?

The question nobody asks at the start and everyone asks eventually.

A Postgres database is portable. The schema is standard SQL, the data exports as SQL, and the same database runs on a dozen hosts and on your own machine. Leaving Supabase means moving Postgres and rewriting the client library calls — real work, bounded work.

Leaving a proprietary document platform is a rewrite: the data model, the security rules and the query patterns are all shaped by that specific product. The lock-in is not a licensing trap, it is architectural, and it accumulates quietly with every feature you ship.

relational, portable document, proprietary SQL you can exportpolicies in the DBself-host possible rules in a DSLshape-dependent queriesexit = rewrite the question is exit cost, not feature count
fig. 02 — the comparison that matters is exit cost

Where the other side wins

Presenting this as one-sided would be dishonest, and there are cases where the document platform is clearly the better call:

  • Mobile-first with offline sync. Mature offline persistence with conflict handling is a genuinely hard problem, and a platform that has solved it is worth choosing for.
  • Very high read volume with simple, known access patterns. This is exactly the shape document stores are designed for.
  • Deep integration with an existing cloud ecosystem your organisation already runs.
  • Operational maturity. The older platform has more years of production behaviour behind it. That is a real consideration and not one to wave away.

Our position, stated as a preference

We run Supabase across every product, and the deciding factor was the first question rather than any feature. Because our applications ship as static files with no server of our own, authorization has to be enforced by the database — there is nowhere else to put it. That constraint makes RLS load-bearing, and having it in SQL, in the same place as the data, is what makes the architecture in Single-File Architecture defensible at all.

If you run a conventional backend, that argument does not apply to you and the comparison reopens on different terms. Which is the point: the right question is not which platform is better, but which of the three questions above is load-bearing for the thing you are building.

References & notes

  1. Official documentation for both platforms on their respective authorization models.
  2. Pricing comparisons change frequently; figures should be taken from each vendor's current pricing page rather than from this article.

Corrections are published inline and dated. Write to us if something here is wrong.

// weekly dispatch

One email. Every Tuesday.

The week's analysis, one tool we actually tested, and one behavioural pattern worth practising. Unsubscribe in one click.

// no spam · no resale · ~4 emails a month