I keep reading blog posts and tweets that insist you can build web apps that look & feel as good as native apps, but I’m not convinced you can.
The debate on Native vs Web apps has raged for years, but came to the fore after the iPhone was released in 2007. There was no Native SDK, you couldn’t build apps for the iPhone! But wait, the iPhone shipped with a fully fledged Web browser.
You’ve got everything you need if you know how to write apps using the most modern web standards to write amazing apps for the iPhone today
Steve Jobs, iPhone announcement 2007.
You can take that with a pinch of salt, but I still believe Jobs thought apps based on web technologies was a viable option.
Zoom a year forward to 2008 and Apple released the iPhone SDK. Native apps start getting built, the App Store launches and the rest, as they say, is history.
Why didn’t Web apps take off?
Web based apps had an entire year’s head start on native, they had (have) no app store restrictions (submission times, rules, rejections, etc), but we didn't see any web apps really take off.
So why didn't that happen? The simple answer, in my opinion, is that the technologies were’t up to scratch. The JavaScript rendering engine was slow, CSS support was good but any animations were laggy and you didn't have access to important hardware features such as the camera or GPS signal.
Another reason was the development tools just weren’t (and arguably still aren’t) available.
I still believe some of these issues hold true today, and as I noted in my last post:
Facebook recently re-wrote their iPhone app to be native due to performance issues with the HTML version.
If a company the size of Facebook, with the resources they have and the enormous pool of talent they’ve hired/acquired, can’t build a web app that matches native performance then I’m not sure who can.
What actually got me thinking about all this was a post over on Forecast’s blog: It’s not a web app, it’s an app you install from the web

Navtive vs Web weather app
Forecast is one of the best apps built using web technologies available today. It looks great, all the animations are smooth and everything is responsive. The Forecast team did a great job.
Their post is full of useful tips and helpful info on building web based apps, but one thing caught my attention:
If you can’t find a way to do something that doesn’t feel choppy or awkward, then just don’t do it. Design your interface around the technology you have, not the technology you wish you had.
I think this is where their argument that web apps are capable of being as good as native, trips up.
If you can’t find a way to do something using Web technologies, but you can do that thing using native, then “just don’t do it” doesn’t cut the mustard when your aim is to build true next generation apps.
The reason why every app that blows you away is native is because the development tools are available, the technologies are standardised across devices, and most important they work as expected. Today. Sadly, that’s just not the case with the web.
Another post, by Bruce Lawson, that I encourage you to read is What does the web platform need?
The advancement of what marketing and the press like to call “HTML5? (but mostly isn’t just HTML5) is closing the gap between the capabilities of native and web. But it isn’t there yet.
Bruce has created a gist asking developers why they choose native over web, some of the common reasons listed:
- DRM
- Geolocation in the browser stops tracking when screen goes blank
- Hardware access (camera, GPS, NFC etc)
- UI fluidity
- Developer tools
The list goes on.
As a web developer it pains me to write posts like this — I really want to be able to develop world class apps using Web technologies — but we’re kidding ourselves if we think web technologies can create fully fledged, next generation apps today.
I believe in the web (I develop for it after all!) and the potential and real advantages it has over native, so my hope is that within the next months and years we’ll see better support and access to device hardware and system APIs, giving web developers the ability to write those next generation apps.
The only way to do that is to create apps with web technologies that push the boundaries of what's possible today. We should be reporting bugs, requesting features, getting involved in specification discussions and generally evangelise the web. That's what I plan to do.
