/ Mobile Strategy

Native vs. Hybrid Mobile App Development

You've decided to create a mobile app but not sure if you should use native or hybrid/web technology stack? Nobody has an unlimited budget and you want to put your money to work, invest wisely and maximize your ROI. So making the right decision is crucial, and the choice may not be trivial. Here's a quick rundown of the alternatives.

Native apps are developed specifically for a mobile operating system (Objective-C or Swift for iOS, Java or Kotlin for Android), while hybrid apps are, at core, websites packaged into a native wrapper. We'll call both hybrid and web apps "Mobile Web" because they are essentially the same thing in a different package.

MOBILE WEB NATIVE APP
Development stack Javascript, ReactNative Swift, Kotlin
Functionality Simple, limited access to HW, APIs Advanced, native APIs
Layout Requires testing on different browsers Native layout support
Portability Excellent
Main code base runs on multiple platforms.
None
Separate code base per platform.
Performance Inferior
App runs "in browser".
Superior
Compiled and optimized binary.
Offline mode Impossible Possible
Maintenance costs Low
easier to make changes and perform A/B testing. Updates rarely require new app release & download.
High
changes require development, more difficult to A/B-test and deploy. Updates require new release.
Time to market Fast
Develop once on multiple platforms.
Slow
Develop separately per platform.
Discovery Google Search (web)
AppStore (Hybrid)
AppStore search
App download
User Experience Average
Hard to cater for both iOS and Android users.
Superior
Responsive, native and familiar to user.
User Retention Limited.
No push or local notifications, no background operation.
Advanced.
Many possibilities through tight integration with OS.
User engagement Low
Due to limited native APIs available to JS.
High
Rich interaction, push notifications, background operation, data storage.
Persistent Usually not.
Requires native wrapper to persist on device.
Yes, lives on device
Sentiment Users don't like it. Users love it.

The main advantage of mobile web is that it's relatively easier and faster (and therefore costs less) to develop, maintain and support. This seems like a big advantage indeed. But there are a few hidden costs to hybrid development.

The "write once, run everywhere" fallacy

A common motivation for hybrid apps is to use the same business logic and user interface on all platforms. This is usually true until you find the feature on the device which the hybrid platform doesn't support, or which the native OS does not offer a Javascript interface for. In such cases you will need to write native code to integrate with specific hardware or add functionality which isn't available in any of the standard plugins.

The user experience dilemma

Hybrid apps perform generally worse than native apps. Web pages take longer to load compared to native views. This is due to network latency. Animations and transitions are also slower and buttons not as responsive. This is because native apps run compiled code that's been optimized to run on the specific hardware. Hybrid apps run interpreted code running inside a hybrid framework which is running inside a native wrapper. It's a heavier and deeper stack designed for interoperability, not performance.

This is why many users don't like hybrid apps. Hybrid apps feel clunky and sub-optimal compared to native apps. The user experience just isn't as smooth and fast. You can feel it in the layouts and transitions, in the pages that flash when loading, or in the sluggish scrolling.

The lowest common denominator

iOS and Android are inherently different platforms with different UI patterns and UX guidelines. View navigation, for instance, works differently on iOS and Android. So do many of the transitions and animations. If you're developing a mobile web application, you will have to make a consious choice about user exeprience, and your app may not "feel native" to users because it won't use the standard UI patterns that users are familiar with.

iOS and Android web browsers also have subtle quirks and differences, due to different implementations. This can lead to platform-specific bugs.

Lastly, hybrid frameworks such as Xamarin and Ionic are always behind when it comes to supporting the latest native platform release and latest devices. So if you want to take advantage of the latest features or hardware, you will be better off developing native.