On mobile, native apps have a lot of benefits over web apps. But, to avail of these benefits, native apps throw away a lot of benefits of web apps:
- You have to install native apps.
- You have to keep them updated.
- They take up space on your phone.
- They add yet another icon to your home screen or launcher.
- To do something, you have to stop and think, “Which app is this part of?” For example, to order groceries from Amazon, I open the Amazon app, but don’t find it. I later realise that I should have remembered to open the Prime Now app, not the Amazon app. To join a Meet call, I open the Gmail app. This is counter-intuitive. The web doesn’t have these rigid boundaries. You keep navigating smoothly from one web page to another without regard to which app they’re part of. It’s like driving down the road, not like crossing a border. The web just works.
So native apps have their advantages, but also their drawbacks. Can we find a way to have the advantages without the drawbacks?
Step 1: Better App Stores
Here’s one way app stores can offer a simpler mental model: replace the Download button with Open buttons. When you tap it, the app opens, downloading it if necessary. Whether an app is installed on the phone then becomes an implementation detail, like whether a website is cached. Users shouldn’t need to know or care. All they care about is that they want to use Uber, for example. You’re no longer downloading Uber, you’re opening it.
The home screen then becomes like a Favorites or History page of a browser: it shows you apps you used recently and apps you pinned. Every app you ever used doesn’t pollute your home screen. You shouldn’t have to periodically clean up your home screen. Just use what you feel like using and let the system take care of the rest.
If your phone runs out of stoage, apps get offloaded, but you don’t need to know that. In fact, we won’t need phones with lots of storage like 64GB. Even 16GB should be enough. Photos are also backed up to Google Photos or other services, and music is streamed, so lots of local storage shouldn’t be necessary.
Step 2: Better Integration
When we browse to a site on a phone, we often get a banner saying that an app is available. My mom asked me what apps are. I had to explain the technical details to her that an app is installed on her phone, and a web site comes from the server. She then asked if she should install it. And if she doesn’t, can’t she watch Youtube videos any more? So she installed an app, but kept using the web version of it — she thought that merely installing an app will improve her experience, without realising that she should retrain herself to use the app instead of the webapp from now on.
You can see how complex this is for someone not used to it. And that’s always a perspective product designers need to kind in mind. This is a level of detail users shouldn’t have to think about, any more than than I have to think about the compression ratio in the engine to drive my car. Users care about what they want to do, not technical trivia.
So the solution is that instead of having web sites show a banner saying that an app is available, the app version can be automatically opened. After installing it if necessary, but we already eliminated installation as a user-visible action in step 1 above. Imagine going to Amazon in your browser, seeing a spinner for a few seconds and bam! you’re in the Amazon native app .
When I use an Android app, I don’t care whether it’s built in Kotlin, Java, Flutter or React Native. When I use an iOS app, I don’t care whether it’s built in Swift or Objective-C. When I use a web app, I don’t care if it’s built in Vue or React. Why, then, should I care whether it’s a web or native app behind the scenes?
Currently, every company has an app, but they also have to maintain mobile web apps, because not everyone installs an app, because of the friction of doing so. This is a massive and redundant effort for the company. With this integration, they’ll no longer have to, any more, since nobody will be using the mobile web app any more.
In the future, web technologies can also be enhanced so that more and more apps are built using HTML, CSS and JS rather than native toolkits. But users won’t have to bother. This decision will be confined to developers, similar to a Flutter vs Swift discussion, which is where it belongs.
 If you want to go back to the web version, there’ll be an option.
Or if you want to turn this integration off completely, there’ll be a toggle in Settings.