Native App: A Native App is an app written for a specific platform like iOS or Android—in other words, the app is written in the coding language used for development on that specific platform (Objective-C or Swift for iOS and Java for Android). When you build a Native App, you get access to all the hardware features exposed by the native code APIs and SDKs. For example, Apple iOS Push Notifications are one example of a feature that cannot be supported by an HTML5 App. The graphics and user interface of a Native App are far superior to any Hybrid or HTML5 app. You would choose this option, if you want to use the user interface components from Apple’s proprietary user interface libraries (i.e., the usability is better); you want full device hardware access—cameras, microphone, and geo-location; you want peak performance with no lag; you want users to be able to access the app off-line (i.e., without Internet access); you want access to push notifications and in-app purchase; and you want your app to de discoverable in the app store. On the downside, your code is less portable across operating systems and it is often the most expensive development option. It is our recommendation that if you plan to start a true, revenue generating, app-based business, this is the only viable option. Hybrid App: A Hybrid App is a form of web app that is deployed to a native platform like an iPhone or Android phone inside a native shell. This shell is usually little more than a web browser view (to display the HTML5 content) and some other hooks to allow your web app to potentially access some more hardware features that are not available inside a typical mobile web browser—e.g., push notification and in-app purchases. It improves code portability because if you want to port your app to another platform, you only need a native shell on that other platform to run it, the HTML5 content of the app is directly portable. These shells can be hand written, but can also be generated automatically by tools in the marketplace like React Native, PhoneGap, Cordova or Xamarin. These tools allow a developer to push the app out to multiple platforms (e.g., iOS, Android, Windows Mobile) quickly by generating the shell and packages required to do so automatically. This sounds powerful, and it is, but clearly creators of these third-party platforms have a lot of configurations and hardware to support, and thus, the solutions do not always work the same across all devices, and in practice, testing and hacking of special cases will be required by the developer to get proper functionality. You would choose this option if you want a balance between cost and usability; you want access to some (but not all) of the phone’s native APIs/SDKs and hardware; you want to be able to quickly deploy across multiple device types; and you’re not worried about high-end graphics. On the downside, because these third-party hybrid platforms (e.g., React Native, PhoneGap and Xamarin) need to support so many device types there are always implementation and usability issues to workout. In addition, you will only have access to the features of a new operating system 6+ months AFTER it is released by Apple, Google or Microsoft. In this way, your app will never be able to cutting-edge technology. While we are fully capable of building Hybrid Apps, it is our recommendation that this option is only viable for simple, lo-fi apps that are heavy on text and images, but don’t need much in the way of functionality or user interface. An HTML5 Web App: An HTML5 app is essentially a website with JavaScript code written to allow the app to perform dynamically, as opposed to a static website that you need to refresh to see the changes. It works interactively to make it feel like an app, but it is actually running in a web browser. It is essentially a website, which will support multiple viewports or screen sizes so that it works well on mobile. Because it is running in a browser, it is confined to what is possible within a mobile web browser. You would choose this option if you want to support multiple platforms with the same app/codebase; you want to deploy it on the web; you want the widest possible support across multiple device operating systems and manufacturers; and you want to be able to update your source files on your server and have them immediately deployed to all devices (i.e., removing the need for the app approval process). On the downside, your app is not discoverable in the app stores; it will never look and feel like a true mobile app; and you will have limited access to some of the software and hardware functionality of the phone (e.g., push notifications and cameras). It is our recommendation, that this option is only viable for view-only content where users are not expected to interact in any meaningful way.