A Bit of Cross-Platform Mobile App Development History
We all consume content galore on our mobile phones. But what truly defines our experience is content presentation. Indeed, we’re all familiar with the smooth transitions of those great apps on our phones, often feeling the urge to come back for more of that good usability.
Just a few years ago, that’s exactly how native apps were sifted from the cross-platform wannabes — the quality of the latter simply wasn’t good.
The beginnings of cross-platform mobile development were harsh, to say lightly.
But back in the day, there were many players on the scene of mobile operating systems. You had Windows, BlackBerry, iOS, and Android. Building affordable applications that could run on all the platforms was justifiable.
The need for a wider reach resulted in a compromise on slow performance, bad usability, and frequent crashes for the small price businesses had to pay for hybrid applications. The cross-platform mobile development tools and frameworks were immature and not really ready for production.
In 2015, things started to change. First, React Native entered the scene, giving the apps built with it a semblance of nativity (React Native binds to native UI components). Then, in 2018, Google released Flutter to help developers build native-like apps faster.
Still, the two technologies were unable to beat native applications both in terms of performance and usability. Besides they lacked the maturity necessary for long-lived projects that require steady support and maintenance.
Cross-Platform Tools Are Maturing
Fast forward to 2020. Cross-platform development technology bloomed and is now mature enough to produce high-quality offspring. And even though there still are cases where native apps outperform hybrid applications (which we will discuss below), the difference between the two ceased to be so jarring.
While there are currently quite a few decent cross-platform mobile development tools (Cordova, Ionic, NativeScript, or Xamarin), we will be focusing here on only two — React Native and Flutter.
Without further ado, let’s kick off the comparison with a quick what’s what in the world of hybrid and native mobile development.
The Differences between Cross-Platfrom and Native Mobile Development
Native applications are written in programming languages and Software Development Kits (SDK) delivered by the providers of operating systems (OS) they run on:
- Android — Java or Kotlin
- iOS — Objective-C or Swift
Hybrid applications are written in programming languages and development tools offered by companies unaffiliated with a mobile platform provider. They are also commonly called cross-platform apps.
- Flutter — Dart
Native applications are executed without prior interpretation of the code, which results in fast apps with a familiar look and feel.
Hybrid applications can be split into two categories:
- Hybrid-web apps are written in a combination of HTML/CSS/JS and executed as a website in a mobile app wrapping. This is true for Ionic and Cordova apps.
- Hybrid-native apps are executed natively at runtime, meaning they render native user interface elements (React Native) or draw their own UI elements (Flutter).
Choosing between Native and Cross-Platform Depends on App Characteristics
Each app type has a different target audience and different requirements, which have to be analyzed in detail to make an informed decision on which mobile development approach to pick. Use the guide below to determine which tech stack is better for your mobile app.
The biggest consideration business owners usually give mobile app development is cost.
Developing a native application for iOS and Android essentially equals building two separate applications maintained by two separate teams of developers. Naturally, this can be a costly undertaking.
With hybrid applications, the app code is developed by one team. This doesn’t mean hybrid app development cost is cut in half compared to a native approach, but having a single codebase and one team of devs certainly drives the cost down. But there’s a caveat.
In complex applications, you have to use bridges and plugins to gain access to platform-specific features — these have to be written in native code, which calls for developers that have substantial knowledge of either platform.
Application complexity is one of the key determiners when choosing between native and cross-platform development.
A good way to define app complexity is to count the number of features, frameworks, and SDKs included in the application — or in other words, the more the app depends on the device's hardware or OS features (bluetooth, GPS, gyroscope, accelerometer, file sharing, etc.), the more complex it is.
App complexity isn’t the number of screens—an app with 200 screens can have little dependence on device and OS resources.
Platform integration is easier when using native SDKs. In fact, cross-platform mobile development might result in additional cost and potential overhead in the form of development of bridges/plugins that integrate with platform- and device-specific features.
Code Reuse and Development Time
Reducing time-to-market is one of the main objectives for companies wanting to release an application. Developing two native applications simultaneously will require significant resources and a sizable development team.
With cross-platform mobile development, time-to-market is reduced because the code can be reused across platforms. While the amount of code reuse depends on the project, it’s not uncommon to reuse up to 90% of code. The code can also be shared with the web version of an app, especially the business logic.
When a lot of the code is reused, you can end up with a uniform application that doesn’t leverage platform-specific features.
Smooth user experience and fluid UI transitions are crucial characteristics of good apps, characteristics that should remain unchanged even during heavy data processing. Native mobile development tools offer solutions that delegate data-processing operations to separate threads, ensuring a seamless user experience.
In the past, hybrid-web apps used to perform many operations simultaneously, on the same thread, causing the UI to respond poorly. Currently, however, there are solutions that let hybrid-web apps delegate processes to background threads, which frees up resources. App performance with this approach is still affected, though.
But this is not the case with hybrid-native apps built in React Native or Flutter, which approach the matter differently.
Flutter — renders UI elements using a highly performant engine, which results in performance on par with natively developed applications.
Operating System Updates
In native applications, when a new OS version is out, the language and tools are supported instantly, adopting new features automatically.
In cross-platform development, there can be a delay in the introduction of new-feature support for hybrid tools and frameworks. Moreover, to reflect the changes implemented in the new release of the OS, you might need to modify the hybrid app code — otherwise, especially if the changes are considerable, your application might not work properly with the new OS.
The lifetime of a mobile application is significantly shorter than that of many software solutions. But we can safely assume three years to be a decent lifespan of a mobile app before it needs a rewrite.
With that in mind and depending on the mobile app type, choosing a native stack is generally preferable for apps that are intended to stay longer on the market (i.e., longer than three years).
But if you’re building a short-lived app (e.g., a marketing app to support a one-time event), choose cross-platform development — it’ll be cheaper and faster to develop an app with good performance.
The mobile world is a dynamic environment. Mobile solutions that once were widely popular have virtually disappeared from the market (e.g., BlackBerry or Windows Mobile).
That’s why it’s important to take into consideration your app’s lifetime when thinking about native or cross-platform development. The rule of thumb is, the longer the lifetime, the more it relies on stable technologies with a long-term upgrade roadmap.
Native tech stacks offer a plethora of tools and guides that make it easy to migrate into a new release. Plus, since iOS and Android rule the mobile market, we can safely assume the platforms will be supported for years.
Things are a bit different with cross-platform tools, which might lack the long-term upgrade timeline. And even though Flutter and React Native have arrived at a level of stability and maturity worthy of trust and have developed considerable communities around them, both technologies can be dropped by official developers sometime in the future. This carries the risk that you’ll need to do a major application rewrite a few years after the app release.
Support & Maintenance
After the release of your application, you need to consider app maintenance and new features iteration.
The codebase for a hybrid app is shared across two platforms. Addressing bugs and developing new features is therefore easier because the team has only one code to work with.
Cross-Platform or Native, Then?
The choice depends on a thorough analysis and validation of your budget, app features, audience, and app complexity. Always consult your product development with experienced developers who can help you decide which approach fits your application best.
Key things to remember:
- Native development gives you access to a long-term upgrade path, tooling support, and excellent app performance. The only downsides of native development might be its cost and the necessity to have two teams to support the app post-release.
- Cross-platform mobile development is a cost-effective approach to building robust, highly performant apps. While there can be some tradeoffs with the integration of platform-specific features and new OS feature updates, current hybrid mobile development tools are capable of delivering native experiences.
Cross-Platform App Examples
To see how Flutter and React Native look like in action, check out the apps built using these tools.
Supporting companies in becoming category leaders. We deliver full-cycle solutions for businesses of all sizes.