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.
Subscribe to 100grams Blog
Get the latest posts delivered right to your inbox