Insights /

Selecting the right tech stack for mobile app development

Selecting the right tech stack for mobile app development

Joseph Chereshnovsky
VP of Engineering

Mobile applications have steadily become the main channels through which people interact with organizations, access information and perform numerous other tasks, from reading product reviews to viewing real estate listings. Since 2017 mobile website traffic has surpassed desktop access, and hovered around 50% ever since. The high convenience factor and low barriers to entry of using mobile devices — plus the vast iOS and Android app ecosystems — have made them the primary platforms for millions.

But connecting with and sustaining the interest of mobile users can be challenging, in large part because they have high expectations for how the apps they use look, feel and perform. A Think With Google study found that as page load time goes up to 5 seconds, 90% of website visits are likely to be abandoned.

Delivering the experience mobile users expect is a balancing act. Developers must consider the relative performance characteristics of different technology stacks and approaches to development, along with their associated learning curves and costs. For example, an app harnessing the power of a device’s biometrics sensors and voice assistant may be more useful than an equivalent web app, but costlier to build.

Fortunately, there are multiple viable options available, covering a wide range of budgets, development team capabilities and business requirements. The following table offers a high-level overview of how the main options stack up across key criteria, including performance and overall cost:

So, what is the best technology for mobile app development? Let’s explore each of these routes in more detail.

Option no. 1: native applications

Native development entails building a bespoke application for each platform, using the official software development kits (SDKs) and tools for the OS in question. For iOS, this process often involves using Swift or the older Objective-C language within an integrated development environment (IDE) like XCode. On Android, Kotlin is Google’s preferred language — though Java remains popular — and Android Studio is the official IDE.

Because native mobile applications use technology stacks built specifically for the platforms they run on, they deliver the fastest performance and tightest integration with platform APIs. A native app can fully utilize underlying hardware features such as voice-activated assistants, gyroscopes and biometrics, which may be off-limits to web applications. Moreover, native apps are more energy-efficient and can have smaller file sizes and memory footprints than cross-platform native apps. Plus, they always use native user interface (UI) controls. 

These characteristics can make native apps ideal for consistently meeting mobile user expectations. After all, many app uninstalls stem from specific frustrations with apps that are too big, slow or memory-hungry — shortcomings that native apps are better positioned to avoid than non-native alternatives. However, native app development is relatively time-consuming and expensive. Developers must also maintain a dedicated repository for each OS, as code cannot be reused across platforms.

Pros

Cons

Ideal use cases for native development: Complex and demanding applications that cannot compromise on performance (or security) and are designed to maximize the functionality of a particular platform.

Option no. 2: cross-platform native applications

Cross-platform native applications are rendered with native code on iOS and Android, but built with different programming languages and tools than those used in traditional native mobile app development. Instead of a Swift or Kotlin stack, developers can use one centered on JavaScript, Dart or another general-purpose language. The codebases they build can be readily reused across multiple platforms, while still being able to access the native APIs on each one. 

This approach has rapidly become one of the most popular methodologies for custom mobile app development. It saves time and money compared to building separately for iOS and Android, offers close-to-native performance and delivers a richer experience than responsive web applications or progressive web applications (PWAs).  

Cross-platform native apps are distributed via app stores and look more or less like traditional native apps to end-users, with some UI variations possible. Like native apps, they face the possible drawback of delays during app review.

Currently, two cross-platform native frameworks dominate the landscape: React Native, which is supported by Facebook's parent company Meta, and the more recently released Flutter, a Google-led project. As of 2022, 46% of mobile developers used Flutter and 32% used React Native — each more than 20 percentage points ahead of any other solution. Both have risen in popularity as alternative frameworks have declined.

React Native

React Native provides a JavaScript library for building applications that render as native code. As its name suggests, it uses actual native UI controls on both iOS and Android, rather than imitations of them or standard web views.

A React Native application features an on-device main (native) UI thread, built with the iOS or Android SDK, as well as a JavaScript thread running in a separate virtual machine. The two are connected via an asynchronous, serialized and batched bridge, which sends the views and business logic from the JavaScript side to the native side for execution at runtime.

Essentially, React Native apps are built with components that wrap native code and then interact with native APIs using JavaScript and the declarative React UI paradigm. These components, such as “View” and “Text,” are platform-agnostic and get “mapped” later on to each mobile platform’s native UI. Accordingly, developers can work quickly and productively, while targeting both iOS and Android thanks to the shared JavaScript code.

Pros

Cons

Flutter

Flutter is a complete open-source UI toolkit for building cross-platform, natively compiled applications with one codebase. Flutter apps are built with Dart, Google’s own client-optimized language. The Flutter framework includes layered libraries for animations, painting, gestures, rendering and widgets, along with Material (Android) and Cupertino (iOS) controls for implementing the appropriate design language on each platform. Note that these design libraries are not actually native Android or iOS UI, despite the similarities.

Unlike React Native, Flutter does not need a bridge, nor does it rely on just-in-time (JIT) compilation on mobile devices. It instead uses ahead-of-time (AOT) compilation of Dart code into native ARM code, boosting performance compared to JIT execution. The Flutter framework sits atop the Flutter engine, which is written primarily in C++ and contains the Dart runtime and Skia graphics library, as well as a platform-specific embedder.

During development, Flutter allows for relatively fast, productive work, due to its Stateful Hot Reload feature for seeing changes without discarding the current app state. The same codebase can be used for both iOS and Android. Plus, Flutter also supports web and desktop development.

Pros

Cons

Other frameworks

Aside from React Native and Flutter, there are comparable frameworks, including Xamarin (a Microsoft subsidiary), NativeScript and Appcelerator Titanium. These solutions may offer unique benefits such as the ability to use C# and .NET, or TypeScript, which transpiles to JavaScript. 

But these frameworks have steadily lost ground, in terms of developer interest, to the big two over time. The specific reasons for their decline may include their overly complex tools, limited community support and worse performance than competitors.

Ideal use cases for cross-platform native applications: Cross-platform applications that need close-to-native performance, but without the cost, timeframes and complexity of native development.

Option no. 3: hybrid applications

Hybrid applications combine native and web technologies, albeit in a very different way than JavaScript-based solutions such as React Native, and with much less performance optimization. Typically, this approach involves encapsulating a mobile website or application core written in HTML, CSS and JavaScript inside of a native shell. This encapsulation serves three important functions:

  1. The application can be accessed outside of a standalone web browser, via an application distributed through an official app store. This app includes its own embedded browser to render its web views.
  2. Using plugins made available by popular wrapper frameworks, the resulting app can also access underlying hardware features, such as biometrics sensors, GPS location data and the device file system.
  3. The same site or core can be wrapped and distributed through the official iOS and Android storefronts, enabling convenient and low-cost cross-platform app development without having to write new native code.

As the mobile app economy grew throughout the 2010s, many developers abandoned native-only development to focus on hybrid-only or a blend of native and hybrid. Hybrid development using frameworks like Ionic, Apache Cordova and Capacitor peaked around 2017. Since then, the growing uptake of React Native and Flutter has cut into the popularity of these solutions. Both React Native and Flutter provide the same cross-platform benefit as hybrid applications, while also delivering superior performance.

That said, hybrid development using HTML, CSS and JavaScript remains a worthwhile option for some use cases. Wrapping a site is a straightforward, low-cost endeavor that maximizes the value of something already built. The learning curve is slight compared to both native and cross-platform native development, plus there is an extensive system of development and debugging tools, as well as applicable open-source technologies.

Pros

Cons

Ideal use cases for hybrid applications: Cross-platform applications that do not need top-notch performance; applications that need to be built within a tight budget but distributed through an app store.

Option no. 4: responsive mobile web applications

A responsive mobile web application is a website that optimizes its layout and design for each device accessing it, in keeping with the principles of responsive web design. Although the same HTML is sent to each device, CSS makes the responsive page render and behave differently depending on screen and browser window size. Responsive sites allow for a single URL to be used by all devices, while also being easier for search engines to crawl and index, helping with discoverability.

Responsive mobile web apps are accessed like any other website via a web browser that renders HTML5. As such, they are relatively simple and economical to develop, distribute and maintain. 

Over time, HTML5 has added APIs enabling web apps to access deeper features of the underlying hardware and OS, including geolocation data, Bluetooth, magnetometers, battery status, vibration, WebRTC and HDCP. These APIs are usually easy to call using JavaScript, meaning it’s possible to build a richly featured experience with existing web technologies instead of native code.

However, responsive web apps are at the mercy of the browser they’re running on, and not all browsers and mobile operating systems offer the same support for advanced HTML5 APIs. Chromium-based browsers and Mozilla Firefox offer more support for newer web APIs than Safari or any iOS versions of major browsers. This disparity means that the responsive web app experience, despite being universal in theory, can differ substantially by platform.

Pros

Cons

Ideal use cases for responsive mobile web applications: General web presence, prototypes and apps that need to be brought to market as soon as possible.

Option no. 5: progressive web applications

PWAs go a step further than responsive web applications, by integrating capabilities like service workers and web app manifests to deliver a more native-like user experience that works offline. These apps were pioneered by Google on Chrome and Android, and they have since received official support on iOS as well as desktop.

Some of the key differences between PWAs and responsive web apps include the ability of PWAs to do some or all of the following, depending on their design and platform:

Overall, PWAs sit somewhere between responsive web apps and hybrid apps. They are a logical upgrade route for organizations that already have a responsive website and want to deliver a more app-like experience to users, especially on Android or desktop.

Pros

Cons

Ideal use cases for progressive web applications: General web presence, prototypes, upgrades from responsive mobile web apps and somewhat complicated apps that cannot go through official app stores. 

Conclusion

There is no universally “correct” option among the five above. The right choice or choices will always depend on your particular business objectives, the intended use cases and performance characteristics of your application or applications, your desired go-to-market strategy and timeline, the skills of your teams and their levels of experience in building and maintaining mobile applications. For example, it often makes sense to maintain both a responsive web app or PWA and a cross-platform native app to serve the widest possible range of users.

All of these major technology stacks will remain viable for the foreseeable future, although there may be some decline in the popularity of native apps vis-a-vis cross-platform native apps, and of responsive web applications vis-a-vis PWAs. 

A Transcenda mobile app development consulting engagement can help you determine if native, native cross-platform, hybrid, PWA or responsive mobile website development is the best fit for your circumstances. The Transcenda team will work closely with your internal teams to determine the best way forward, based on your current goals and infrastructure for mobile development. Connect with us directly or view our case studies to learn more.

As the VP of Engineering, Joseph is focused on building world-class technical teams and ensuring that the solutions we build are scalable, secure, and future-proof. With over 20 years of hands-on experience, his interest in coding remains as strong as his dedication to helping the team and individual engineers grow.

Subscribe to receive the latest industry insights and news about Transcenda

Related articles: