Why I’ve Gone Hybrid Over Native For Mobile Apps

I started developing mobile Android applications in late 2011.  It wasn’t until 2012 that I released my first application to the Android Marketplace, now known as the Google Play Store.  Up until early 2014, I only made native Android applications using the official Android SDK.  As of now, I have only been using web technologies to create mobile hybrid applications for Android and iOS.

The following will explain why I’ve chosen to develop using modern web technologies rather than native mobile languages.

I’ve managed to develop a small list of native Android applications over the years.  A few of these native applications are as follows:

During my early app development adventures, I never released any iOS applications because I already knew Java and didn’t have the time to learn Objective-C.  I made several attempts at an iOS application, but they all fell flat because of the time commitment in learning something new.

At the beginning of 2014 I decided to start mobile application development using web technologies.  In particular I chose to use Ionic Framework on top of Apache Cordova.  A few of the hybrid applications I made are as follows:

All my applications, native and hybrid, have mostly positive reviews and if you visit the apps on Google Play, you’ll see no reviews include mention about how the application was crafted.  This is an important thing to notice because many haters will attack developers on the idea that hybrid applications do not perform or look as good as native applications.  This is simply not true.  Native or hybrid, if the developer or designer is no good, the application will suffer regardless.

After having seen both worlds of mobile application development, I have chosen to stick with the hybrid path for the following reasons.

 

It’s cost and time effective

I’m an independent developer.  I come from a Java background and don’t have the time to learn a new language as complex as Objective-C.  Even if I did learn Objective-C and was comfortable in developing native Android and iOS applications, I still wouldn’t have the time to be able to support both platforms with updates.  It would just take too long and my time could be spent elsewhere.

Imagine having an infinitely complex mobile application.  Wouldn’t you rather update a single piece of code and have it work everywhere?  Making a change in one place is better than making the change in multiple places (Android, iOS, Windows Phone, ect.).

Are you a company that has a lot of money to throw around and can afford to pay a team of native Android and native iOS developers?  Great!  If you’re an independent developer or are in a company that would rather spend its money wisely, this native stuff may not be the best choice.

According to Glassdoor, the American national salary average for Software Engineers in 2014 is ~$90,000.  Imagine paying this salary to an engineer specializing in each of the available platforms on your team.  Sure you can have an engineer be responsible for more than one platform, but is that going to get you the best possible application for the price?

 

Web technologies are easy to learn

Anyone and their grandma can build a website using HTML.  It may not look nice, but the same could be said about someone building a native application.  The magic comes in with JavaScript and the fact that hybrid applications can use just about any flavor of it.  For example, the hybrid applications I made with Ionic Framework use AngluarJS.  There is a good chance you already know JavaScript and even if you don’t, it is a lot easier than learning both Java and Objective-C.

 

The features still exist

When first making the switch, I thought maybe I would lose out on some of the native device features that I came to know and love.  This is not the case as there are many native plugins available that give you access to core device features such as camera or GPS.  In OTP Safe I have a barcode reader that makes use of the native camera.  I was able to accomplish this in about four lines of code that worked on both Android and iOS platforms.  If I were to do the same with native code, I’m sure it would have taken more lines and a longer time.

 

Conclusion

I have released applications that are native and applications that are hybrid.  Both get plenty of downloads and positive reviews, but I was able to make the hybrid applications in a fraction of the time.  Native developers might try to use performance or features as an excuse to not develop hybrid, but in reality, these two issues are disappearing every day and are almost non-existent.

Nic Raboy

Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.

  • timonweb

    I agree with you Nic. It’s even easier to work with end clients. Most clients think and look at mobile app as it was website: they can change design decisions, they want to see a preview during development and hybrid frameworks give us this possibility: we can quickly change design without significant business logic code changes and we can send client a link to an app which is running in a browser instead of creating test builds and keys, certificates and what’s not just to be able to show them progress as it was always the case with native apps.

    One of my clients was actually shocked when I told him that I’ll prepare ios, ipad, android and android tablet version within a single app budget. This is works!

    Of course, when you’re Facebook and have thousands of devs and you need to find a job for them, native is the way to go, but for small/mid businesses and for startups that don’t do heavy graphics in their app hybrid is a very nice pick.

  • Remington Chan

    This is a wonderful insight Nic! I’ve only started tinkering with Android Studio (as I started with Unity, which is technically hybrid in some way, but for games) in the hopes of diving in Native development, and it’s not that I’ll drop it completely (as it is a great learning experience) but now I am encouraged to try hybrid development! It’s been a goal of mine to delve into web dev and web technologies so I guess it could all come together.

  • DaniloOliveira28

    I agree with you Nic, we are developing one app and when I propose to be hybrid the same excuse come to table. But if you take new devices like iphone5s+ and Nexus 5+, the performance is almost imperceptible! If you are a good developer you can handle these performance problems!

  • Hi Nic.

    I wonder if it is possible version of cordova, ionic and crosswalk use for your projects. I recently tried and I get errors when compiling with crosswalk. Maybe it’s that version has some bugs.

    Greetings.

  • Nolan Lawson

    Great post. For triple-A apps that have a big budget behind them, I think the need to go native for 60fps, gestures, and other niceties will always be there. But when I write my next personal app, I’ll definitely go hybrid. It’s hard to beat supporting iOS, Android, Firefox OS, and Windows Phone with a single app.

    One thing I kinda wish, though, is that hybrid frameworks would play more to the strengths of the platform. You can get 60 FPS on the mobile web with CSS animations, but that limits our UI vocabulary to stuff that we can reasonably animate without a lot of JavaScript interaction.

    For instance, Ionic is great, but the default side menu only animates well when you tap the hamburger, not when you try to drag it (video: https://www.youtube.com/watch?v=OxLtyG-CMEs ). The scrolling list also can’t reach 60 FPS, even if you’re using Crosswalk and collection-repeat ( http://www.pocketjavascript.com/blog/2015/2/3/the-quest-for-smooth-scrolling ). However, apps like the Chrome Dev Summit site look great ( https://developer.chrome.com/devsummit/ ), and so does this thing ( http://reddit.premii.com/#/r/news ).

    So I feel like there are UI patterns we can use to hide the web’s weaknesses and highlight its strengths, but trying to imitate the native UI idioms is not getting us there. That being said, I don’t have a ready replacement. TouchstoneJS and Reapp look promising.

    • Thanks for taking the time to share all this. I believe you were the one with the great article regarding performances with video clips. Great stuff. You know first hand when it comes to performance.

      In time I think we’ll reach that 60 FPS. Mobile web rendering is getting stronger with every update.

      • Nolan Lawson

        Thanks, man. I think maybe you’re talking about this post? http://www.pocketjavascript.com/blog/2015/2/2/javascript-on-mobile-closing-the-ux-gap

        I agree, the web is still a solid bet. Browser vendors have taken note of the Flipboard fiasco; I think new APIs will arrive that will give us better control over smooth animations (WebAnimations, animation triggers).

          • giovannicarus

            Thanks for the insight on hybrid apps! But how about the last update on that very post you’ve shared?

            “So I’m still stuck at around 45-50 fps rather than my desired 60. But to be honest, even at 60 fps, I’m a bit disappointed. It just doesn’t look native. And furthermore, the recent announcements about ReactJS Native have sort of soured me on even trying to reach near-native list views.”

            It’s possible to build responsive hybrid apps, with a fairly good performance, we all agree on that. But to say that they look like native? Well, it’s not that true, not yet. If the community work hard, in some years, maybe…

            We did some thought about that matter in our blog: http://blog.ckl.io/should-i-develop-hybrid-mobile-apps/

  • Stephen Adams

    I also agree with you Nic, for independent developers looking to build a cross platform app I think hybrid is becoming a serious platform. The days when you get a iOS version out first, then 6 months later the Android version comes out because the Android market share is not so big. I think now if you are creating a mobile app, both (if not all three including Windows) platforms need to be targeted with the first release of an app.
    That’s why I think hybrid mobile development will grow over the next years. Look at the number of companies who are releasing hybrid solutions (Ionic/Drifty, Telerik, Appcelerator etc). I also think that companies like Drift with Ionic have shown that the concerns about speed of hybrid apps are becoming less and less, and like you said people in the app stores don’t leave comments about the technology an app was built in. It’s the features, the design and the experience they are concerned with.
    As a independent developer I’m planning to use hybrid development a lot more and I’m glad to see posts like this where developers are pushing forward with hybrid.

  • Michael Thompson

    Hi Nic – well written article. As someone who has done some PhoneGap/Cordova development (with Sencha Touch & angular), as well as a couple of projects with Titanium, I definitely see a place for cross platform applications. I’m doing primarily native development now, though (mainly iOS) and do see a real improvement with speed/performance, not to mention the advantage of OO development where you can reuse code from one app/project to the next. My basic guideline is to let the requirements dictate the technology required.

    Looking forward to reading more of your blogs!

    • Although the requirements may still dictate, their power over the technology is quickly fading over the years.

      Thanks for sharing your experiences!

  • conorluddy

    “the idea that hybrid applications do not perform or look as good as native applications. This is simply not true. ”

    Your two samples of hybrid apps that you built don’t look like they’d be particularly challenging for a device. Try building something that has a lot of beautiful transitions and animated parts, with native-like interactivity via gestures etc, and I bet you’ll hit a wall real fast.

    (Edit: As a web dev myself I’d love if hybrid could actually be as nice and smooth as native, but it’s a while away yet)

  • Gavin Engel

    Nic, your thoughts on Telerik Nativescript?

    • I’ve honestly never used it so I don’t think I can form an opinion about it.

      Sorry about that.

  • Badru

    Great post.

  • Hybrid mobile apps is developed using the xamarin.some files are not supported in hybrid mobile apps.

  • Hello Nic,

    We have also used a hybrid method of app development and it has brought us a significant amount of success. We have written a blog post about it and other methods as well. In addition, we have mentioned advantages and disadvantages of each method : http://blog.fluidui.com/html5-native-and-hybrid-choosing-the-best-approach/

    We hope that this blog post will be a good addition to your article.

    Thanks,
    – Yuri

  • Infidica

    Hi Sir!
    Nice work and thanks for sharing your experience.

    I’ have an small question about taking an decision of coding an app and want to hear same information before.
    Do you think will be suitable for coding an hybrid app: ionic, sqlite with about 10.000 products that will sync online?
    Or better code complete native app?
    What do you think, will work smoothly the hybrid solution or Im getting into problems, thinking on user experience?
    Best regards and waiting for your idea..

    • Depends on what else is involved with your application. From a data perspective, either should accomplish what you need without degrading the user experience. However, there could be more to it. What kind of application are you planning to make?

      Also, I cannot recommend using SQLite if you’re planning on synchronizing data. It will create a very stressful experience.

      Regards,

      • Infidica

        Hi Nic!
        We need to develop an offline – online sync app for taking orders from customers.

        So the mobile app need to have all products, customers and orders for an agent, then he can take orders and sending to server.
        We have created the REST API (json) and now we need to take an decision of codding the mobile app.
        What could be the problem with sqlite? which other solution could be used?

        Thank you in advance.

        • Keeping two SQL datasources in sync and handling collisions is a nightmare. Then on top of that you’re doing a conversion to JSON.

          I recommend Couchbase for Ionic Framework and native Android or iOS applications. It is NoSQL (JSON format) and handles all the syncing between server and device for you.

          Regards,

          • Infidica

            Hi Nic!
            I’m gone have a try and let you know.
            Best regards

          • Yep, report back to tell how it goes 🙂

          • Infidica

            Hi Nic!

            Came across with other problem 🙂
            1. need to create authenticated procedure for couchdb and also user management (extracted from mysql)
            2. need to sync bidirectional couchdb with mysql 🙂

            So not so easy task …

            Using my existing web services will make my life easier (compare the tables – by simple counting) and sync them…
            I’m gone see how could be solved in an easier way 🙂
            Regards

  • Infidica

    Hi Nic!
    We need to develop an offline – online sync app for taking orders from customers.

    So the mobile app need to have all products, customers and orders for an agent, then he can take orders and sending to server.
    We have created the REST API (json) and now we need to take an decision of codding the mobile app.
    What could be the problem with sqlite? which other solution could be used?

    Thank you in advance.

  • karmjit singh
  • Flavio Filho

    I developed hybrids apps, and turned to native, due to performance and look and feel.
    If it is not a concern, so go hybrid and be happy.

    • Have you seen NativeScript? Telerik NativeScript uses native layout components so you aren’t left with an HTML and CSS front-end, but instead an actual native layout.

      I hear you though. At times, Apache Cordova apps can feel slow in performance. However, much of those times are developer fails.

      Many ways to solve a problem 🙂

      • Flavio Filho

        I’ve take a look on Telerik’s, but before to take hands on, I’ve search on opinion of other developers, and what I found discouraged me to spend time on it. Maybe in the future I may have a try and if I find it’s good I can reconsider, who knows.

  • Hey Nic. While I’m leaning towards native app development, you presented some really interesting points. I will surely give this subject a closer look now. 🙂 Recently my company published an article on Native vs Hybrid app development, if you would like to give us some feedback, it would be great! – http://howwedostartups.com/articles/Native-vs-Hybrid

  • We have written a blog post about it and other methods as well. with native-like interactivity via gestures etc, and I bet you’ll hit a wall real fast