There is now a lot of chatter about “progressive web apps.” What is it? It’s a way to build an app using the tools of website development. The two most popular frameworks for creating progressive web apps are Ionic and React. (Ionic is built on AngularJS which is backed by Google. React is backed by Facebook.) The most obvious reason why this approach is attractive for anyone considering creating an app is cost. These frameworks allow you to write once and deploy it to both iOS and Android, which means you would not have to hire and manage two separate teams. But the more important reason, I would argue, is agility.
In the end, user experience is always better with native apps (apps written in the native language of each platform) but this superiority is experienced only in the aspects related to performance, not in the design of the user experience. Native apps run quicker and smoother overall, which certainly has an impact on the user experience, but this is an easy part of creating a better user experience. It’s like buying a more powerful computer to enhance user experience. Naturally, your experience is better with a faster computer but you do not have to be smart, talented, or creative to buy a faster computer. It is wiser to tackle the harder and more uncertain problems first. In the early stages of app development, your focus should be on the design of the user experience. If the design is superior, you can always easily enhance it by writing it natively.
So, what would allow you to design a great user experience? Agility, that is, the ability to iterate the design as many times as possible given the same amount of time and budget. For this objective, progressive web apps are far superior to native apps. A popular mantra among user experience designers is “You are not your user.” What it implies is that you should not assume you know what your users want. Your job as a user experience designer is to know how to discover what the users want. You are the expert of the process of finding the answer. It is not your job to know in advance what the answer is. The arrogance implied in the latter can mislead you.
If you are on board with this philosophy, you should be looking for ways to test your design as frequently as possible. With native apps, this is very difficult because there are many hurdles to putting the latest iteration in the users’ hands. Conventional apps must be distributed through app stores, which means they need to be reviewed and approved by a party you have no control over. Furthermore, even if they are approved, the users still have to download and install the latest updates. This whole cycle can take weeks. And, you always have to deal with users running on different versions of your app, which complicates the process of getting their feedback. You would find yourself constantly asking the users, "Have you installed the latest update?"
Progressive web apps eliminate these problems. Because a progressive app can run on a conventional browser, in the early stages, you can simply serve it as a website on your own web server. Without going through app stores or the process of installation, anyone can immediately use your app. And, when you make a change, everyone gets it immediately and simultaneously. You can make as many changes as you want within a day. If a user complains about a particular design, you could even tweak it while he is still on the phone. This is powerful in the early stages of development when your app must evolve very quickly. Once the app matures in design, is proven to be a success, and is generating income, then you can safely allocate a budget to write the native versions of the app.
The success of certain apps, like 3D video games, is heavily dependent on the performance, but these apps are relatively rare. If the progressive version of your app is not successful, it is highly unlikely that it would succeed even if you create a native version of it. So, by choosing to go native from the start, you would be severely limiting your ability to realize the full potential of your app.
One legitimate concern, however, is the use of hardware-specific or platform-specific features like push notifications, GPS, camera, and accelerometer. But many of these features are now accessible from mobile browsers, and more are being added by Apple and Google. (Google is currently ahead of Apple in this area.)
If you are porting an already successful app, it would make sense to go straight to native, but if you are developing a brand new app, the progressive approach provides the flexibility you need to arrive at the magic formula that users want. After that, you can safely go native without wasting time or money.