Mobile App Development Challenges and High-Level Solutions
Two billion people — 51% of the global population — access the internet only through their smartphones. By 2025, that number is, expected to jump to 72.5%.
The numbers are promising, and the future growth looks marvellous for the mobile domain.
Businesses and their technical teams/partners give lots of importance to their mobile presence but not equal importance to the mobile application execution. Everyone feels it is very easy, simple, and quick to do it.
Why I might be saying this?
When the business & technical teams collaborate on the system design they talk about scalability, distributed system, availability, reliability, etc. for only the backend system.
However, they give less weightage or no importance to mobile development.
The businesses and the technical partner managers, product owners, and non-native mobile engineers (including the backend/frontend developer of the same systems) assume the mobile app is a simple and small piece that requires less engineering effort to develop and run. They always raise the question of the development time “Why it takes so long? It’s only 2–3 screens.”
The mobile application development is taking place at startups to well-organized teams with the help of junior teams — less experience teams, experienced teams, or a mix of both.
Based on the experience by the organization, the technical team around the awareness of the true value of the mobile application the importance given to the mobile application varies to a great extent.
Look at the successful businesses and their major presence on mobile. Like Facebook, Twitter, Amazon, etc. It’s not because they have an app, but they have a quality app, in terms of features, performance, lesser bugs, continuous updates for improvement and so on.
They have understood the importance of mobile presence and paid lots of attention while building their mobile apps.
On another side, many applications are getting rewritten, business is changing their technical partners, they are finding difficulties to add the new features into the existing application, they are scraping their old application as it is getting difficult to support, their development team is not happy with legacy code as its breaking now and then as soon as they do some changes and whatnot.
The above mentioned are failures are an aftereffect of the non-importance given to the mobile application by the businesses, but it is a pure failure of the technical teams which costing the business, In-terms of money, time, and unhappy userbase, too much time to roll out new features useful to the users, etc.
After a lot of curses to the people for not giving importance to the mobile application. Let me
Let me tell you, what all challenges they have to concord to develop any application.
Mobile application developers face a lot of difficulties, starting from selecting the platform, till deliver the great mobile application at scale.
What is scale means in the mobile application development lifecycle?
👉 Suitable development platform/framework (Native, Cross, Hybrid, Progressive)
👉 The large set of devices
👉 Various device families
👉 User consent
👉 Performance
👉 Reliability
👉 Availability
👉 Continuous feature addition and releases
We will go through the high-level challenges which will help the businesses and the non-technical teams to know, what are the possible reasons it needs more attention, time, and thoughtfulness for developing a quality mobile application.
This will help technical teams as well to know, justify, and possibly open their mind to understand the complexity involved in mobile development and may help them to pay a little more attention to a couple of areas.
Read more @ What is Mobile Application Development?
In the below section we will try to go through the identified high-level categories and respective challenges.
A. Suitable Development Framework
There are four major development approaches when building mobile applications.
- Native Mobile Applications
- Cross-Platform Native Mobile Applications
- Hybrid Mobile Applications
- Progressive Web Applications
🛑 High-level challenges,
- Selecting the most suitable development framework
2. The native framework is more suitable then,
a. Multiple codebases.
b. Identical yet duplicate code for use cases, business logic, model code, networking, error handling, logging, analytical tracking, etc.
c. Maintenance
d. Logical bugs/issues need to fix at multiple places.
e. Understanding of the different platform developers might different which leads to requirement-specific bugs.
🪀 Possible Solutions,
1. Each of these approaches for developing mobile applications has its own set of advantages and disadvantages. Points to consider while choosing the right development approach for their projects, developers consider,
a. Platforms to support. i.e., iOS and Android
b. Targeted users
c. Desired experience
d. Computing resources
e. Native features required by the app
f. Budgets
g. Time targets
h. Resources available to support the app
2. Guide to Cross-platform Mobile App Development Tools
3. Native Multiple codebase issues can be resolve with,
a. Kotlin Multiplatform Mobile
B. Device fragmentation with various OS versions
Continuous releases of the new devices are a problem for all the platforms. Devices came with various screen sizes and limited yet different hardware capabilities, on top of that, OEMs are inventing several ways to add pains to the developer’s life by having foldable devices, notch displays. Just kidding .
Platforms keep releasing new OS versions with major feature addition and minor improvement. Which are direct ends up having a large set of added APIs or improvement in the APIs or changes in the existing APIs.
🛑 High-level challenges,
1. There are many different OS versions and devices out there in the wild. Supporting more than just the latest is often necessary since not all users upgrade immediately.
2. Supporting new OS supported features in the application and often are not backward compatible.
3. Adding the features in the new app version keeping older OS feature non-availability in mind and seamlessly without breaking application workflow.
4. Support multiple OS versions
🪀 Possible Solutions,
Use the checks for API availability help support multiple OS version to support new API without compromising older OS support.
o Android Device Compatibility Overview
C. Device Umbrella
Mobile application development is not just restricting to mobile phones only. It got extend with tablets, smartwatches, TVs and all these app developments come under the mobile segment. Supporting these devices is not mandatory, yet important for the user and indirectly for businesses.
🛑 High-level challenges,
1. All device families have completely different screen sizes and usability is completely different.
2. The business logic, networking, database handling, and many other things will remain the same, however, use cases might differ. Hence, implementing the code loosely coupled, keeping reusability in mind and some conditional logical implementation as per device family need to handle with a little caution.
3. Continuity/handoff implementation for seamless to move between devices. (Specifically, Apple ecosystem)
🪀 Possible Solutions,
Writing loosely coupled, modular, micro feature oriented modules, following SOA, etc. will help. You can start with,
- SOLID Design Principles using Swift
- SOLID Design Principles using Kotlin
D. Deciding minimum version to support
It is an important decision in a developer’s job and not something you can do without reasoning. The minimum version is the lowest version supported by the app. Users running an older version will not be able to download your app from the stores.
🛑 High-level challenges,
1. How to decide the minimum version support to run your application? Of course, Business wants to run the application on all the available devices. Which is impossible.
2. Business decision on whether supporting an additional 3%-4% devices is worth it.
3. Is it worth supporting 100% of devices? Supporting all OS versions is a resource-consuming affair in terms of time and cost.
4. Supporting older OS versions will put a couple of restrictions while supporting advanced features released with newer OS versions.
5. Development and testing efforts increase exponentially.
6. Availability of the older devices with the version.
🪀 Possible Solutions,
- Keep your eye on iOS and iPadOS Usage as measure by the Apple Store till this month.
- Strategy for Apple ecosystem: Current OS minus 2 gives great user coverage.
- Strategy for Android ecosystem: Consider the stats on the Dashboards that will help you to know the potential audience.
- Select minimum SDK version for the application to run your application maximum percentage of devices. Check-in Android Studio’s Create New Project wizard.
NOTE: In the case of, existing applications — Your dropping support for older OS/devices does not mean older devices cannot use the application. If they already installed your app it will continue to work for them.
E. User Consent
The privacy of the user has always been in doubt. Irrespective of mobile iOS, apps ask for access to user personal information like contacts, photos, messages, location, Bluetooth, etc. In an instant, the user decides your fate.
🛑 High-level challenges,
1. Unclear/less description of the need for permission can lead users to press the “Don’t Allow”/ “Deny” button.
2. Partial permission leads to applications to manage various flows.
3. Users can opt-out/change the permission at any time, even without launching the application.
4. Platforms are making it more user-oriented. Mobile app developer needs to manage/handle/support the user consent as per the platform expectation else high chances of application face rejection.
5. Continuous monitoring of the platform rules and inline the application flow with it.
🪀 Possible Solutions,
1. Ability to describe usage in a line to state your case.
2. Transparency and detailing of app permission usage to help users to understand the need and motivate to give the permission.
a. 3 Design Considerations for Effective Mobile-App Permission Requests
3. The application needs to handle permission base functionality in the right manner.
4. Platform Specific Permissions
Refer:
- Android
- iOS
F. Deep linking (Universal/App links)
Universal/App links allow your users to intelligently follow links to content in your app or your website. It gives your users the most integrated mobile and desktop experience, even when your app is not installed on their device.
🛑 High-level challenges,
1. Complex Implementation
2. Complex to test (QA)
3. Universal Links can be easily broken and/or disabled. If a Universal Link is broken, the operating system will redirect the user to the website URL until the app is reset or upgraded.
4. If the Universal Link is pasted into a browser URL field, it will not function properly.
🪀 Possible Solutions,
1. Keep all universal links handy, in Notes, or shared over email.
2. 3rd party services Branch.io and Firebase Dynamic Links
Read for more
G. Apps are dependent on the server
Most of the applications have a dependency on the backend servers for the information and they rely on REST APIs.
🛑 High-level challenges,
1. Most of the time REST APIs are not mobile-friendly.
2. Over fetching
a. Unnecessary data comes as a response which eats up the bandwidth.
b. Sort out and parse only needed information
c. Data is huge then during parsing as it loaded into the memory, which may lead to the crash due to the limited memory.
3. Under fetching — Multiple round trips to fetch related information/resources
4. Tight coupling with backend service URL schemes. Changes in URL, path, schema, endpoint, etc. force the demand of an updated version of the mobile client to be upload to respective stores.
🪀 Possible Solutions,
This needs either change at the server side and make the mobile friendly API or use,
1. GraphQL
2. Remote Config
H. Network Management
Internet connectivity is intermittent and needs to be handled gracefully irrespective of local cache/offline support.
🛑 High-level challenges,
1. Notifying a user on network availability status without interrupting the workflow.
2. Retry Strategy — On network call failure
🪀 Possible Solutions,
1. Come up with the set of requests who needs retry
2. Never retry if a network is down
3. Differentiate and handle the network slowness against the internal server error
4. Test all network conditions with Network Link Conditioner for iOS or the network speed capability on Android emulators.
I. Offline Support
One of the key advantages of developing a mobile application is, it allows users to use it even without connectivity or intermittent network. It improves the usability and availability of the app. Synchronize with the server as soon as connectivity is available.
🛑 High-level challenges,
1. Need answers, for below question before development,
a. Identifying what features, and capabilities should be available?
b. What to store and how much to store?
c. What conditions will trigger synchronization?
2. What about the security of the data at rest?
3. The physical size of the device storage limits.
4. Data sync challenges — Mobile First or Server First
5. Bi-directional (2-ways) synchronization is the hardest.
6. Implementing 2-way sync from scratch will be a separate project altogether.
Think of sync or all you sync will sink. — someone
🪀 Possible Solutions,
Most apps are connected to a backend-services, databases which are not defined or the same for all the apps. Server and client must conform to an approach to provide the 2-way synchronization. Else depends on extra service that costs a lot of money.
3. Realm’s Mobile Platform and Realm Object Server
4. Zumero
5. AWS AppSync
Read,
- Server-Client-Sync using Couchbase
- Mobile Database Bi-Directional Synchronization with a REST API
Additional reading, Offline Mobile App Architectures for iOS and Android Apps
J. Dependency Management
During the development of mobile application on both the platform, end up using at least couple of 3rdparty SDK/Framework/Libraries.
These dependencies need to manage and needs to manage with tools.
- Android Studio has uses Maven and Gradle as its dependency management. They are full-fledged build tools with a rich set of the plugin.
- Apple has, opensource CocoaPods, Carthage, and Swift Package Manager. There are pros and cons to each of the three primary options.
🛑 High-level challenges,
1. Integration level of efforts
2. Integration flexibility/complexity
3. Level efforts for versioning and maintaining dependencies
4. Build time impact if not solved the problem
5. Integration with Continuous Integration servers
6. Automated vs Manual setup
7. Availability of the frameworks with the selected dependency management tools
8. What happens if a repo is deleted?
9. Support for Static Library vs Dynamic Framework with the related pros and cons
10. Selection based on the Static vs Dynamic choices
Read, Choosing the Right iOS Dependency Manager
🪀 Possible Solutions,
1. Avoid adding dependencies to your project
2. Have a copy of the pod in your project
3. XCFramework to replace Fat and universal framework
4. Prefer Swift Package Manager or Carthage over CocoaPods subject to the requirement
K. App Size
The app bundle is consisting of many things like binary, multiple sets of assets to support different screen resolutions, videos, audios, fonts, HTML pages, etc. Each one of them contributes to increasing the application size.
The maximum App Size allowed on the respective stores is 4 GB. That is a good size and looks like a should not be an issue in most of the apps. However, the maximum app download size limit set for cellular connections needs to keep in mind.
Smaller the size is usually better as the user can quickly download, glance at it.
🛑 High-level challenges,
1. Users most probably, try an avoid download as the app size is big. Users might search for an alternative. They might prefer to go home and connect to Wi-Fi and download afterward and in the meantime, they might forget
2. A good number of users are still using 32GB or 64GB storage devices which will see the ‘insufficient memory warning’ during download and not download the app.
End up losing the business. Big loss.
🪀 Possible Solutions,
1. Many customized solutions like optimize the assets, remove unused assets, use vector assets, etc.
- How to clean up unused assets in Xcode
- Android Gradle — Shrink your app
2. On top of that official ways to support and handle the large app size as mentioned below,
3. Think of having lighter apps to know the user’s worth of your apps.
a. App Clips
b. Instant Apps
L. Performance
Performance is the key pillar for the success of the mobile application. There are a couple of major performance issues you can’t ignore.
1. Launch time
2. High Latency
3. Slow response time
4. Crash event
🛑 High-level challenges,
1. Difficult to find out the issues manually
2. Might work well in your environment but not in the real environment reason,
a. Surrounding conditions
b. Different hardware/devices
c. Old vs new devices
d. OS version
e. Geographical conditions, etc.
3. How to confirm the issue is resolved? and continuous eye on every version release? Nearly impossible with manual efforts.
🪀 Possible Solutions,
Integration of Application Performance Monitoring automatic tools helps to track key metrics continuously and track the app’s performance and notify regarding the issues. It also captures environmental details and uses AI to predict forecast issues a user might see well in advance.
The APM tools do not restrict to the above-mentioned issues. It captures lots of other important areas like rendering, crash, battery consumptions, logical execution speed, etc.
1. Firebase Performance Monitoring
2. AppDynamics
3. Dynatrace
4. Instabug
M. No Looking Back
The mobile applications are distributed as binaries by a separate system popularly known as Apple AppStore/Google Play Store and not deployed in your system.
Once the application is released on the store and any major/critical issue occurs users must bear with it till the time the new app version is available on the respective fixes on the stores.
In simple words, Hard to Revert to the earlier stable version.
🛑 High-level challenges,
1. User controls the app updates: User has full rights to opt-in or opt-out from the automatic updates for installed apps on the devices from the AppStore/PlayStore. Opt-in to automatic updates users, no worries in case of major blocker in the latest releases. What if a user has an opt-out from auto-update?
2. App Review delays the app update availability
This is specific to iOS, where previously it took more than a week to get your application available to the end-users. This timeframe was reduced to a day or two. However, it is still not available instantly. In addition to that, what if your application gets fail the approval process? The entire cycle will start again.
🪀 Possible Solutions,
1. Force updates: When an emergency arises, it can be beneficial to have a mechanism in place to gently transition users to the latest app update. Know more about Android and iOSforce update functionality.
2. Remote Config: Backend-driven service to change the behavior of the app without publishing an app update. The new features will be controlled with remote config flags. Disable the released feature with a single config change on the backend. Refer Firebase Remote Config
3. CodePush: In the case, of Apache Cordova and React Native you can deploy features without distributing the app to the store using the service of Visual Studio App Center named CodePush.
4. Phased Rollouts: A phased release, or rollout, is a process where an app update is released to customers in stages instead of all at once.
How to use AppStore Phased Releases? Read Me
How to use Google PlayStore Phased Releases? Read Me
5. Test well: Know every permutation and combination of the application flow. Test all the happy paths and sad paths in all the possible environments, conditions, load, and whatnot.
PLEASE DON’T ASK FOR HELP :) YOU ARE YOUR OWN.
N. Comply with Privacy Policies by Apple and Google
Developing or publishing a mobile app? Your mobile app almost certainly requires a Privacy Policy.
🛑 High-level challenges,
1. Apple and Google require all developers to publish a Privacy Policy
🪀 Possible Solutions,
Sample Mobile App Privacy Policy Template
This list just not stop here. It has many more factors to be added…
All the above-mentioned points play a crucial role for success on the mobile application and need a great amount of attention whether your application is the existing app, in-progress app, or planning to build a new application from scratch.
This consumes resources in terms of time and effort and little cost but the benefits which you will get by understanding and paying attention to these will be a great benefit in the longer run.
Big shout out to Gergely Orosz for the challenges of the mobile application blog which inspired me to write something like this.