Native or Cross-Platform? Choosing an App Architecture

This argument usually turns into a battle of brands and the real question gets lost. Yet the choice is not a matter of fashion but of mechanism. The difference between the two routes lies in who draws the screen and who reaches the hardware. In this article we open the mechanism up, then set out which product should take which route. We aren't comparing framework names; that is a separate subject.

Written and reviewed by Digital Marketing Specialist

Lines spreading from a single light source into two separate frames; the two frames on the right like mirror images
From one source to two platforms: what makes the difference is what the layer in between does. Image generated with AI.
Category Mobile
PublishedUpdated
Reading7 min
Section7 sections
Section 0101 / 07

What Does Native App Mean, and How Does It Differ from Cross-Platform?

The distinction isn't in the language, it is in the mechanism. A native app is built with the platform's own language and its own tools; Swift does the job on iOS, Kotlin on Android. Cross-platform, on the other hand, reaches two platforms from a single source. The distinction lies not in the language but in who draws the screen and who reaches the hardware. A team that understands the mechanism picks the right route easily.

Names are confusing; mechanisms aren't. On the native code route your app uses the operating system's components directly. On the single codebase route a layer comes in between, and that layer translates for both sides.

The existence of that layer is neither good nor bad in itself. What it gains you and what it delays varies with the kind of product.

The two routes diverge at three points. The sequence below also forms the backbone of this article.

  1. Who draws the screen — the platform's own element, or the framework's brush.
  2. Who reaches the hardware — directly, or through an intermediate layer.
  3. Where performance diverges — in the everyday flow, or in heavy graphics.

Weigh all three together and the decision shows itself. The native app argument reaches a dead end when those three questions are skipped and brand names are set racing instead.

Is the Same App Written Twice?

On the native code route, yes — two separate projects run. The screen design and the server side are shared, but you write the interface code twice. On a single codebase we write the shared work once and keep only the platform-specific pieces apart. Native code may still be needed on the app side, but its scope is narrow.

Section 0202 / 07

How Does a Single Codebase Draw the Screen?

There are two approaches. Some frameworks bridge to the platform's own component; others draw every pixel themselves. The bridging route gives a native look. The self-drawing route produces exactly the same result on both platforms. That choice directly determines which device the app will feel familiar on. On the native app side there is no such choice; the component is native already.

With the bridging approach, when you press a button a real system button responds. The user finds their device familiar, but the two platforms don't look identical. With the self-drawing approach the interface elements are painted with the framework's own brush; they look the same everywhere and fully native nowhere.

If you want the brand experience to be uniform, the second route suits you. If you want to lean on the habits of the device, the first sits better.

That choice carries a price on the maintenance side too. When a platform refreshes its interface, a bridging framework picks the change up on its own. On a self-drawing framework, you are the one chasing the current look. How far the app leans on native components determines how long that chase runs. Platform expectations are documented; Apple's Human Interface Guidelines and Material Design describe different behaviour.

Does the User See That Difference?

Most users can't put a name to it, but they sense it. Scroll deceleration, keyboard behaviour and the back gesture vary from device to device. These are small details; stacked on top of one another, they make a product feel foreign.

Section 0303 / 07

At Which Point Does Hardware Access Diverge?

Capabilities such as the camera, sensors and background location work on both routes. The difference shows up not in the speed but the moment a new capability arrives. When a platform announces a new feature, a native app uses it on day one. On the cross-platform side, you wait for the bridge to be updated. That wait is usually measured in weeks.

For common capabilities, ready-made intermediate layers exist and work well. The trouble comes with the uncommon: a new sensor, a new payment method, a new security flow. At that point you either write the bridge yourself or you wait.

If your product sits at the edge of the hardware, that wait may not be acceptable. We handle hardware requirements separately on the iOS and Android sides of the build.

Could We Write the Bridge Ourselves?

You could, and sometimes that is the right thing to do. But that bridge is now your maintenance load. The simplicity of a single codebase shrinks a little with every bridge you write yourself.

Section 0404 / 07

Where Is the Performance Difference Really Felt?

On everyday lists and forms, the difference is invisible. The divergence begins with heavy graphics, continuous animation and intensive data processing. Games, live drawing over maps and video editing fall into that group. For an ordinary catalogue or order flow, a native app isn't essential. The measure is not speed but the kind of work.

Which Question Should You Test Your Product With?

The performance argument usually stays abstract, because nobody says which kind of work they mean. Test your product with this question: how many times a second does a new frame have to be drawn on the screen? If the answer is “rarely”, the architecture cannot be chosen on performance.

The app's launch time and install size come into the picture too. Both are silent causes of user loss; we took up their effect on the budget separately in the app cost article.

“Users expect apps to load fast and be responsive. An app with a slow start time doesn't meet this expectation and can disappoint users.”

— Android Developers, App startup time
Section 0505 / 07

Which Product Should Take Which Route?

Three questions are enough. How close does the product get to the hardware, are both platforms needed at once, and which language does the team command? If the hardware runs deep and one platform is enough, the native app wins. If two stores are essential and the hardware stays ordinary, the single codebase comes forward. The decision depends on the kind of product, not on fashion.

Most lists skip the team's competence, yet it is the most concrete measure of all. If you have an experienced native code team, moving to a single codebase gains you no speed. The reverse holds too.

We listed the questions that clarify the decision in the questions to ask before commissioning an app article. If the choice lands on a single codebase, we compared the two common frameworks in the React Native or Flutter article.

Is It Possible to Change Route Later?

It is, but it isn't cheap. You rewrite the interface code from scratch; the server side and the design remain. That is why taking the decision early comes markedly cheaper than taking it late. Bolting native pieces on and off afterwards creates the same burden.

Section 0606 / 07

Let's Choose Your Architecture Together

The architecture decision isn't a purely technical preference. We talk through your product's hardware needs, its platform expectations and your team's competence together. What you are left with is not the name of a technology but the reasoning behind the choice. The difference between a native app and a single codebase only takes on meaning through that reasoning. The wrong architecture shows itself six months later.

In the meeting we tick off three criteria one by one: depth of hardware, platform requirement and team. If all three point the same way, the decision is clear. If they diverge, we weigh up together which one carries the most weight. The single codebase approach is explained separately on the service page.

Why Write Down the Reasoning?

Putting the decision in writing is part of the job too. Note in a single sentence which criterion carried the most weight. Then, six months later, when the question “why did we choose a native app?” comes up, you won't have to go hunting for the answer. Native app or single codebase, a decision with its reasoning in writing is a defensible one.

Two vertical surfaces side by side; the left one joined straight to the ground, the right one joined through a thin layer in between
On the right-hand route a layer sits in between; what changes isn't the speed but how long it takes to reach a new capability. Image generated with AI.
Section 0707 / 07

Native versus a single codebase: which wins on which criterion

A native app leads on new platform features, heavy graphics and animation. Single codebases let you ship to both stores from one source with a one-language team. Native interfaces use the platform's own elements. A single codebase uses a bridge or its own drawing, and waits for the intermediate layer to support new features.

CriterionNative appSingle codebase
Interface componentThe platform's own elementA bridge, or drawn by the framework
A new platform featureUsable on day oneYou wait for the intermediate layer to update
Heavy graphics and animationAt an advantageCan be borderline
Both stores at onceTwo separate projects runOne source, shared work
Team requirementKnowledge of Swift and KotlinOne language is enough

When Does the Choice Settle Itself?

The choice between a native app and a single codebase isn't a contest of superiority, it is a choice of mechanism. If the depth of hardware, the platform requirement and the team's competence all point the same way, the decision states itself.

FAQs

Frequently asked questions: choosing between native and cross-platform

Does a native app always run faster?

No — that is a common oversimplification. On everyday work such as scrolling a list, filling in a form or displaying content, the user feels no difference at all. The divergence only appears on products that call for heavy graphics, continuous animation or intensive data processing. Choosing an architecture on speed for an order flow or a catalogue means deciding without measuring. The right question isn't how fast it is, but what kind of work it is.

Is a single codebase really half the cost?

No; the shared work shrinks, but it isn't halved.

Can part of the app be native and part of it shared?

It can, and it is a common arrangement. The shared flows run from a single source, while the screens close to the hardware are written in native code. A hybrid structure raises the maintenance load slightly, but it buys flexibility.

Do the stores accept apps written on a single codebase?

They do. The store review looks not at how the code was written but at whether the rules are met.

My team has no native code experience — should I still choose native?

If the product doesn't sit at the edge of the hardware, no. Setting off down a road you don't know grows both the schedule and the maintenance load.

If I choose cross-platform, will my design look different on the two platforms?

It depends on the approach you pick. On frameworks that bridge to native components it looks different; on frameworks that draw their own it looks the same.

Will adding the second platform later be difficult?

On a single codebase it is relatively easy; the shared work is already written. On the native code route, the second platform is very nearly a new project.

When should I finalise the architecture choice?

Before the design is locked. After that it gets expensive.