"I need to build a mobile app…where do I start? HELP!"
There is no shortage of confusion around the question of which path to take when targeting mobile devices. Entire white papers cover this topic and are still incomplete. With that in mind, my goal with this post is to provide, perhaps, a starting point. Getting answers is critical, of course - but knowing the questions to ask is the first step.
Let's start with the obvious question.
Perhaps the easiest to answer (though this isn't an exhaustive list - remember, just a starting point):
Application Type | Pros | Cons |
Native |
|
|
Web |
|
|
Hybrid |
|
|
So which one should you use? To quote the classic
This is an incredibly fascinating time to be in development. I think it's nearly impossible to overestimate the level of disruption we are currently witnessing – and not just the mobile & tablet disruption of the desktop market, but the disruption within
For more financial incentive, consider this: in the Developer Economics 2013 report, VisionMobile had 82% of the survey respondents indicate they were developing mobile apps to make money. Out of that group, 67% of them are below the "app poverty line" - making less than $500 per app, per month. Ouch.
This chart, from VisionMobile's Developer Economics 2013 report, provides a nice view into the selection
If you've answered "yes" to any of the questions above, and you are not critically dependent on device-differentiating features, then a hybrid approach is definitely worth looking at.
It's no secret - if you build
Remember that Cordova-based apps use the native web view of the target platform - so UI performance is constrained by the performance of the web view. As many Cordova/PhoneGap developers have discovered, this has made hybrid apps targeting older Android versions (v 2.3.7 and earlier) especially painful at times. This is a very important consideration - given the fact that our desktop browsers are typically much more capable at brute-forcing their way through inefficient JavaScript, DOM reflow, etc., paying close attention to the performance of your code is essential. In other words, while the native web view implementations matter a lot, many current performance problems in hybrid mobile apps could be drastically reduced or eliminated with better engineering discipline in how the app is built. Andrew Trice has a fantastic post on performance and ux considerations here.
A Forrester report makes the recommendation that many companies should start with the web first, then move to hybrid applications. Of course, this really depends on your target audience, what kind of discoverability you want your site/app to have, whether or not you need offline capabilities, etc. The good news is that – if care is taken in how your web application code is structured – a large portion of it will be re-usable in your hybrid application. (In theory, nearly all of it could be re-usable, but even modertately complex applications will run into differing implementation needs in hybrid vs web scenarios.)
Just as there are trade-offs between native and hybrid approaches, web vs hybrid has them as well, as nicely described in this chart from VisionMobile's 2012 Cross Platform Developer Tools report:
We haven't even talked about the abandonment rates of each cross-platform tool, the statistics on the average number of cross-platform tools each developer will use this year (around 2), nor the ever-accelerating level of hardware capability in mobile and tablet devices. It's an area ripe for continued disruption and exciting advancements. Sure, hybrid development for native-niches, like high-performance games, lags behind what is currently possible with native implementations. However, the gap between hybrid & native for line-of-business, social media and other (more common) types of applications continues to narrow. When you combine all of the factors:
…the question isn't "why would you consider hybrid apps?", but "why wouldn't you consider" it?
Jim Cowart is an architect, developer, open source author, and overall web/hybrid mobile development geek. He is an active speaker and writer, with a passion for elevating developer knowledge of patterns and helpful frameworks.