Blog

What You Should Know Choosing a Technology for Your App

This article would be totally irrelevant in the early days of the smartphone era when applications were written strictly in the language prescribed by the proprietors of corresponding platforms. iPhone had Objective-C, Android phones had the Java-based Android SDK, and the late Windows Phone relied on .NET. Today, the mobile development landscape has undergone tectonic changes and is thriving with life. Just like in the evolution of life on Earth, new tools, libraries, and platforms get born, adapt, evolve, and either disappear or transform into something bigger and more complex.

The diversification of the hardware base coupled, ironically, with the unification of approaches to mobile app development, spawned a number of competing solutions that enable developers to quickly design, build, and publish mobile apps across multiple platforms. There are literally dozens and dozens of tools, platforms, and libraries on the market that aim to facilitate and expedite the creation of mobile apps and bridge the gap between web and mobile development. Programming in platform-specific native languages, however, is still standing strong with nearly no alternatives for particular types of apps and use cases. So is there the one and only technology that you should use for all of your projects? Is there a “silver bullet” platform that can potentially cover all of your development needs?

The Native vs. Cross-Platform Conundrum

The key question for any company or individual embarking on the creation of a mobile app is whether the native path is worth the extra effort and is really justified. Although native applications (we are talking primarily about iOS and Android) offer the greatest performance and arguably the best user experience across the board, they may not always be your first choice. Unless your app is supposed to utilize the hardware and software resources of the device it will be running on to the absolute fullest, chances are that you might be better off with a cross-platform option.

The native approach becomes a must if you are building an app based on a neural network, one with advanced video recognition or AR functionality – in other words, one that has low-level, low-latency access to the device’s array of sensors, the camera, and the GPU. In the majority of all other cases, cross-platform development should do the job. This will help you save time, use the same development and QA teams for both target platforms, ensure ease of future support and maintenance with a shared codebase, and enable you to quickly deploy changes to both versions at the same time.

In addition to the purely technical aspects of your app, consider the implications of your technology choice on the overall time to market and the speed of intermediate deliveries. If you decide to develop native applications, you will end up having two concurrent, yet asynchronous, work streams, two QA processes, and nearly twice the amount of project overheads. In the cross-platform scenario, the app’s business logic layer is shared between the two versions, making for considerably shorter development and testing cycles, as well as the ease of change management.

On the organizational side, native development for two platforms requires at least two developers, each specializing either in Objective-C/Swift or Java/Kotlin. Throw a couple of QA’s and a PM into the mix and get an ample-size team working on a single app. In the cross-platform scenario, you only need one programmer – and this person could be just a skilled web developer, because quite a few cross-platform solutions are based on regular JS (more on this below).

Classification of Cross-Platform Apps

Although cross-platform development tools are very similar in that they require the knowledge of just one language to deliver to different mobile platforms, they are far from being the same on the inside.

Xamarin by Microsoft, for example, uses C# as the core programming language for developing applications for Android, iOS and even macOS. If your website is built with .NET, you may not even need a dedicated mobile developer, since your very own .NET team can use the familiar language to build mobile apps for you. The resulting apps look and feel very much like native ones.

Similar to them are the so-called hybrid native apps built with technologies like React Native, Weex or Titanium. They use JavaScript as the base language, but then render the UI using native components, offering users a very smooth in-app experience. In React Native, for instance, you don’t really use HTML to build your UI, but describe it using declarative RN components that are transformed into native UI elements when the app is running. All “native hybrid” platforms take some time to get used to and may require higher than average JS skills, but once your developers have mastered them, building cross-platform apps becomes a breeze.

The next category of hybrid apps are “hybrid web” apps. In essence, they are interactive websites squeezed into the shell on a mobile app and rendered through the WebView component. Some of the most popular products employing this approach are PhoneGap (Cordova) and Ionic. The best thing about hybrid web apps is that they don’t have a steep learning curve and can be actually written by front-end developers with minimal training. In addition, parts of existing websites can be reused for mobile use with no or minimum changes. The only downside of Ionic and the likes is the potentially inferior performance and occasional sluggishness on “heavy” pages with lots of dynamic controls. However, this can be avoided by page design and code optimization – not to mention the fact that each new release brings more stability and rendering speed. Access to lower-level hardware and software components is fully supported through an array of tried and tested libraries. All of this makes hybrid web apps based on Ionic and Cordova (and other similar tools) a perfect choice for companies with no dedicated mobile development team and mostly working on relatively uncomplicated apps. The simplicity of this approach guarantees very short development cycles, ease of support and maintenance, and speed of staffing – JS developers are a lot easier to find than skilled Objective-C or Java programmers.

Making the right choice

The choice of the most appropriate technology for your mobile application depends on a number of factors:

  • Project requirements – implementation of complex features is often possible with native languages only
  • Availability of resources – the cross-platform approach enables you to use your front-end JS developers to build your mobile app
  • Project budget and delivery deadline – if time is of the essence, using a hybrid technology will help you save time and money

Let’s consider a few examples.

Example 1. You need to build an app for real-time video analysis with advance object recognition functionality

Recommendation: go with the native option. Such a solution will require direct access to the camera, low-level optimization and memory management, as well as potential integrations with external SDK’s.

Example 2. You are asked to build a dynamic product catalog for two platforms within a very limited timeframe.

Recommendation: choose Ionic. A catalog, even a complex one, requires absolutely no access to the device’s hardware and can be implemented using regular HTML, CSS, and JS.

Example 3. Build a social app with some geotagging features and video streaming capabilities. The app must have a native look and feel.

Recommendation: React Native. It offers access to many low-level features and makes your apps look like native ones.

Conclusion

We hope that the article above gave you a general idea about the logic of choosing the technology for your mobile project. However, make sure to consult a reliable vendor prior to settling on a particular product/platform. Here at Cortlex, we mostly use Ionic and React Native and love it for impressive extensibility and ease of development. We’ll be happy to hear from you and offer comprehensive recommendations on the development approach based on your business needs and technical requirements.