Breaking news! I just launched Coparrot, a no-install and no-configuration mock server for mobile and web developers, on Product Hunt!
Please check it out and give it some love ❤️!

10 Features You Have to Add in Your Mobile App From The Start

December 15, 2020 in articles


There are many challenges in developing a mobile app. Slow build times, ridiculous app rejection, and device fragmentation to name a few. And since it takes a significant amount of time for a feature or bug fixes to reach the phones of your app’s users, it’s better to have the following 10 features (that has nothing to do with the core function of your app) since the very first version.

#1 Crash Tracking and Reporting

You should track crashes since the first release of your app because app crashes are inevitable. Without crash tracking and reporting, how can you know when your app crashes in your users’ phones?

While iOS and Android have built-in crash tracking and reporting, third party solutions like Firebase Crashlytics and Instagbug offer more useful features like centralized reporting for iOS and Android versions of your app, integration with other tools, and many more.

#2 Logging

Most crash tracking solutions include a comprehensive logging system to help you identify the crashes. And you should use it. Or you can also use some popular framework, for example, CocoaLumberJack on iOS.

#3 App Analytics

App analytics can help you understand how users use your app. When you have it in your app, you can find out how many users use a certain feature, how many daily or monthly active users you have, and more. There are tons of third party mobile app analytics services. Some include analytics with crash tracking like Firebase.

#4 App Update Checker

When your app needs to connect to your API server, you need to make sure that the app can “talk” properly with your server. But as time goes by, new features might mean that some API endpoints change or are deprecated.

At this point, you want the users of your app to use the most recent version of the app so that they can connect to the new API. So your app needs to check if there is a new version right after the app is opened by the user. In iOS, you can fetch the metadata of an app from the App Store by calling<insert_your_app_id> URL which returns the metadata in JSON format. For Android, it doesn’t seem easy to get the app version from play store, but please correct me if I’m wrong! Another solution is to use the UpdateManager.

If you’re using React Native, you can use the universal-update-checker library we created in Hyperjump and Firebase Remote Config to keep the latest version of the app.

#5 Localization

Your app may only be available in your own country which has only one national language. But it doesn’t mean everyone who uses your app can speak the language, say, some foreigners who live in your country. You may think to ignore them because there are not many of them, but why would you do that? Where’s your empathy? At the very least, you can add English localization to your app in addition to your native language.

Try to support multiple languages in your app by avoiding hard coding the strings in your code. For example, you should use NSLocalizedString instead of a string literal in iOS app, or Android resource framework in Android.

#6 Accessibility

Accessibility means inclusivity. You might not realize it, but many of users may have physical challenges when using your app. For example, they might have bad eyesights so they couldn’t easily read the content in your app if you use small fonts.

In iOS, you should read the Accessibility feature in the Human Interface Guidelines. In Android, you can read how to build more accessible apps documentation.

At the very least, your app should support the Dynamic Type Size in iOS app, or Autosizing TextViews in Android.

#7 Feature Flagging System

One of the most annoying things in mobile app development, especially in iOS, is the App Store review process. While the review time has been so much better in the last few years, it still takes time to deliver the new features of the app to your users.

To solve this issue, some app developers or companies include the new features in every release even when the features are not ready to be released yet, for example, maybe the server is not ready yet. They hide the features until they’re ready to let users use it by using a feature flagging system.

Say you have a new feature called dark mode. But the marketing department in your company is not ready to promote it yet. You can hide the dark mode feature from the users by reading a certain property from a server. When the marketing department is ready, you can set the property to “enabled” and the app will read it and enable the feature for the users. You can even enable the feature in stages.

As usual, there are many third party services for feature flagging. If you use Firebase, you can use the Firebase Remote Config.

#8 Deeplinks Handler

On the web, every page usually correlates to a URL. Not so in the mobile app. By default, you cannot “jump” to a certain screen in your app from a certain URL. You need to implement the deep linking (called Universal Links in iOS). By having deeplinks handler, you can allow users to share the links which directly goes to the content in your app to their friends.

There are many deeplinking solutions, such as Adjust and, that offer more advance features like analytics.

#9 Application Preferences Management

Every feature has user-configurable settings. For example, should the video in your app be played automatically, should the link that user taps on your app opens in the default browser of in-app browser, and so on. When you let the user customize your app to their preferences, they will appreciate it.

I haven’t found a simple solution to this. I imagine a library where I can just give it a dictionary of configurable settings and it gives me a Settings screen where user can customizes the settings. Let me know if you know something like that.

#10 Continuous Integration and Delivery

This last one is not actually a feature in your app. But I’d like to include it here anyway because a proper continuos integration (CI) and continuous delivery (CD) will save you a lot of time and effort in the long run, especially when you work in a team.

With a CI/CD system, you can deliver updates to your users confidently. It is also not hard nor expensive these days to set up. In Github, you can build and test iOS and Android apps in their virtual machines for free.

Nico Prananta

Articles, drawings, and codes by Nico Prananta, a software developer (iOS and web) and digital artist (for fun!) in Zürich, Switzerland. I'm on Twitter.

RSS Feeds


For Indonesian iOS Developers! Gabung yuk tiap hari Sabtu jam 16:00 WIB di Belajar Bareng Swift Mingguan bareng temen-temen iOS developer di Swift Study Group Indonesia.