Writing, testing, and deploying applications continuously is challenging no matter which type of app you’re building. But it can be especially difficult for mobile developers, due to the unique characteristics of the mobile ecosystem.
Here’s a look at the top seven bottlenecks that mobile developers are likely to face. All of these challenges can be overcome. But ensuring that they don’t hamper your team’s ability to deliver new mobile app releases early and often requires planning ahead to work around the special roadblocks that often arise in mobile development.
Device Fragmentation
One of the greatest challenges that mobile developers face is the fact that there are so many different types of mobile hardware devices out there.
As of 2015, there were upwards of 24,000 different Android devices on the market. The number has surely increased since then. When you factor in non-Android devices, it becomes greater still.
This creates a potential bottleneck for mobile developers because they have to ensure that their applications run on each and every device their customers could potentially use. Testing for each device and ensuring a smooth deployment process on it requires tremendous effort, especially given that the processor type, screen size, input features, and other hardware specifications of mobile devices can vary greatly from one device to another.
There’s no simple solution to this challenge, but there are some ways to mitigate it. One is to collect data about which devices your target users own, then focus on supporting those devices by writing automated tests tailored to them.
Another is to supply the devices themselves in addition to the software, which greatly reduces the hardware variables your team has to worry about. This approach won’t work in all circumstances, of course, but it makes sense in situations where mobile devices and software are being deployed for a specific purpose, such as use by a company’s own employees – as opposed to contexts where developers build apps for the public at large.
OS Fragmentation
The ecosystem of mobile operating systems is almost as fragmented as the hardware ecosystem. Android has seen sixteen major versions since it first debuted in 2009, as well as a variety of point releases. The release history of iOS is just as complex. On top of this, there is a collection of “alternative” mobile operating systems that, although much less common, may still be running on devices that you need to support.
The diversity of mobile operating systems means that developers need to contend with an array of variables at the software level of the devices they support.
Here again, figuring out which operating system environments and configurations your target users are running, then focusing on those setups, will reduce the challenge somewhat. But, when possible, you can go further by supplying devices that are preconfigured with a specific operating system environment – including, if desired, a custom version of Android or other mobile OS that will be easier to support than a generic release. By controlling the operating system, you greatly reduce the number of tests you’ll need to run, the number of OS-level bugs you’ll need to work around, and the general unpredictability of the mobile software development process.
Turning Legacy Apps into Mobile Apps
In a perfect world, every mobile app you deploy would be written from scratch and tailored for the environment that it needs to run on.
In the real world, mobile developers are sometimes tasked with migrating a legacy desktop app to mobile devices. There may not be enough resources to rebuild the app from scratch, or management may just be convinced that porting rather than rebuilding is the better approach.
Either way, going from legacy to mobile is likely to slow down your development process. You’ll probably need to rebuild the app UI to work on a touch-based mobile device. You may need to rework other aspects of the user experience, too. You’ll probably need to integrate support for new types of hardware (like fingerprint scanners) into the app. And you’ll most likely have to rewrite at least some of the code to support a new type of processor and a new operating system.
There is no simple solution to these challenges, and they all require hard work. However, the task of turning a legacy app into a mobile app is made easier by controlling the hardware and operating system configurations of the devices that you need to support. If you can reduce the number of variables that you have to contend with at those levels, it becomes easier to figure out how to handle UI and UX configuration, as well as the runtime architecture of the app.
Lack of CI/CD Support for Mobile Development
Deploying any type of application – whether legacy or not – to mobile environments is further complicated by the fact that most Continuous Integration/Continuous Delivery (CI/CD) platforms (which help to automate code integration, testing, and deployment) aren’t designed with mobile in mind. They’re designed first and foremost with the assumption that you’ll be deploying SaaS apps to a cloud-based environment, or possibly to an on-prem data center.
That approach may work well enough for mobile developers whose apps are Web-based. But if you’re deploying a native app that runs locally on the device, CI/CD suites that target the cloud aren’t as useful.
You can certainly do CI/CD for mobile. But it requires setting up extra tooling or extending CI/CD platforms beyond their core, out-of-the-box functionality.
Monitoring Mobile Apps and Devices
Deploying an application is only half the battle. Monitoring it to ensure that it runs as required for your end-users is equally important.
Unfortunately, application monitoring for mobile apps can be challenging, especially when dealing with apps that run locally directly on devices. In that case, you can’t collect all of the app monitoring data from a central server environment. You need a way to pull data from all of the mobile devices in your network and aggregate it in a place where your operations team can view and analyze it.
To do this, you need to bake device management and monitoring into your overall mobile development strategy. In other words, you need to think from the beginning of the development process about how you’ll collect and analyze mobile application and device data. You can’t deploy your app and just assume that you’ll figure out a way to monitor it later.
Managing Software Updates
Planning a mobile device management and monitoring strategy is also important for ensuring that you can push out mobile software updates efficiently and quickly.
Although modern mobile operating systems are good at automatically updating application updates that they know about, it’s challenging to push updates to all of the devices in your network if you don’t know where they are, when they last connected, or which operating system and hardware configurations they have.
By planning ahead for device management, it becomes faster and easier to ensure that application updates are deployed rapidly whenever your team needs to roll one out.
Short Device Lifecycles
A final pain-point for mobile developers is short device lifecycles. Consumer mobile devices are replaced about every three years. You may be able to stretch device lifecycles a bit longer if you manage your users’ devices as well as their software (because you can choose devices that are more durable than average), but you’re still faced with the necessity of having to upgrade mobile devices sooner or later as their components wear out, or as their hardware proves insufficient for the increasingly complex software you need them to run.
Decommissioning devices creates a headache for developers, who need to ensure that their app runs on whichever new devices will replace the old ones. They also have to worry about moving user and configuration data over.
Here again, managing devices as part of your overall application development strategy greatly simplifies the challenges associated with mobile software development. The more control you have over devices, and the more you plan ahead for device updates, the smoother the transition will be.
Conclusion
From device and OS fragmentation to the complexity of monitoring native mobile apps, mobile development poses some special challenges. The best way to solve them is to devise a holistic mobile development strategy that gives you as much control as possible over the hardware and software configurations of your users, which in turn reduces the variables and guesswork required to build, deploy, and maintain mobile apps.
Chris Tozzi has worked as a journalist and Linux systems administrator. He has particular interests in open source, agile infrastructure, and networking. He is Senior Editor of content and a DevOps Analyst at Fixate IO. His latest book, For Fun and Profit: A History of the Free and Open Source Software Revolution, was published in 2017.