In this article, I'm going to talk about the main methods of developing mobile applications in 2021. Unfortunately, I will mention only the most common options in the startup market. The main reasons are the cost of development and the speed of building a team. Young companies need the most effective, inexpensive, and time-tested solutions.
There are two basic approaches to mobile app development:
The native approach to the development of mobile applications implies that the company/startup implements applications for each platform separately and in different programming languages.
All native iOS apps are implemented on Swift or Objective-C. All new applications are developed exclusively in Swift. Objective-C is used only to support legacy code and libraries, which are very expensive to refactor in Swift. iOS developers of the "new school" are often familiar with Objective-C just superficially. In order to work with the old code base, to work with Obj-C classes there’re bridges to Swift.
In short, the situation with native iOS development is more than clear, you need Swift. This Isn't surprising, Swift was originally developed by Apple, specifically iOS and macOS development.
The Android apps are mainly developed with Kotlin or Java. Kotlin is backward-compatible with Java. To all that is written in the same language, you can address from another one. It works both ways. Developers are in no hurry to finally switch to Kotlin, but increasingly prefer to develop applications from scratch with it. But, unlike iOS programmers, who don’t actually need Obj-C, Android developers are absolutely required to have experience with Java.
Kotlin was created by Russian students of ITMO University specifically for Android development needs. The language is easier to learn and easier to access the Android SDK. That's why its community is growing so rapidly.
Benefits of native development:
- The application is integrated into the UI/UX of the system. The user of each platform has its own behavior patterns and habits. The native approach allows making the application as familiar and convenient as possible.
- Performance. The development uses tools for a specific platform to the maximum, thereby ensuring the performance of the application. Native code works perfectly with hardware, and even complex applications, with the right approach, will work the same way as pre-installed ones. We can guarantee maximum responsiveness of the interface and a good user experience.
- Quality. As a rule, there are much fewer bugs and crashes in native applications. Of course, developers are responsible too, but developing for one platform usually is much easier.
- There are no restrictions. All pre-installed applications and a large number of OS elements are developed with the same tools that the platform holder provides to you. The native code has access without any problems to the camera, microphone, GPS, accelerometer, notifications, and so on.
- Native applications are more flexible and scalable. You can safely expand the functionality and don’t be afraid that the application will be slow and work with failures. Native development tools actually have no limit to the possibilities.
The cross-platform approach uses specialized tools are taken into service, with the help of which you can implement an application for several platforms at once.
PWA (Progressive Web Application) is a cross-platform web application. This application can be opened on any device, but it uses the browser engine to work.
BUT! I strongly advise against developing mobile applications using PWA at the moment. There’re some reasons below:
- Unlike with Android, Apple restricts this technology a lot. Without native code and plugins, you won’t be able to release them in the Appstore. Despite Apple has given support for PWA in Safari, they are still hostile. Your app has to pretend to be a native.
- All browser restrictions apply to PWA as well. Especially in iOS.
In short, PWA is a new interesting philosophy that may push native apps out of stores in the future, but so far there are more questions than answers. Companies like Google can invest huge resources in the development and support of applications, but for everyone else, it is quite risky and unpredictable.
Hybrid apps are more of a cross-platform approach to native apps development. Hybrid are applications that are developed using the same technology for several platforms at once but are assembled into separate native applications. Such development is usually built on libraries that somehow have native code on the inside.
- A common code base for most of the functionality. For some functionality, such as accessing the server API, platform developers write almost the same code. In a hybrid approach, this functionality can be made into a separate code that is common to all platforms. Working with such code takes twice fewer man-hours as in the case of native development.
- Resources optimization. As a rule, simple projects are built a little faster and only by one developer. This is probably the main advantage of this approach to application development.
- UI/UX Design. All platforms have their own guidelines regarding the design of applications for them. These guidelines are made so that the application doesn’t break out of the style and does not annoy the user. In cross-platform you have to design for all platforms once or develop a design for each OS separately. But it takes a lot of resources and cross-platform loses its meaning.
- User experience. Performance, the responsiveness of the interface, and speed of operation in cross-platform apps much worse than in native ones.
- Functionality. Almost every cross-platform solution has some restrictions. Some technologies work not well with the camera, geolocation, offline operation, and device memory. There’s a big risk of functionalities that are very difficult to implement. And then you’ll have to develop natively.
- Quality. The cross-platform approach is a compromise between resource savings and the quality of the final product.
In a nutshell, the main problem if you’re developing a quite complex product, you’ll have to support and extend actually 3 codebases, instead of 2, as with native. All the restrictions on functionality and performance can be solved, but it’s not easy and two more developers will be needed. There’s a risk of reaching a dead end and getting out of it will be more expensive than if the application was originally developing for two platforms separately.
The most popular hybrid solutions at the moment are React Native and Flutter.
React Native was developed by Facebook and is actively used in its apps. Flutter was invented by a team inside Google.
- React Native is older, development takes longer, but less risky.
- Flutter is more progressive, it’s possible to build MVP faster, but due to the fact that the technology is new, the risks are still high.
In the foreseeable future, Flutter could capture a large part of the mobile app development market due to the fast-growing community and the huge support from Google.
Both technologies have the risk of very expensive and complex support and development. As the functionality grows, it becomes more and more difficult for the application to keep the quality and performance high. So, for example, Airbnb abandoned React Native, but not in favor of Flutter, but in favor of the native code. But for a long time, they worked with React Native and made a huge contribution to the RN community.
At the moment, cross-platform applications are far inferior to native ones in terms of performance, user experience, interface responsiveness, and UI/UX. On the other hand, technologies such as Flutter and React Native, and even PWA, can decently save your resources on simple projects. Founders just have to decide on priorities either quality or saving resources for marketing as an option.
We always recommend looking out for the requirements and the situation in your market. At the stage of discovery, based on your requirements and plans our team will be able to select the appropriate stack of technologies and talk about the risks associated with each of them. The decision is always yours!