Generally, the answer is completely dependant on an individual project specification and brief although according to a recent Gartner report amongst 478 developers in North America and Europe, 22% of developers are developing hybrid apps, 24% on mobile web-applications and 41% on native app development such as iOS or Android specific applications.
Consequently, the heated topic often leaves developers opting for one over the other, mostly down to personal preferences. However, developers are shifting more towards the significance of striking a balance between the ability to monetise their applications whilst providing a high quality, easily-understandable and friendly user experience.
THE DIFFERENCE IN DEVELOPMENT
Developing native applications is generally considered much easier than finding the perfect balance on a responsive website that suits all types of devices. Languages and their supported IDE’s, such as Objective-C and XCode, make rapid development of native mobile applications much easier to accomplish and typically, developers don’t require much understanding of the underlying principles of the platform and its language.
Developers will often find that bug-fixing in native applications is easier than identifying issues on hybrid or HTML5-specific apps. This is mostly due to the complex debugging tools an IDE will provide you with that can pinpoint the exact root and cause of a bug. However, the major disadvantage in development is the fact that every application is native to its OS, device and platform, so developers often need to release multiple versions to accommodate the wide spread of devices.
In contrast, HTML5 developers will often take a different approach with the development. Typically, the developers are familiar with creating web technologies, giving them the advantage that they have a wider skill base to approach the task, without necessarily needing to learn a new IDE or programming language. Also, HTML5 mobile applications can run on any device or platform that has access to a web browser, immediately increasing the development reach – although – you may end up spending equally as much time testing your application – similar to native applications per device testing – you’ll need to cross-browser check your application. With there being an enormous amount of mobile and tablet devices, you’ll need to strike a balance on the devices you want to target and those you decide not to officially support.
DELIVERING USER EXPERIENCE TO GENERATE A REVENUE STREAM
If we look through a consumers perspective, monetisation and development are two different things entirely. If we take a game as an example, you’ll only be focusing initially on the visual appeal of the application and, once we have purchased the game, how easy it is to play. However, as a developer, you may set in stone additional ways your consumers can turn your app into a revenue stream – are you offering in-app purchases? If you’re using HTML5, how will you integrate the equivalent of in-app purchases to your users, what checkout will you integrate into, is there a charge?
With any application, you want to create something that’s visually appealing, powerful and has a look and feel that’s symbolic to your corporate branding – therefore the user interface (UI) design of your application is hugely important.
With native mobile applications, you have access to higher graphic rendering and better synchronisation that’ll often aid your consumers appeal knowing that the device they’re on can do more than a standalone static HTML5 web-application. Additionally, developing native mobile applications means consumers can take advantage of their devices hardware – you can integrate the camera, GPS, volume, search buttons, etc. directly into your application that can potentially update the UI. Of course this goes without saying, HTML5 has come a long way and developers have a batch of new API’s that allow them to access the devices battery, geolocation, though you’ll have to put the effect in to get these working on par with the native mobile application.
Performance is always a huge factor to the success of any application. Consumers want responsive (in the aspect of load times and non-sluggish behaviour), adaptive and flexible applications that are able to handle a high load of requests – in case the person using the application gets ‘click happy’ – you don’t just want the application to crash and ungraciously handle the issues.
Depending on the type of application you’re looking to develop will assess whether or not you need access to an Internet connection which can be the downfall of most web-applications. How do you access it when you’re stuck in a mobile signal dead spot? Native applications will typically aggressively cache all their content and resources, meaning you’re able to continue using the application when you go offline and simply synchronise all your data when you re-connect either through 3G, 4G or Wi-Fi. However, as applications become more socially connected, both types of application will suffer under the wrath of needing an ‘always connected’ device – even with native applications, there is typically something happening in the background, some form of asynchronous update.
Another factor you’ll want to consider is that of memory and optimisation. You always want to develop any application in the strictest standard possible. You want to ensure you’re not leaking memory on native mobile applications, and ensure you’re not hogging shared memory on web-applications. Native applications such as iOS applications have a huge selection of tools and utilities that able you to debug and test your application for leaks and assignment issues. Thankfully, with HTML5 web-applications you tend to bi-pass this issue altogether, or at least they’re not as major as most tablets, laptops and PC’s will have more resources available.
Overall, it’s valid to say that both native and web applications have an equal share of pitfalls when it comes to performance so it simply comes down to a matter of preference and what you know you’ll be able to manage and refactor when an issue does arise.
A QUICK ROUNDUP
As unhelpful as it may seem, I believe a conclusion on the matter is entirely opinion based and therefore biased towards what any developer prefers. If you’re well-versed in Objective-C, C, C++ or Java if you’re not, you may want to learn Objective-C – then you’d most likely enjoy and thus prefer developing native applications. Whilst if you’re already a web designer or developer, you’ll tend to sway towards the HTML5 responsive web-application approach – after all, that’ll cut down your development and provide a platform that can be accessed on all devices that have access to a web browser.
Every great mobile application, whether HTML5 based or native to any platform, will require an API. We’ve put together some great articles on designing a REST API server for your mobile application and some programming guidelines for setting up and implementing OAuth2 in Objective-C (for iOS apps).