As a company specialized in app development, one of the main questions that we receive from our customers is: native or hybrid app? To put it simply, those were the main options until now -as well as the evolution of web technology itself, in particular progressive web app.
Developing apps with React Native implies developments with a unique code for both iOs and Android.
Who is behind this technology? The main driver is Facebook -a fact must also be borne in mind and which could be the subject of a new post regarding related implications- which the sector has, in principle, taken as a being a guarantee. In addition, companies like Instagram, Airbnb, Skype, Tesla or Uber (regarding Uber Eats) are already opting for this framework for their own apps.
To understand the impact that this technology can have on costs when developing an application for Android and iOs platforms, it is important to remember that a native app, with full functionality and quality, required so far programming a separate app for each platform: Objective-C or Swift for iOs and Java for Android – virtually doubling the production costs in the development and testing stages.
But, isn’t that what hybrid apps were doing? The answer is NO. Hybrid apps (such as those developed with Cordova, Ionic, etc.) were basically running web apps in app browsers. One could say that it was about developing an app-like web and running it in a container called Webview. This technology is very useful for simple and ephemeral applications but it is, however, insufficient for apps that really need to use all the possibilities of mobile devices. This means functionalities such as the camera, asynchronous notifications, gps, nfc, motion sensors, offline running, etc. And the experience has never been as stable and smooth as with a native code-developed app. For this reason, none of the most widely downloaded apps in marketplaces have been developed with hybrid technology.
And how does React Native manage to provide a native experience with a single code? In easy to understand terms, this technology offers in practice a ‘translation’ functionality, and executes the React Native code in Objective-C for iOs and Android Java. The user experience is therefore identical to the experience with a native application. Indeed, React Native is not a webview: everything run by the user on his device is absolutely native.
In addition, developers will have access to all the features provided by native SDKs so, unlike hybrid development, this technology allows exploiting 100% of the platforms’ possibilities (iOS and Android) and, in consequence, also the devices’. To answer the question above: it is likely that React Native becomes the default code used by many developers or app development companies, leaving native for projects with very specific characteristics.
Should we then stop programming in native? Native code is still currently offering a greater degree of independence, which large projects, for which costs are not a main concern, continue to value. It could also make sense to develop in native, without going through an “intermediate” framework, on projects with clearly different apps for different platforms. In any case, project objectives must always be assessed in order to decide, with an open mindset, which infrastructure and technology best meets the requirements on a case by case basis. In technology, being sectarian is not a positive thing.
Can everything be done with React Native? Although –logically- one of the main concerns is knowing what can and cannot be done with React-Native, the answer is a resounding yes. The development community for this platform is constantly growing and Facebook’s own developers are constantly deploying new native features to expand possibilities. A further React Native advantage is that, if necessary -a potential functionality or the integration of a third-party service-, it is possible to integrate native code into a project: choosing React Native therefore does not mean giving up native code.
What are the requirements regarding development teams? It might seem that developing in React Native does not require knowledge on native, but in all truth, in order to ensure app development success with React Native, teams must be both expert in React Native and in native language, given that it is very likely that a percentage of the project code is implemented in native, as mentioned before. Moreover, knowing the iOs and Android environments will help with project implementation enormously.
Cuatroochenta and React Native
What is Cuatroochenta’s experience with React Native? We have been offering this technology to our customers for months already and we have developed a number of projects with it. Legends is the first project developed by Cuatroochenta using this technology, and has already been launched on the market. In terms of design, the experience has not implied any changes, since the task was replacing technology without limiting user experience possibilities.
No limitations have been observed. In terms of development -where this technology has had the most impact-, providing the team with the possibility to work under a single code has proven to be, in terms of quality, a very positive experience: everyone works towards evolving and improving a single code, by multiplying efforts and generating synergies -unlike with native code, where maintaining synergies between different platforms’ teams is complicated at times. To put it simply, having two 3-people teams working on a different code each is not as efficient as having 6 people contributing to the same code. This has implied a significant improvement in terms of speed and especially quality when supervising codes, solving problems and proposing solutions.
In the final phase, a clear optimization of QA (Quality) processes has also been detected -specifically, in the execution of beta-test, which has in the end been developed with a single code. Consequently, any possible bugs are shared on different platforms and solutions are developed only once. The publishing processes, on the other hand, are exactly the same as in the case of publishing native applications.
Another essential aspect is the projects’ maintenance and evolution. Again, in these cases, React Native brings a clear advantage by focusing all efforts on a single project code. This means in practical terms that, where a new functionality had to be programmed twice before, it is now only necessary to program it in React Native, so resources can be used for improvements instead of work duplication.
In general terms we are very satisfied with the result and especially with the development process, which allows projects to improve their experience and optimization while maintaining the same budget.