Google Firebase: Revisited
I haven’t been a fan of Google Firebase for quite some time. We used it for one project here at Don’t Panic Labs, and it was a pain to work with.
The pain comes from three main gripes:
- It didn’t have a great local development story
- The technologies in Firebase feel somewhat odd to interact with
- It never really felt fully baked; it felt more like it was still in beta. The documentation was light, and the ability to troubleshoot problems was iffy.
It just didn’t feel production-ready – at least not for any kind of serious production.
But I know that products evolve, and I am willing to give tools and technologies another look – just to see if anyone is positively moving the needle. Recently I decided to revisit Google Firebase, and I was surprised.
Capable but Not Comprehensive
Google Firebase is a cloud development platform. While Firebase is geared toward everyone, it feels like it’s more focused on the small startup developer. Google’s platform is equipped so developers can accomplish pretty much whatever, although it’s not nearly as deep as Microsoft (Azure) or Amazon (AWS).
Fewer options can be both a good thing and a bad thing. In most cases, I believe that having fewer options is better. AWS and Azure offer so many ways to achieve the same outcome that it can be paralyzing for less experienced developers.
But having fewer options can be limiting in some situations. For example, if you want to use a Google Firebase Function, you must write them in JavaScript or TypeScript. Azure / AWS both allow you to program in your language of choice.
Core Features
Google Firebase does provide enough options to build many applications. Google Firebase Core Features include:
- Authentication
- Storage
- Databases (Firestore and Realtime)
- Hosting
- Functions (code running in the cloud)
Firebase provides many other features too, but my list above covers the most common application requirements.
Firebase Authentication does what you would look for in an authentication service. It is super easy to configure and super easy to work with. It reminds me of AWS Cognito. Both AWS and Firebase kick Microsoft’s butt here; Azure B2C is the most difficult of the three.
Firebase Storage is adequate. There’s nothing fancy about it, but it works. Much like Firestore, you must create rules for access, which is something I find particularly tricky. Maybe it is my lack of familiarity with their rule syntax, but I struggle to make sure my rules are correct.
The database options in Firebase both leave a lot to be desired. They are both lightweight no-SQL stores, and I find the query syntax to be a bit confusing. I can figure it out, but it never feels entirely correct.
Firebase Hosting does just what it says; it hosts your web application. This service works pretty well, and it’s a great way to host your Angular SPA.
Firebase Functions allow you to have real code running in the cloud. This seems like something that must exist, but you must realize there is a mindset difference with Firebase. Firebase tries to get you to run queries directly against Firestore from your client application. Yep, you are embedding queries into your web page.
This approach feels very hobbyist or old fashioned. It may remind Web Form developers of many Microsoft options around 2005 when database queries were written directly on the web page. This is not a good strategy when building maintainable systems. But, with Firebase Functions you can hide your data access behind a Function running in the cloud. It isn’t the direction Firebase pushes you, but it is doable.
A Few New Surprises
But what surprised me about Firebase? Two things.
First, the local development story is drastically improved. My original experience with Firebase almost required you to run parts of it in the cloud. There were local emulators for some things, but it didn’t feel fleshed out. The current Firebase emulators are pretty good. And there is even a single UI for interacting with the emulators.
The second is the build pipeline. The first step in almost any software project is setting up a good build pipeline to push changes to an environment. With Firebase, this used to be a manual command line “firebase deploy” scenario. Now Firebase makes it super easy to deploy your changes from a branch in GitHub. The build setup with GitHub is pretty much handled for you; it just works.
While I haven’t done enough development with Firebase to give it a strong recommendation, it is most certainly a more robust platform than the last time I looked at it.