Choosing between cross-platform and native development

Hello! Sasha Vorozhishchev is in touch. I lead Flutter and iOS in AGIMA. And today I want to raise the issue of the difference between Cross-platform and Native again. Every year, technology in mobile development takes a step forward, and therefore the debate about which technology is better flares up with renewed vigor. In this article, we will try to dot the i: what and in what case to use.

What you need to know about mobile development

The first important thing to say is that I am not writing this article for developers. My main task is to tell project managers, business customers, product owners, which application is suitable for which purpose. Therefore, I have collected the most basic, but the most important information for understanding in one text. It will help you determine what type of application you need before starting a project.

And I’ll start with the basics. There are three main ways to develop mobile applications:

  • native application — created using developer tools from Apple and Google vendors.

    The following technologies are currently relevant for development for Apple: UIKit, SwiftUI + rich iOS SDK, programming language Swift and Objective-C. For Android – Android SDK, Jetpack Compose; languages: Java 8, Kotlin.

  • Web Applicationwhich uses the browser as the execution environment and limited access to device resources.

    They also include the so-called WebView – applications wrapped in a thin layer of native code that uses the browser SDK to open a web application. They are also distributed through the stores. For them, classic web technologies are relevant – HTML, CSS, Javascript.

    This includes representatives such as Ionic, Cordova, ReactNative. As a rule, such applications are distinguished by limited access to the native capabilities of the device, low performance, non-responsive interface, and rather complicated support for the finished product.

    But in this article I will not talk about web applications. We have a different goal.

  • Cross platform applicationcompiled into native code – an application written using third-party development tools: programming languages ​​that have their own set of libraries that connect platform SDK programming interfaces with their own interfaces or completely replace them.

The latter include:

  • Flutter (Flutter SDK and Dart programming language);

  • Xamarin (Xamarin Forms, .NET + C#);

  • Kotlin Multiplatform Mobile (the toolkit is called KMM, the Kotlin language, respectively);

  • QT6 is a rich toolkit for creating graphical applications for everything from Windows to car dashboard displays. C++ language.

For cross-platform development, we at AGIMA use Flutter, so I will talk about it. In other words, in this article, I am comparing native development and Flutter.

A little about Flutter

Flutter technology was created by Google engineers. They collected positive and negative experiences of all existing cross-platform solutions and came up with a recipe for an ideal cross-platform:

  • Flutter allows you to save money without losing quality. Developing one Flutter app that works on both iOS and Android devices is 30% cheaper than developing two native apps from scratch.

  • Applications on Flutter are written on a single code base: it is easier to test and debug, the probability of errors is less.

  • There is no desynchronization of platform commands – releases come out without delay.

  • Users won’t notice any difference, while native apps will.

Flutter apps are written in Dart. It is compiled into the native code of the platform for which the build is being prepared. Therefore, UI elements, animations, transitions between screens work just as well as they would work in a native application.

Flutter has access to all the features of the supported platforms. Platform channel technologies allow direct access from Dart code to open platform interfaces: camera, GPS, sensors, device file system, etc.

You need to understand that having access to features and actively using them are two different things. It is possible to use a camera from Flutter, but it is unprofitable to develop an advanced 3D scanner based on a set of device sensors on a cross-platform technology. This will entail the development of libraries on the native part, as a result of which, instead of using only a team of native developers who would also take care of the interface, you will also have to look for a team of Flutter developers.

The Flutter industry is evolving. This also affects the situation on the labor market. The threshold for entering the technology is low: the framework is relatively simple. The language is familiar: Dart is an object-oriented language, in syntax it resembles a mixture of Java and JS. Therefore, more and more specialists come to Flutter from related fields: Android, iOS, Web.

More cases on the Flutter platform can be viewed here.

More cases on the Flutter platform can be viewed here.

Pros and cons of cross-platform

The main advantage of Flutter is a single code base. Thanks to this, Flutter has many advantages:

  • high development speed, which means the shortest MVP and Time2Market;

  • 1.5 times less man-hours per feature;

  • there is no need to have two experts per team (iOS, Android) on a permanent basis, i.e. development is cheaper;

  • identified errors are corrected immediately for all target platforms (in most cases);

  • the unity of the appearance of the application;

  • the ability to compile the application for Web and Desktop and the ability to deploy the application as a PWA.

On Flutter, there are also disadvantages that can become a threat to the budget in the later stages of work:

  • memory and battery consumption is sometimes 1.5–2 times higher than on the native;

  • performance on some tasks may be 5-10% lower;

  • a large number of functionality that uses the capabilities of the platform and device (cameras, computing processes, augmented reality, etc.) will force the use of the native part, which blocks the use of cross-platform technologies;

  • elimination of errors inside cross-platform libraries;

  • the difficulty of finding specialists in the market.

Pros and cons of native

As a rule, the start of the development of a native project is slower than a cross-platform one. There are several possible reasons: workload, the search for good native developers, radically different approaches to design. A feature can have labor costs 2 times higher than with a cross-platform. The same tasks are set differently, have different complexity and require different expertise.

At the same time, native applications work more efficiently with the device, weigh less, consume less RAM and batteries. I will list the advantages of native development.

Since the technologies used in the development of platform-specific applications are directly related to this platform, native native code has direct access to all the functions of the operating system.

And easier interaction of the application with the features of mobile devices improves the overall performance of the application. Especially when presenting graphic or multimedia content.

Therefore, building high-load applications using native code can reduce response times, crashes, and freezes. Below are the test results with a simple list with images. It can be seen that the native application wins against the background of cross-platform solutions. On newer phones, the difference will not be as significant, but the trend can be seen. Results of other tests here.

Native applications are conceived and developed to solve specific problems on a specific platform. This results in a better match between app capabilities and device hardware capabilities, including Bluetooth, NFC, camera, GPS, etc.

This mapping is necessary when an application needs to use data such as physical and geographic location, etc.

Since native applications integrate directly with the mobile operating system, taking advantage of all the available features of the hardware, users can navigate through the familiar interface without hassle. This results in a positive user experience (UX) and stable reuse.

For example, now with a large number of different smartphone screen resolutions, it is important to have an application optimized for such a screen so that it is convenient for the user to use this application.

Among developers, native development is still the most popular way to create applications, so it is easier to assemble a team than on a cross-platform. Below is the data from HH.ru at the end of 2022 in Russia. As you can see from the screenshots, even with a not very careful selection of applicants for native development, there are much more than on Flutter.

Cons of native development:

Creating separate applications for each operating system can lengthen the development process. The same program code cannot be deployed to different platforms, and it will take more time for programmers to convert and rewrite the code. This increases costs and development time.

If a company wants separate applications for each of the platforms, it will be forced to hire additional specialist programmers. For example, one developer will focus on iOS app development while another will focus on Android, further driving up costs.

About technology and user experience

The main question when choosing a technology is what quality of experience the user needs. And here are a few criteria that affect the user experience:

  • Look-&-feel – continuity of appearance, intuitive adaptation on previous experience: gestures, position of controls and navigation, etc.

  • Performance when performing user tasksthat is, the speed of the application.

  • Interface Responsiveness – animations, transitions between screens, touch delays, scrolling physics, etc.

  • Operating system integration: the application must be able to work with all the capabilities of the system (camera, sensors, calls, etc.), and not be an analogue of the browser page.

  • Energy intensity – how much the application consumes the battery and heats up the smartphone.

  • Availability — screen readers, voice navigation for people with disabilities. Usually not that important, but worth considering.

Development cost

If the project is simple, then the choice of cross-platform development allows you to save at least 1.5 times, since, in fact, you are not developing separate products for different platforms, but one for all. But if the project grows, then the scales begin to tilt in the other direction: native development may be more profitable.

Average “formula”: one Flutter developer can often perform the tasks of 2 native developers (iOS, Android) in the same time frame. In turn, if the application has a lot of native functions, it can be convenient to combine native development (for example, for libraries) and Flutter (to create a single logic and UI), or even switch to native development.

Also, the choice of development on Flutter is perfect for presales, as it will allow you to quickly release an MVP for demonstration and, if desired, lay out this logic in a Web interface.

Here is the progress of the project development without platform-dependent functions. For example, a small store or a loyalty program with a catalog. Imagine that the same project is being developed in parallel by two companies with identical approaches to work and the qualifications of engineers.

Command Configurations

native

1 designer

3Android

3 iOS

1-2 QA

Flutter

1 designer

4 developers

1 QA

It turns out that Flutter in this example saves us 45.6% on development, 70.5% on QA, taking into account the use of autotests in both teams, and 33.3% on application design.

Of course, projects are different. Somewhere Flutter can save 15% of the budget, and somewhere up to 50%. Also, there may be a calendar advantage in design, as you don’t have to keep logic in sync across platforms.

Summary

As a summary, I offer a simple diagram that will help you decide on technologies.

And in short, here it is:

  • many platform-dependent functions – native is better;

  • you need to use the power of the smartphone for any calculations – better native;

  • there are no Flutter developers available – native is better;

  • there is no or little functionality described above – Flutter is better;

  • you need an application for presale – better than Flutter.

What else to read about it

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *