Today, we want to address the distinction between Cross-platform and Native. Each year, mobile development technologies advance, reigniting debates about which technology is superior. In this article, we'll try to clarify: what to use and when.
What You Need to Know About Mobile Development
First and foremost, we're writing this article not for developers. Our primary goal is to enlighten project managers, business clients, and product owners about which type of application suits which purpose. Therefore, we've gathered the most basic yet crucial information for understanding in one piece. This will help you determine the type of app you need before the project starts.
Let's begin with the basics. There are three main methods for mobile app development:
- Native Application — Developed using the tools provided by vendors like Apple and Google.
For Apple, the current relevant technologies include: UIKit, SwiftUI + the extensive iOS SDK, and the programming languages Swift and Objective-C. For Android, it's the Android SDK, Jetpack Compose, and languages such as Java 8 and Kotlin.
- Web Application that utilizes a browser as the runtime environment and has limited access to device resources.
This category also includes what's known as WebView apps — applications wrapped in a thin layer of native code that uses the browser's SDK to open a web app. They are also distributed via app stores. Relevant technologies for them include classic web tools — HTML, CSS, and Javascript.
Examples include Ionic or Cordova. Typically, such apps have limited access to native device functionalities, lower performance, a less responsive interface, and more challenging post-launch support.
However, we won't be delving into web apps in this article. That's not our focus.
- Cross-Platform Application that compiles into native code. This type of app is written using third-party development tools: programming languages that come with their library set, bridging platform SDK interfaces with their proprietary ones, or entirely replacing them.
Examples include:
- Flutter (utilizing the Flutter SDK and the Dart programming language);
- Xamarin (with Xamarin Forms, .NET, and the C# language);
- Kotlin Multiplatform Mobile (referred to as KMM, and naturally, using the Kotlin language);
- QT6 — an extensive toolkit for creating graphic applications for everything from Windows to car dashboard displays. The language used is C++.
In cross-platform development at imaga, we use Flutter. Hence, we'll be focusing on that. In other words, this article will compare native development and Flutter.
A Bit About Flutter
Flutter technology was crafted by Google engineers. They gathered both positive and negative experiences from all existing cross-platform solutions and derived the recipe for the ideal cross-platform:
- Flutter allows savings without compromising quality. Developing a single Flutter application that operates both on iOS and Android devices is 30% cheaper than developing two native applications from scratch.
- Apps on Flutter are written on a unified codebase: easier to test and debug, and less prone to errors.
- No desynchronization of platform teams — releases are launched without delays.
- Users won’t notice any difference, whereas they might in native apps.
Flutter applications are written in Dart language. It is compiled into the native code of the platform for which the build is prepared. Thus, UI elements, animations, and transitions between screens work just as well as they would in a native application.
Flutter has access to all features of supported platforms. Platform channel technologies allow Dart code to directly address the open interfaces of the platform: camera, GPS, sensors, device file system, etc.
It's vital to understand that having access to features and actively using them are different things. You can use the camera from Flutter, but developing an advanced 3D scanner based on the device’s sensor array using cross-platform technology is unprofitable. It will entail developing libraries on the native part, as a result of which, instead of only using a team of native developers who would deal with the interface, you would have to find a team of Flutter developers as well.
The Flutter industry is evolving. This also impacts the situation in the job market. The entry threshold for the technology is low: the framework is relatively simple. The language is familiar: Dart is an object-oriented language, and its syntax resembles a mix of Java and JS. Therefore, more and more specialists are moving into Flutter from related fields: Android, iOS, Web.
The Flutter industry is evolving. This also impacts the situation in the job market. The entry threshold for the technology is low: the framework is relatively simple. The language is familiar: Dart is an object-oriented language, and its syntax resembles a mix of Java and JS. Therefore, more and more specialists are moving into Flutter from related fields: Android, iOS, Web.
You can also check out more use cases on the Flutter platform here.
Pros and Cons of Cross-Platform Development
The main advantage of Flutter is its unified codebase. This gives Flutter numerous benefits:
- faster development speed, which means the shortest MVP (Minimum Viable Product) and Time2Market;
- 1.5 times fewer man-hours per feature;
- no need to have two experts for one team (iOS, Android) on a full-time basis, making development cheaper;
- identified errors are fixed immediately across all target platforms (in most cases);
- consistent appearance of the application;
- the ability to compile the application for Web and Desktop and the capability to deploy the app as a PWA (Progressive Web App).
However, Flutter also has drawbacks, which can pose threats to the budget during the later stages of work:
- memory and battery consumption can sometimes be 1.5-2 times higher than in native apps;
- performance for some tasks may be 5-10% lower;
- extensive functionality that uses platform and device capabilities (like cameras, computational processes, augmented reality, etc.) will necessitate the use of the native part, negating the essence of using cross-platform technologies;
- issue rectification within cross-platform libraries;
- difficulty in finding specialists in the market.
Pros and Cons of Native Development
Typically, the start of native project development is slower than that of cross-platform. There are several possible reasons for this: team workload, the search for skilled native developers, and vastly different design approaches. A feature may take twice as long to develop as in cross-platform. The same tasks are approached differently, have varying levels of complexity, and require different areas of expertise.
However, native apps interact more efficiently with the device, are lighter in size, and consume less RAM and battery. Let's list the advantages of native development.
- High Performance
Since the technologies used in platform-specific app development are directly tied to that platform, native code has direct access to all the operating system's functionalities.
And a more straightforward interaction of the application with the mobile device's features enhances the overall app performance. This is especially true when displaying graphic or multimedia content.
Therefore, creating resource-intensive apps using native code can reduce response times, the likelihood of crashes, and freezes. Below are the results of a test with a simple list featuring images. It's evident that the native app outperforms cross-platform solutions. On newer phone models, the difference might not be as pronounced, but the trend is clear.
Therefore, creating resource-intensive apps using native code can reduce response times, the likelihood of crashes, and freezes. Below are the results of a test with a simple list featuring images. It's evident that the native app outperforms cross-platform solutions. On newer phone models, the difference might not be as pronounced, but the trend is clear.
- Maximum Utilization of Platform Capabilities
Native apps are conceived and developed to address specific tasks on a particular platform. This leads to a better match of app capabilities with the device's hardware features, including Bluetooth, NFC, camera, GPS, etc.
This compatibility is essential when the application needs to utilize data such as physical and geographical location and more.
This compatibility is essential when the application needs to utilize data such as physical and geographical location and more.
- Superior User Interface
Since native apps are directly integrated with the mobile operating system, leveraging and using all available hardware features, users can navigate through a familiar interface seamlessly. This results in a positive user experience (UX) and consistent retention.
For instance, with the vast variety of smartphone screen resolutions available today, it's crucial to have an app optimized for such screens to ensure user comfort and ease of use.
For instance, with the vast variety of smartphone screen resolutions available today, it's crucial to have an app optimized for such screens to ensure user comfort and ease of use.
- Large Developer Market
Among developers, native development is still the most popular method for creating apps, making team assembly easier than for cross-platform.
Cons of Native Development:
Cons of Native Development:
- Expense and Time Consumption in Development
Creating separate applications for each operating system can prolong the development process. The same code cannot be deployed across different platforms, and developers need more time for code conversion and rewriting. This increases both costs and development time.
If a company desires separate apps for each platform, they would need to hire additional specialized developers. For example, one developer might focus on iOS app development, while another concentrates on Android, further escalating the expenses.
About Technologies and User Experience
The primary question when choosing a technology is the quality of experience required by the user. Here are several criteria that influence the user experience:
- Look-&-Feel — consistency in appearance, intuitive adaptation based on previous experience: gestures, placement of controls and navigation elements, etc.
- Performance when executing user tasks, meaning the speed of the application.
- Responsiveness of the interface — animations, transitions between screens, delays in touch responsiveness, scrolling physics, etc.
- Integration with the operating system: the app should be capable of interacting with all system features (camera, sensors, calls, etc.), rather than just mimicking a browser page.
- Power consumption — how much the app drains the battery and heats up the smartphone.
- Accessibility — screen readers, voice navigation for individuals with disabilities. Usually not a priority, but worth considering.
Development Cost
If the project is straightforward, opting for cross-platform development can save at least 1.5 times since you're essentially not developing separate products for different platforms but one for all. However, as the project expands, the balance might tilt: native development might prove to be more cost-effective.
A generalized "formula": one Flutter developer can often perform the tasks of 2 native developers (iOS, Android) within the same timeframe. In turn, if an app has many native features, it can be beneficial to combine native development (e.g., for libraries) and Flutter (for creating unified logic and UI), or even switch entirely to native development.
Additionally, opting for Flutter is a great choice for launching an MVP for demonstration and, if desired, mapping that logic into a web interface.
Let's illustrate the development process for a project without platform-dependent features. For example, a small shop or a loyalty program with a catalog. Imagine the same project being developed simultaneously by two companies with identical work approaches and engineer qualifications.
Additionally, opting for Flutter is a great choice for launching an MVP for demonstration and, if desired, mapping that logic into a web interface.
Let's illustrate the development process for a project without platform-dependent features. For example, a small shop or a loyalty program with a catalog. Imagine the same project being developed simultaneously by two companies with identical work approaches and engineer qualifications.
Team configurations
Native | Flutter | Заголовок 3 | Заголовок 4 | Заголовок 5 | Заголовок 6 | Заголовок 7 | Заголовок 8 | Заголовок 9 |
---|---|---|---|---|---|---|---|---|
1 designer | 1 designer | Нужен блок | Нужен блок | Нужен блок с табличкой для статей на вихре | Нужен блок | Нужен блок | Нужен блок с табличкой для статей на вихре | Нужен блок |
3 Android 3 iOS |
4 developers | |||||||
1-2 QA | 1 QA |
In this example, Flutter saves us 45.6% on development, 70.5% on QA considering the use of automated tests in both teams, and 33.3% on app design.
Of course, projects vary. In some instances, Flutter might save 15% of the budget, and in others, up to 50%. Additionally, there might be a calendar advantage in planning since you don't need to synchronize logic between platforms.
Summary
In conclusion, we offer a simple framework to help decide on technologies:
- If there are many platform-specific features — Native is better;
- If you need to leverage the smartphone's power for computations — Native is better;
- If there's little to none of the aforementioned functionality — Flutter is preferable;
- If you need an app for MVP — Flutter is better.