Mobile app development, a vital part of business strategy, enables companies to engage users on the go. However, it presents unique challenges that require specialised approaches and constant adaptation. ClearPoint’s Mobile Practice Lead David Rawson, discusses the complexities of mobile development, drawing from years of experience and from 'Building Mobile Apps at Scale: 39 Engineering Challenges', a recent work by renowned technologist Gergely Orosz.
“Mobile development has more in common with the old boxed software model than with modern web development,” explains Rawson. Unlike web apps, which can be continuously updated, mobile applications are packaged as binaries and distributed via app stores like Google Play or Apple’s App Store. Once released, rolling back changes or issuing updates becomes complex.
This creates a situation where developers must ensure their mobile apps are in top shape before release. As Rawson points out, “Once you’ve put your binary out in the open, some users won’t update, and they might get stuck on that version. You can’t roll it back like a web deploy.” Highlighting the need for extensive planning and testing to mitigate the risk of bugs or inefficiencies.
While web applications can undergo daily updates, mobile app updates are constrained by app store review processes and phased rollouts. “Mobile apps generally release every two weeks, maybe every month. High performers might release every week, but it’s very hard to move the needle beyond that,” Rawson explains.
Watch or listen to our recent ClearPoint Unlock Mobile Engineering podcast.
In addition to managing releases, regularly refreshing mobile apps is key to addressing technical debt—outdated code or inefficiencies that naturally accumulate over time. As mobile platforms like iOS and Android continue to evolve, apps need to keep up with the latest operating system updates, security requirements, and user expectations.
The benefits of regular app refreshes include enhanced performance, better user experiences, platform compatibility, and improved security. By incrementally updating parts of the app rather than embarking on complete rebuilds, businesses can keep their apps efficient and up-to-date. Rawson points out, “Some of the best teams I’ve worked on constantly refresh parts of their apps every two or three years, which works much better than letting it rot.”
Technical debt can accumulate quickly, slowing down development and increasing the risk of bugs. Rawson refers to this as “an app that’s just barely good enough,” where code becomes outdated, and the app only just continues to function. Over time, this makes the app harder to maintain and innovate on.
“So when software's in that rotten state, there's not much you can really do. It's really hard to make a change. Everything's really slow. Every new feature you add adds the risk of bugs,” says Rawson. The solution? Regular refreshes and updates, rather than full rebuilds. Regularly updating smaller components keeps the app lean and effective, reducing the need for drastic measures.
When it comes to mobile app development, businesses often face the decision between native development and cross-platform development. Native development involves maintaining separate codebases for iOS and Android, offering better performance and alignment with platform-specific guidelines. “Native development is the premium option,” says Rawson, “but it comes at a higher cost.”
Native builds can result in superior performance, faster load times, and smoother animations, which improves user satisfaction. While it requires maintaining separate codebases for different platforms, it allows developers to create apps that look and feel like they are an integral part of the phone's operating system. This requires developers who deeply understand the design guidelines for each platform, such as Material Design for Android and Human Interface Guidelines for iOS.
Alternatively, cross-platform frameworks like Kotlin Multiplatform and React Native allow developers to share a single codebase across platforms, reducing both development time and cost. However, these solutions have trade-offs. Cross-platform solutions may introduce technical challenges, as Rawson explains, “When something goes wrong, you don’t know if it’s your Dart code or the interface between the Dart code and the native frameworks.” For more complex apps, native development may still be the preferred route, but cross-platform solutions can be a cost-effective option for smaller applications.
Mobile apps are used in diverse environments, often with inconsistent connectivity. “Your app has to deal with all the randomness and chaos in the real world,” says Rawson. For instance, consider a user who spots a flower while walking and switches to the camera app to take a photo, then returns to your app. Your app must seamlessly handle this state change, ensuring the user doesn't lose their progress, such as form data. Additionally, mobile apps must gracefully handle interruptions like losing internet connectivity or entering areas with slow internet. Offline functionality and resilience to disruptions are critical to maintaining a positive user experience.
Building resilience into apps requires a combination of strong backend services and clever user engineering. However, traditional methods like UI testing don’t work as seamlessly for mobile apps. “Mobile UI testing frameworks are less mature than web and have to run on hardware,” Rawson explains. Instead, mobile developers often rely on internal testing programmes and trunk-based development to test new features and improve app reliability.
A key aspect of mobile development is the developer experience. Rawson highlights how slow build times, outdated tools, and unreliable pipelines can sap developer morale. "We’ve seen projects with clean builds that take 10 minutes or more," he explains, whereas an optimised build process should typically take less than a few minutes. Long build times not only hinder productivity but also lead to frustration. To keep developers motivated and efficient, teams must invest in modern tools, fast build systems, and continuous integration processes that streamline development.
In conclusion, while mobile development shares many challenges with other forms of software development, it also comes with its own set of constraints that require specialised knowledge and planning. From managing the complexities of app releases to balancing cross-platform frameworks with native performance, successful mobile development requires a strategic approach. As businesses continue to invest in mobile experiences, understanding these nuances will be critical to delivering high-quality apps that meet user expectations.
Want to learn more about mobile engineering and the best strategies for keeping your apps up-to-date? Talk to us today for your mobile app needs or learn more.