In this episode of The Polyglot Developer Podcast I discuss the differences between native and hybrid mobile application development and my experience in both. Episode #2: Picking the Right Mobile Development Technology for Your Needs covers quite a bit and is broken into the following four sections:
This podcast episode is heavily based on my opinion, but I try to keep it honest based on my experience as a developer.
Episode #2 can be found for free on iTunes as well as Pocket Casts, but in case you’d like to listen from your browser instead, it can be heard below:
Because many of you would much rather read than listen, I’m going to summarize a lot of the material I discussed in the episode in this blog post.
When it comes to mobile app development I’ve released several apps to the various app stores. I’ve released mobile apps to Google Play, the Amazon App Store, and iTunes. These apps were developed using a variety of technologies and frameworks.
Let me throw some examples of apps that I developed.
Back in 2011 when I started developing mobile apps, they were for Android. I didn’t know the iOS development languages (and still don’t), and the hybrid technologies hadn’t taken off yet. My most popular Android application was and still is SQLTool. It is a relational database querying tool. It took me around two months of development time to complete the first version.
In 2014 I changed strategies and started to pick up hybrid development. Not too long after, I released a few hybrid apps, my most popular being an app called OTP Safe. This app was released for both Android and iOS. The thing about this app is that it only took me two days to finish. A huge difference vs SQLTool.
This brings us to the question, what are the differences between the two types of development for mobile.
I like to think of native development as development using programming languages and SDKs that Google, Apple, and Microsoft published.
When it comes to Android development, as of now, the SDK is for the Java programming language. With iOS development you have the choice to use Objective-C or the Swift programming languages, and with Windows Phone you’re using C#. There are plenty of other platforms like Firefox OS that use plenty of other development languages, but in terms of the three that matter, it is Android, iOS, and Windows Phone.
I feel that native development excels in its ability to create blazing fast applications for pretty much all platforms and device ranges. Take Android for example with all its device fragmentation. There are a ton of devices running all kinds of hardware. Native apps run fast even on the worst hardware.
The fragmentation in devices can still be seen as a flaw though. Supporting various OS versions and screen resolutions can be cumbersome, adding extra stress. In native development you need to know many different languages if you wish to support all platforms. This can be difficult.
I like to think of hybrid development as development that uses common web development technologies or frameworks that offer cross platform deployment using a single code set.
There are various frameworks and technologies available like the Apache Cordova lineup, Telerik NativeScript, and Xamarin. These technologies require much more consistent languages such as JavaScript and other web languages.
Being able to use consistent development technologies for all platforms gives hybrid a huge advantage.
It isn’t all good though. Just like native development, hybrid has its disadvantages too. For example, the plugin atmosphere is pretty much chaos. Hybrid plugins require native development skills, but if you only know the web technologies then you’re at the mercy of the plugin developers. This is often the scenario.
Developing native apps and hybrid apps are both a good choice. I think you’ll be satisfied either way, but if you had to choose, I might make my decision on the following criteria:
If you have a team of developers with skills in each of the different native platforms it may not be a bad decision to go the native route. However, if you’re an independent developer like myself, it probably doesn’t make sense to learn Java, Objective-C, and C# to accommodate all audiences. In this scenario it might be best to choose a hybrid technology, at least until you have a larger team.
I’m not saying this is always the case, but in some of the underdeveloped countries of the world people are using weaker devices. Weaker from a hardware perspective and an operating version perspective. If you’re targeting these groups, you may want to consider going native as the hybrid technologies that use a web view may perform poorly. Sure you can always install Crosswalk or some other library to boost performance in hybrid, but those introduce other issues. If your target audience has faster devices, maybe it doesn’t matter.
Like I mentioned, I was able to develop a hybrid app much quicker than I was a native mobile app. If you want to get an idea out fast, maybe you want to choose hybrid, whether it be for long term, or just until you have enough buy in to make it native.
I have experience in both native development and mobile web development with apps released from both. There are pros and cons to both, but in the end you really just need to pick a technology based on the needs of your final product. Don’t get suckered into a technology that you don’t need.
If this is the most recent podcast episode in The Polyglot Developer Podcast and you have questions you’d like addressed in the next episode, submit the question using Twitter.