Photo credit: Nina Matthews Photography

Photo credit: Nina Matthews Photography

“If any man says he hates war more than I do, he better have a knife, that’s all I have to say.” - Jack Handey

If offered an app both natively and through the browser—with the same attention to detail given to both—people readily choose the native option. Why?

Amid passionate discourse from all sides of the issue, I couldn’t find a single explanation for why people prefer native apps.

As I’ve talked to my industry friends, most have expressed the same sentiment about using browser-based apps that I feel, every time I go to use one. There is some kind of emotional or mental barrier that makes a browser app feel harder to use.

Then it occurred to me. There is no single explanation. The reason browser apps lose this fight is because of a raft of small things. It’s death by a thousand cuts. But what is doing the dying in this overwrought metaphor? Well, I’ll get to that in a minute. First, let’s run through just a few of the cuts you get with a browser app.

Slice and Dice

  1. Reliability - To the user, the UI is the app. When you switch to a native app, there’s no UI middleman to fail you. You may still have data problems if your native app is connected to the web, but the UI is there instantly. No waiting for uncached resources or CDN-hosted files to load. From the user’s perspective, they never see the chrome of the UI loading in. The app is just reliably there.

  2. Class Warfare - One of the things an OS does so well is that it ties a slew of disparate apps and experiences together seamlessly. You get built-in app switching with keystrokes, access to the global system menu, notifications, etc. A native app feels native because it’s a first-class citizen in an ecosystem and flow that you’re used to. When you switch to a browser app, you’re entering a world of abstraction. And nothing works exactly the way you expect. This context switch is better on iOS, but it’s still there, in dozens of subtle ways that you run into when you try to do some things you take for granted in native apps.

  3. Context Switching - When making the context switch to a browser app (especially on a desktop OS), it’s a lot like using an app in a virtual pc environment. Instead of being a step away, it’s two steps away. That may not seem like a lot, but it’s double what you’re used to. And it’s three steps away if you have to figure out which tab your app is running in. Also, much like a virtual machine, the performance you expect is just not there. In a browser app it’s worse because much of the processing is taken somewhere else along with your control (or perception of it, anyway).

  4. Sessions - One of the biggest issues for me with browser apps is the ubiquitous problem with sessions. If you haven’t used a browser app in a while, the instant you make that context switch, you could be faced with an authentication wall. Then you either have to consult your keychain app (which can be extra painful on iOS) or you have to consciously remember your login credentials. Either way, an onerous cognitive load has just been placed on you. By contrast, a native app gets OS-level security that doesn't require this. When you launch it, it’s there. Logged-in, ready to go. Unless one deletes the native app, they only see the login screen once. And considering that the login/signup screen presents the worst user experience that people usually ever have, this—alone—is a huge win.

  5. Notifications - browser apps are always pull, rarely push. In iOS, you get the benefit of system-level notifications for your app. With a browser app, the best you’re going to get is an email or sms, etc. This may be different on Android, but it’s certainly the case on iOS.

  6. Cache - With a browser app, you get a monolithic cache that can be destroyed. That means that unless you’re using Fluid (you should be), clearing your cache in browser is like a rainforest slash and burn.

  7. Hockey Metaphors - When I’ve discussed the issues around performance with advocates of browser-based apps, they always reassure me that the technology has finally caught up. But as I see it, this is never not going to be a problem. Developers will always be pushing the boundaries of what’s possible with apps and they will always need those apps to have access to the most amount of performance, even if it’s only for making the experience delightful. Because of this, browser apps will always be skating to where the puck used to be.

Reliably Unreliable

Trust. It’s trust that’s doing the dying here. I believe that when you go to a web app, your trust is undermined by the potential for any of the items mentioned above to happen. Someone could build the most amazing web app ever and they’d be battling our history with hundreds of other web apps that have let us down.

We’ve been conditioned for web apps to suck.

Conversely, people have also been conditioned by the fantastic experience of the App Store. They know that they can go there and find something they need, see reviews on it, get a modicum of confidence and download it the way they're used to. Anything outside this is now alien. People have learned to trust the App Store “Way of Things.” And they’ve learned that the apps they download from the App Store are not just easy to use, but delightful and fast and just “there.” In fact, people now take this all for granted. And none of that is just granted with a browser app.

Power to the People

Ultimately my biggest qualm with most arguments for building browser-only apps is that they seem to come from the perspective of what’s best for the DEVELOPER. When an organization is making the decision not to spend developer money on building native, what they’re saying to me is that they value development costs over customer experience. I believe to do it right, you should offer your app in the way people want to use it the most. That may mean doing it browser-only, but it usually doesn't. A business will always benefit from giving their customers a great (or insanely great) experience.


By writing this, it may seem like I’m taking sides in a flamewar. We love taking sides, don’t we? There is something very safe and reassuring about making a decision and joining our tribe of choice. We do it in politics, in religion, and certainly in technology. The debates over which programming language is the best are as old as our industry. So it’s no surprise that there are two distinct tribes out there pushing for their platform of choice: Native or Web.

Mysterious Trousers has always advocated the use of both browser and native apps. Web apps are actually our first love and we are able to clearly see both sides of the issue. There is a place for both. But as a business, we’re going to do what makes the best possible experience for the customer. Right now, that happens to be native first.

I may be wrong, but it seems like the voices of the browser tribe have quieted a bit in the last year. This is probably because so many companies are seeing the value in living happily in both camps. They’re practical businesses, making a practical choice.

Go to where the people are.