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|
|Functionality||Simple, limited access to HW, APIs||Advanced, native APIs|
|Layout||Requires testing on different browsers||Native layout support|
Main code base runs on multiple platforms.
Separate code base per platform.
App runs "in browser".
Compiled and optimized binary.
easier to make changes and perform A/B testing. Updates rarely require new app release & download.
changes require development, more difficult to A/B-test and deploy. Updates require new release.
|Time to market||Fast
Develop once on multiple platforms.
Develop separately per platform.
|Discovery||Google Search (web)
Hard to cater for both iOS and Android users.
Responsive, native and familiar to user.
No push or local notifications, no background operation.
Many possibilities through tight integration with OS.
Due to limited native APIs available to JS.
Rich interaction, push notifications, background operation, data storage.
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
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.