Posted by the Firebase team
This is an introduction to a three part blog post series on app quality exploring how to unlock app stability and app performance for the optimal app experience. Find links to the other articles at the end of this blog post.
Stability and performance are the core of every successful app. Fast, crash-free experiences encourage users to stay engaged and drive positive reviews. That’s why keeping a close eye on your app’s stability is crucial for competing in today’s thriving app marketplace.
Users expect the best experience every time they interact with an app. And if bugs or latency issues get in the way, they’ll be quick to find a better option. Research has shown 88% of app users will abandon apps based on bugs and glitches. And within that group, 51% of users said they’d abandon an app completely if they experienced one or more bugs per day.
Not only is quality important to retaining users, but it’s important for attracting new users as well. If a large percentage of users are frustrated and your app store listing is filled with negative feedback about performance issues, you might have trouble acquiring new users.
In fact, 54% of users who left a 1-star review in the Play Store mentioned app stability and bugs.1
It’s no wonder that stability and performance are top areas of focus for developers. Our own Firebase research shows that a top need for developers is to obtain the tools and services that help them debug technical issues, trace issues back to changes in their code, and detect technical performance issues.
A large portion of the pre-launch development for a new app is spent squashing bugs and testing for potential issues. But getting your app ready for launch is just the first step — once it’s out in the world, maintaining your app’s health becomes an ongoing process as you create new features and iterate on previous versions.
It's important to remember that app quality isn’t one-size-fits-all. Depending on the type of app and how you define success, you’ll want to prioritize the factors that are crucial for your business. With Firebase’s customized reporting tools and real-time insights, you can hone in on the metrics that matter most.
For instance, in a productivity app — where users want a clean, simple interface and the ability to use it on the go — slow response time and high error rates will cause many users to drop off. Conversely, users might tolerate a bit of lag between menu screens in a food delivery app. But if it crashes every time they reach the checkout screen, your in-app revenue is sure to suffer.
No matter what type of app you have, here are a few of the most notable quality metrics that successful apps get right:
Monitoring metrics like these can mean the difference between driving downloads and retaining satisfied users versus seeing churn and negative reviews from dissatisfied users.
To stay ahead in such a dynamic app ecosystem, you need to know precisely where stability and performance issues occur in your app. In the next two blog posts of this series, we’ll spotlight two Firebase products that can help you detect crashes in your app and gather actionable insight about your app’s performance from a user’s perspective.
Sources
With Android App Bundles, you can separate your app into a base module and feature modules, allowing certain features of your app to be delivered conditionally or downloaded on demand. Each user of your app will receive only the code they need, when they need it.
As of the 28.0.0 release of the Firebase BoM, you can now use Firebase SDKs in feature modules of your app, not just your base module! This means you can reduce your app size if you're only using Firebase services in some of your modules.
For instance, imagine you have an app which uses Firebase Authentication for login and has an optional "chat with support" feature which uses Firebase Realtime Database. In a monolithic app structure, all of these features would be included in the base app module and delivered at install time:
With the latest version of the Firebase Android SDK, you could use feature modules to separate each feature. The signin feature would still be delivered at install time, since most users need to sign in. However, by moving the "chat with support" module to a feature module configured with on-demand delivery, it would be delivered only when the user needs it:
With this modular structure, your app's initial download size is much smaller. The feature module will defer downloading of not only the Realtime Database SDK, which is about 400kB, but also all the code, strings, resources, and assets needed to build the chat module.
To get started, just add the following dependency to your app's base module:
// base module dependencies { // Note: this library is not yet included in the Firebase BoM implementation 'com.google.firebase:firebase-dynamic-module-support:16.0.0-beta01' }
Then, you can add Firebase dependencies to feature modules and use them as you normally would.
// feature-signin module dependencies { implementation platform('com.google.firebase:firebase-bom:28.0.0') implementation 'com.google.firebase:firebase-auth' } // feature-chat module dependencies { implementation platform('com.google.firebase:firebase-bom:28.0.0') implementation 'com.google.firebase:firebase-database' }
By using a modular architecture, you can reduce the initial download size of your app and progressively enhance it with rich, Firebase-powered features as needed.
To read more about feature modules and how they work with the Firebase Android SDK, check out the documentation:
When we first began working on the Firebase Emulator Suite we dreamed of the day that every backend service in Firebase would have a local emulator. Today we can proudly say we're releasing another great emulator for Firebase Build products: the Cloud Storage for Firebase emulator.
The Cloud Storage for Firebase emulator integrates with the rest of the Firebase Emulator Suite, including the Firebase Auth emulator and the Cloud Functions emulator, unlocking the ability to locally test your app end-to-end like never before.
Just like the other components in the Firebase Emulator Suite, the Cloud Storage for Firebase emulator is part of the Firebase command-line interface which allows you to develop and test your app without connecting to production services.
The Cloud Storage for Firebase emulator supports the Web, Android, iOS and Admin (for Node.js) SDKs so regardless of where your app runs, you can use the new emulator.
The Cloud Storage for Firebase emulator supports all operations from the Web, iOS, and Android SDKs. This includes evaluating security rules, uploading and downloading files, and modifying metadata.
The emulator also supports all the most popular methods in the Firebase Admin SDK. This includes the same operations of uploading and downloading files along with metadata operations. If you're using more advanced Cloud Storage features which aren't supported, let us know. We'll continue to expand functionality over the coming months and your feedback will help us prioritize what to implement.
Make sure you update the Firebase CLI to at least version 9.11.0 and run the following command:
firebase init
Select Cloud Storage and the Emulators, when prompted, pick the Cloud Storage emulator. If this is a first time setup, you'll need to pick each Firebase product you need, such as Cloud Functions, Firestore and Realtime Database rules, as well as Hosting sites. Once everything you need is initialized, run the following command:
firebase emulators:start
This will start the Storage Emulator on localhost:9199 by default. Jump over to our documentation to connect your app to your new emulator!
Now that every Build product in Firebase has a local emulator, you can do the majority of your development entirely locally. We can't wait to see all the new stuff you'll build with your newly unlocked productivity. Make sure to send us a tweet and let us know what you make!
Attendees at this year's virtual Google I/O that visited the Firebase I/O product page or our virtual booth in the Google I/O Adventure experience may have noticed a unicycle-riding robot with an antenna looking very excited to play a drawing game with everyone!
Firebase's mission is to help app developers succeed by offering products and services that developers can rely on throughout their development journey. It meets developers where they are by offering SDKs across various platforms providing web and mobile solutions.
It's a lofty goal and one we wanted to experience from a developers point of view. Introducing Firebase Quickdraw!
Our app started out as a collaborative hackathon project. Building from scratch on Firebase and inspired by Google QuickDraw, we set out to make a simple application that uses AI to understand human drawings.
Once the player starts the game, the app picks a random object from a list. After the player begins drawing the object, an AI bot ( Unaware of that target object ), attempts to guess what the drawing is. The bot either guesses correctly, with the game allocating the player points based on time remaining, or the clock runs out with no points allocated. The game repeats this process for 6 rounds.
When the game is completed the player is awarded a ranking on the daily leaderboard and offered the chance to play again. It's a similar idea to the game "Pictionary" as we all know it, but now with an AI bot!
We used multiple Firebase products to power our app. Here is an architecture diagram of the app’s main functionalities:
Static assets were hosted on Firebase Hosting. The combination of small js bundle size and Hosting’s global CDN gave the app a short initial load time.
We used a deployed TensorFlow model for classification. To learn more about how you can deploy AI models, take a look at the newly launched Google Cloud Vertex AI.
Daily score counts were stored in Cloud Firestore with Cloud Functions acting as the glue to bring everything together. Cloud Functions not only provided our client web app an API surface to send and receive the data needed to run the game, but was also used to run a simple cron job updating the daily scores in a Firestore document.
One of the most exciting moments in our little app’s life was when users began arriving through Google I/O’s website. Developers are very familiar with this moment: Your app is launched and users start trickling in for the very first time. It can be daunting since your app presumably has not been under intense traffic strain before and we wondered if our app’s performance might degrade as a result.
No problem! We used Firebase Performance Monitoring to monitor the web app’s load time and recognition API’s response time as more and more users started playing. This was made possible by the recent launch of real time data processing by Firebase Performance Monitoring.
To develop a better understanding of how players were interacting with the app, we used Google Analytics for Firebase, setting up custom events to track how many players started a game vs how many finished while getting insights into the demographics of our users via the easy to use dashboard view.
Firebase does take away a lot of the hassle associated with creating an app. Each of the products we used saved us a ton of time and headaches while enabling us to focus on providing our users a better experience. Firebase Hosting made it as easy to make assets available globally as running a single command (literally!). Firestore allowed us to save, update and use data in a very friendly and efficient way. Cloud Functions was there every time we needed to send and receive data and orchestrate back-end functionalities. And Firebase Performance Monitoring and Google Analytics for Firebase gave us insights into how users were experiencing the app in real time.
This powerful combination of complementary products made creating Firebase QuickDraw a fun journey for our team, we learnt a lot while gaining a better understanding of the development process our customers experience. We hope the many people who attended I/O and played our game had fun too!
As app developers, you want to focus on building functionality that increases the utility of your app for your users. Here at Firebase, our mission is to help app developers succeed, and our services like Firebase Authentication, Firestore, Performance Monitoring, Analytics and others help you focus on what's relevant for developing your app and advancing your business instead of having to build and run infrastructure and services yourself.
With Firebase Extensions, we took this concept to the next level and made it easy for you to quickly add functionality to your app. Instead of having to implement these features yourself, Firebase Extensions allow you to add pre-built and tested functionality with just a few clicks. On top of that, Firebase Extensions are configurable, so you can easily adapt them to your needs.
Solve business problems using Firebase Extensions
But sometimes, you need even more power and flexibility.
For example, you might need an easy-to-use way to set up a marketing campaign that follows all the best practices and industry standards. Sending emails is not enough - you need a solution that supports double opt-in, streamlined and beautiful templates, and a dashboard that provides detailed insights into your campaign.
Or, you might need a customer messaging solution that makes it easy to reach out to your users directly, no matter where they are, to keep them up-to-date on the status of their urgent delivery. And of course you need a solution that grows with your business and works in new markets and countries you're expanding into and supports the local messaging platforms.
Or - you might want to turn your blog about artisanal coffee into a business with a subscription service that allows you to put some of your content behind a paywall.
Implementing all these features and integrations yourself can be a daunting task, and - let's be honest - wouldn't you rather focus on building the core functionality of your app instead of wasting precious time on building solutions for challenges others have already solved? After all, other people have invested a lot of time and thought into building these services, so no need to reinvent the wheel.
With Firebase Extensions, you can leverage existing solutions solve business problems with integrations from industry leaders such as MessageBird, Algolia, Mailchimp, and Stripe.
At Google I/O this year, we announced the following new Firebase Extensions:
And last year, we launched Run Subscription Payments with Stripe and Send Invoices using Stripe, which make it easier to control access to paid content and send brandable invoices using Stripe's payment system.
All of these Extensions are built and maintained by these companies, and are available as open source on GitHub. This means you can read the source code and learn how they were built, adapt them to your specific needs, and even file feature requests for new functionality. Most of our early access users have told us that the configuration options available in the Extensions and the power and flexibility of our partners' services met most of their requirements.
The road ahead
In the spirit of our mission, we want to bring more Firebase Extensions to the platform to enable you to focus on what matters most to you: implementing the best version of your app to solve real business problems and delight your users.
If you have any suggestions for Firebase Extensions, any features you'd like to see us implement, or any partners you'd like us to bring to the platform, please don't hesitate to reach out to us using our feedback form.
We can't wait to see what you build next with the new Firebase Extensions, and look forward to hearing from you!