Cloud & Infrastructure
Firebase
Google’s app platform, used where speed to market earns it — with the honesty to tell you when you will outgrow it and what that migration costs.
Overview
Firebase is Google’s app-development platform: a suite of managed services that stands in for the backend you would otherwise build yourself. Instead of provisioning servers, wiring up a database, writing authentication from scratch and configuring hosting, you assemble your application from Firebase’s parts. Cloud Firestore and the older Realtime Database give you NoSQL data stores that sync to clients in real time. Firebase Authentication is drop-in sign-in with email, phone, Google, Apple and more. Cloud Functions run your server-side logic as serverless code, Firebase Hosting and Cloud Storage serve your assets and files, Cloud Messaging (FCM) delivers push notifications, and Remote Config, Analytics and Crashlytics round out the operational side. Taken together, it means a small team can ship a working, real-time, multi-platform application without ever standing up a server.
The superpower is speed to market. Firebase’s reason to exist is to collapse the time between an idea and a running app, and for the right project nothing gets you there faster. Real-time sync is the clearest example: Firestore pushes changes to every connected client automatically, so live dashboards, chat, collaborative editing and presence — the features that are fiddly and expensive to build by hand — come almost for free. The tight fit with Flutter and the mature mobile and web SDKs mean a single small team can serve iOS, Android and web from one backend they never had to write, and the generous free tier means you can validate an idea before spending anything at all.
We are blunt about the trade that speed represents, because it comes due later rather than sooner. Firebase buys you velocity now in exchange for vendor lock-in to Google, a NoSQL data model that constrains complex querying, and a pricing model that can rise sharply and unpredictably as you grow. Many successful apps eventually migrate part or all of their backend off Firebase — not because it failed, but because they outgrew the shape it imposes. That is not a reason to avoid it; it is a reason to go in with your eyes open. We will tell you honestly whether Firebase is the right first move for your project, and if it is, we build it so that the eventual move off it — should you need one — is a manageable project rather than a rewrite.
Best for — MVPs, prototypes, and mobile or real-time apps built by small teams that value speed to market over control — and want senior judgement on when they will outgrow it and how to leave cleanly if they do.
Why teams choose Firebase
Speed to market, measured in weeks
Firebase removes the entire backend build from your critical path. Authentication, a real-time database, file storage, hosting and push notifications exist the moment you switch them on, so a small team ships a working, multi-platform product in the time it would otherwise take to stand up the infrastructure. For validating an idea, nothing is faster.
Real-time sync without building it
Firestore and the Realtime Database push changes to every connected client automatically. Live dashboards, chat, collaborative editing and presence — features that are genuinely hard and slow to build by hand — come almost for free, and stay in sync across web and mobile without you writing a line of reconciliation logic.
No servers to run
There is no infrastructure to provision, patch, scale or wake up for at 3am. Google operates the database, auth, functions and hosting, so a team with no backend or DevOps capacity can run a real product. That absorbed operational burden is a substantial saving early, when you least want to be running servers.
Why businesses choose Firebase
- You need a working product fast — an MVP or prototype to put in front of users or investors — and speed to market is worth more to you right now than long-term architectural control.
- Your app is mobile-first or real-time at its core, and Firestore’s automatic client sync turns your hardest features into your quickest ones.
- You have a small team without backend or DevOps capacity, and you would rather Google ran the database, auth and infrastructure than hire or build for it.
- You want senior engineers who will build the fast thing properly, tell you honestly when you are likely to outgrow Firebase, and structure the code so leaving is a manageable project rather than a rewrite.
What we build with Firebase
The capabilities this technology is genuinely strong at — and what we most often build with it.
Cloud Firestore data modelling
Firestore stores data as documents in collections and syncs them to clients in real time, but it is NoSQL with no joins and queries that must be anticipated and indexed. The way you shape collections and documents around your read patterns is the decision that determines both performance and cost — because you pay per document read. We model deliberately against how the app actually queries, rather than mirroring a relational schema that Firestore will punish.
Firebase Authentication
Auth is where teams most often hurt themselves rolling their own, and Firebase’s drop-in service removes that risk — email and password, phone, and federated providers including Google, Apple and others, with session handling and token refresh managed for you. We wire it to your security rules and, where needed, to custom claims, so identity in the client maps correctly onto what each user is actually allowed to touch.
Cloud Functions
Not everything belongs on the client. Cloud Functions run your server-side logic as serverless code — triggered by Firestore changes, auth events, HTTP requests or scheduled jobs — for the work that must be trusted, kept secret or coordinated: payment webhooks, privileged writes, third-party API calls and data aggregation. We use them to keep sensitive logic off the client, mindful of cold starts and of the per-invocation billing they carry.
Security Rules
Firestore, Realtime Database and Cloud Storage are all guarded by security rules — declarative access control written in Firebase’s own language and enforced on Google’s side. They are powerful and unforgiving: a subtle mistake either exposes data to the world or locks legitimate users out. We treat rules as first-class code, test them, and never rely on the client to enforce anything the rules do not.
Cloud Messaging and Remote Config
FCM delivers push notifications to iOS, Android and web from a single service, and Remote Config lets you change app behaviour and roll out features without shipping a new build — useful for staged rollouts, feature flags and quick fixes to a live app. We use both to give a small team operational control over a shipped product that they would otherwise lack.
Hosting, Storage, Analytics and Crashlytics
Firebase Hosting serves your web app over a global CDN, Cloud Storage holds user uploads and files, and Analytics and Crashlytics give you usage insight and crash reporting out of the box. Together they mean the surrounding operational surface of a product — where it is served, where files live, how it is doing and where it breaks — is handled without separate tooling to integrate.
Use cases
MVPs and prototypes
The classic Firebase project: get a working, real product in front of users or investors in weeks rather than months, validate the idea before investing in a bespoke backend, and keep the cost near zero on the free tier while you learn whether the thing has legs.
Real-time and collaborative apps
Chat, live collaboration, presence, live tracking, feeds and dashboards that update instantly — where Firestore’s automatic client sync turns the hardest features to build by hand into the quickest ones, kept consistent across web and mobile with no reconciliation code.
Mobile apps on Flutter or React Native
A single small team serving iOS and Android from one backend they never wrote, with auth, storage, push and a synced database all reachable through mature SDKs — the tight Flutter fit in particular making Firebase a natural default for mobile-first products.
Internal tools and event-driven apps
Line-of-business tools, booking and admin apps, and event-driven workflows where Cloud Functions react to data changes, and where the value is in shipping something useful quickly rather than in owning every layer of the stack.
When Firebase is the right choice
- You are building an MVP or prototype and speed to a working product matters more than anything else. Firebase lets a small team validate an idea in weeks without writing a backend — this is exactly what it is for, and reaching for a bespoke backend here is usually premature.
- Your app is mobile-first or genuinely real-time — chat, live collaboration, presence, live scores, tracking, feeds that update instantly. Firestore’s automatic client sync makes these features fast to build, where hand-rolling websockets and state reconciliation would eat weeks.
- You are a small team without backend capacity, or without the appetite to run servers, databases and auth infrastructure. Firebase absorbs that operational burden so your engineers spend their time on the product rather than on plumbing and on-call.
- You are on Flutter, React Native or a modern web stack and want authentication, storage, push and a database that all speak to your client through mature, well-documented SDKs rather than an API you have to write and maintain yourself.
- Wrong for: complex relational data with many entities and relationships, heavy analytical querying or reporting, cost-sensitive workloads at large scale, or any project where avoiding vendor lock-in is a hard requirement. Firestore is NoSQL and its querying is deliberately limited, its costs are driven by document reads and writes that surprise teams at scale, and everything you build is bound to Google. If those constraints bite, a conventional backend on PostgreSQL will serve you better, and we will say so before you commit.
Firebase: pros and cons
Strengths
- Unmatched speed to market: a small team ships a working, real-time, multi-platform app without building or running a backend, and the generous free tier lets you validate before spending anything.
- Real-time data sync is first-class — Firestore pushes changes to all clients automatically, making live and collaborative features fast to build rather than a project in themselves.
- Drop-in Authentication supports email, phone and a wide range of social and federated providers out of the box, removing one of the most error-prone things a team can build itself.
- A tight, mature fit with Flutter, React Native, iOS, Android and web, backed by well-documented SDKs, plus Cloud Functions, Storage, Hosting, FCM push, Remote Config, Analytics and Crashlytics as one integrated suite.
Trade-offs
- Significant vendor lock-in. Everything you build is bound to Google’s proprietary services and APIs — there is no drop-in replacement for Firestore or Firebase Auth, so leaving means rewriting your data layer, and often more. This is the central trade you are making.
- Costs can rise sharply and unpredictably at scale. Firestore charges per document read, write and delete, and that model surprises teams badly — an inefficient query pattern or a busy real-time listener that reads thousands of documents can turn a modest bill into a large one with no code change on your part.
- The NoSQL data model constrains complex querying. Firestore has no joins, limited aggregation, and queries must be anticipated and indexed up front. Relational data with many entities and relationships fights the model, and heavy analytical or reporting workloads it simply cannot serve well.
- Security rules are powerful but easy to get wrong. All client access is governed by rules you write in Firebase’s own language, and a subtle mistake exposes or locks out data. They are essential, unforgiving, and a common source of both breaches and outages when treated as an afterthought.
Architecture
The load-bearing decision on Firebase is the Firestore data model, and — as with any NoSQL store — it is driven backwards from how the app reads and writes, not from how the data relates. Because there are no joins and you are billed per document read, we design collections and documents around actual query patterns: what to denormalise so a screen loads in one query, what to keep separate to avoid runaway costs on busy listeners, and where a real-time listener is worth its read volume versus a one-off fetch. Getting this right is what keeps a Firebase app both fast and affordable; getting it wrong shows up as a surprising bill and sluggish screens.
Around the data model we draw a clear line between what runs on the client and what must run in Cloud Functions. Anything trusted, secret or privileged — payments, third-party keys, writes a user should not be able to make directly — lives in Functions, guarded so the client cannot bypass it. Security rules enforce access at the data layer as the real boundary, never the UI. And because vendor lock-in is the central trade, we keep your domain logic separated from the Firebase SDK calls where it is practical, so the parts of the system that are genuinely yours are not hopelessly entangled with Google’s APIs — which is what makes an eventual, partial migration off Firebase a project rather than a rewrite.
Performance
For its sweet spot Firebase performs very well without tuning: a document fetched by id is fast, real-time listeners push updates with low latency, and Hosting serves web assets from a global CDN. The performance characteristics are inseparable from the cost characteristics, though, because both are driven by document reads. A query that reads more documents than it needs, or a real-time listener bound to a large, frequently-changing collection, is slow and expensive at the same time — and the two problems have the same fix.
So we tune by shaping the data and the queries: denormalising so common screens read few documents, scoping listeners tightly, paginating rather than pulling whole collections, and adding the composite indexes Firestore requires before a query will run at all. We are honest that Firestore cannot do server-side aggregation or analytical querying the way a relational database can — pushing that workload onto it is both slow and costly, and the right answer is usually to precompute results in Cloud Functions or to keep analytical data somewhere built for it. Good Firebase performance is a product of the data model far more than of any setting.
Security
Security on Firebase lives and dies by two things: security rules and where you put trusted logic. Firestore, the Realtime Database and Cloud Storage are all accessed directly from the client, so the rules you write are the actual boundary between a user and your data — there is no server in between unless you put one there with Cloud Functions. Rules are powerful and completely unforgiving: a subtle error either exposes data publicly or locks legitimate users out, and getting them right is one of the most important and most commonly botched parts of any Firebase build. We treat them as first-class, tested code, not an afterthought bolted on before launch.
Beyond rules, the discipline is to trust the client with nothing that matters. Authentication is handled by Firebase Auth, but authorisation — what an authenticated user may actually do — is enforced in rules and, for privileged operations, in Cloud Functions where the client cannot reach the logic or the secrets. API keys in a Firebase web app are not secrets and we do not treat them as such; the real protection is the rules and the Functions behind them. Sensitive operations, third-party credentials and any write a user should not be able to forge live server-side, so the security of the app never depends on the client behaving.
Scalability
Firebase scales the infrastructure for you — Firestore, Auth, Functions and Hosting absorb growth in traffic and users without you provisioning or sharding anything, which is a genuine strength and a large part of why small teams choose it. What does not scale automatically is your bill or your data model. The per-read, per-write, per-delete pricing that is negligible at prototype scale grows in direct proportion to usage, and an inefficient access pattern that nobody noticed at a thousand users becomes a serious cost at a million. Scaling on Firebase is as much a cost-engineering exercise as a technical one.
The harder ceiling is the data model itself. Firestore’s NoSQL shape and limited querying, which cost you little early, constrain you more as the product and its data grow more complex — relational relationships, cross-entity reporting and heavy analytics push against the grain of the platform. This is why many successful apps eventually migrate part or all of their backend off Firebase: not a failure, but the point at which they outgrew the shape it imposes. We plan for that honestly from the start, keeping domain logic loosely coupled to the SDK so that when you reach that point — if you do — moving the affected part onto a conventional backend is a bounded, deliberate project rather than a forced rewrite under pressure.
Firebase integrations & ecosystem
The technologies we most often pair with it — each links to how we work with it.
How we work
We start by pressure-testing whether Firebase is the right first move — and we will say if it is not, because building a complex, relational, analytics-heavy product on Firestore is the mistake that hurts most later. When Firebase does fit, we lead with the thing it is best at: getting a working, real-time, multi-platform product in front of users fast. The early work is the Firestore data model and the security rules, because those two decisions shape everything downstream — performance, cost and safety all trace back to them — and both are far cheaper to get right at the start than to unpick once the app is live and data has accumulated.
From there we build in thin vertical slices, each shippable, with security rules written and tested alongside the feature rather than deferred, and trusted logic pushed into Cloud Functions from the outset rather than left dangerously on the client. Throughout, we keep your domain logic decoupled from the Firebase SDK where it is practical — not because we assume you will leave, but because the honest reality is that some Firebase apps outgrow the platform, and the ones that decoupled early face a manageable migration rather than a rewrite. The engineers who design the data model and rules are the ones who ship the features and watch the bill, which is what operating what we build means here.
The service behind it
Delivered throughCloud EngineeringWhat we build with Firebase
The disciplines this technology most often shows up in — from a first build to taking over and stabilising an existing one.
How we deliver
- 01
Discover
We map the system, the constraints and the business it serves — including the parts nobody documented.
Architecture brief
- 02
Architect
Decisions get made, written down and defended before a line of production code exists.
Decision records
- 03
Build
Short cycles against working software. You see progress in the product, not in a status deck.
Shipping increments
- 04
Operate
Monitoring, incident response and iteration. The system is alive, so the engagement is too.
Runbooks & SLOs
Industries we use Firebase in
Domain knowledge changes what gets built. A few of the sectors we know before the first meeting.
Also in Cloud & Infrastructure
Why teams choose us for Firebase
Senior engineers only
Firebase rewards a good data model and correct security rules and punishes guesswork on both — the difference between an app that stays fast and affordable and one that surprises you with its bill is judgement earned on previous builds. There are no juniors learning security rules on your production data.
We operate what we build
We ship the apps we design and we watch the bill they generate, so we optimise for months of real operation, not a demo: read patterns shaped to control cost, security rules tested rather than hoped, and trusted logic kept off the client from the start.
Honest about lock-in and the exit
We will tell you plainly that Firebase means lock-in to Google and that some apps outgrow it, and we build so leaving is a project rather than a rewrite — domain logic decoupled from the SDK where it is practical, because we would rather you keep the option than discover you have lost it.
Honest about when not to use Firebase
If your data is relational, your querying analytical, or your scale cost-sensitive, we will tell you a conventional backend on PostgreSQL is the better call before you commit — not after a year of fighting Firestore’s grain and a bill that keeps climbing.
Typical timeline
- 01
Discovery and data modelling
One to two weeks confirming Firebase is the right fit, then designing the Firestore data model and security rules against your real read, write and access patterns before code and cost accumulate.
- 02
First vertical slice
Two to three weeks delivering one real capability end to end — data, auth, rules and, where relevant, real-time sync — to prove the model against real usage rather than a diagram.
- 03
Iterative build
Feature-by-feature delivery in short cycles, each shippable, with security rules tested and trusted logic placed in Cloud Functions as we go rather than bolted on at the end.
- 04
Hardening and handover
A security-rules and access review, a cost and query-pattern audit to catch expensive reads before they bite, and documentation — including where the code is decoupled from the SDK — so your team can own it and, if ever needed, migrate cleanly.
How pricing works
- Fixed-scope builds for well-defined work — an MVP or prototype, a real-time feature, or a mobile app on Flutter or React Native — quoted once we understand the data model, the auth requirements and the real-time surface.
- Monthly senior engagement for ongoing product work where the app evolves and you want continuity from the people who designed the data model and wrote the security rules.
- Focused audits and rescues for existing Firebase apps — a surprising bill from inefficient read patterns, security rules that expose or lock out data, or a product that has outgrown Firestore and needs a planned migration off part or all of the backend — priced by assessment.
Hire Firebase engineers
Need Firebase capacity on your own team? We embed named senior engineers into your existing team — reporting to your leads, working in your rituals — so you add capacity without a hiring cycle.
Hire Firebase engineersCommon questions
Is Firebase a good choice for a production app or only prototypes?
Both, with a caveat. Plenty of successful production apps run on Firebase, particularly mobile-first and real-time ones, and its managed infrastructure genuinely scales the serving side for you. The honest caveat is that Firebase suits some production apps for their whole life and others only up to a point — as data grows more relational, querying more analytical, or scale more cost-sensitive, many apps eventually migrate part or all of their backend off it. That is not a failure of Firebase; it is outgrowing the shape it imposes. We build so that, if you reach that point, the move is a bounded project rather than a rewrite.
Why do Firebase costs sometimes rise unexpectedly?
Because Firestore charges per document read, write and delete, and that model surprises teams who are used to paying for servers or storage rather than operations. A query that reads more documents than it needs, a real-time listener bound to a large, frequently-changing collection, or a screen that fetches a whole collection instead of a page — none of these change your code, but all of them multiply your reads and therefore your bill as usage grows. The fix is almost always in the data model: denormalising so screens read fewer documents, scoping listeners tightly, and paginating. We design for this from the start and audit for it in existing apps.
How hard is it to migrate off Firebase later?
Harder than teams expect, because there is no drop-in replacement for Firestore or Firebase Auth — leaving means rewriting your data layer and re-homing authentication, and often reworking real-time features that Firebase gave you for free. How painful it is depends almost entirely on how the app was built: code where domain logic is tangled directly into SDK calls throughout is a rewrite, while code that kept that logic decoupled behind a boundary is a bounded migration. We build with that boundary where it is practical, precisely because some Firebase apps do outgrow the platform and we would rather you kept the option to leave.
Can Firebase handle relational data with lots of relationships?
Not well, and this is the most common way teams choose wrong. Firestore is NoSQL — no joins, limited aggregation, and queries you must anticipate and index up front. Data with many entities and stable relationships between them, or workloads that need heavy reporting and analytics across those entities, fight the model: you end up denormalising heavily, writing application code to stitch data together, and paying in reads for what a relational join would do cheaply. If your data is genuinely relational, a conventional backend on PostgreSQL will serve you far better, and we will tell you so before you commit rather than after.
How do security rules work, and why do they matter so much?
Because Firestore, the Realtime Database and Cloud Storage are accessed directly from the client, security rules are the actual boundary between a user and your data — there is no server sitting in front unless you add one with Cloud Functions. Rules are declarative access control written in Firebase’s own language and enforced on Google’s side, and they are unforgiving: a subtle mistake either exposes data to the world or locks legitimate users out. That is why they are one of the most important parts of any Firebase build and one of the most commonly botched. We treat rules as tested, first-class code, and we never rely on the client to enforce anything the rules do not.
Building on Firebase?
A technical conversation with the engineers who would do the work. If we are not the right fit, we will say so on the call.