Last week I joined many others in the developer community to attend the O’Reilly Fluent Conference (#FluentConf) in San Francisco. One of the sessions that piqued my interest was Web vs. Apps, hosted by Ben Galbraith and Dion Almaer of Walmart.com. They started their presentation by explaining that every decade seems to fall victim to a classic dilemma. In the 1920’s it was New York or Paris? The 80’s had us asking Betamax or VHS? This decade it seems to be Web or Apps? This is a crucial question for anyone developing in the mobile arena. Here’s a look at both sides.

Pro App:
More efficient and better performance than the web: There’s no question that compiled native app code will run more efficiently than interpreted JavaScript. However, in his “JavaScript at 17“ keynote, Mozilla’s Brendan Eich explained that JavaScript performance would someday be competitive with native code.
No “paradox of choice”: With web technology a lot of time is spent up front choosing which tools and frameworks to use before getting started. This isn’t the case when developing with native app technologies, the choices are clearer.
Native GUI toolkit: Difficult to emulate outside of the native framework. As Ben put it, “when you go to a movie to see Robert DeNiro, you expect to see DeNiro (not an impersonator).” If you want a native experience for the user on their device, there’s really no other option but to write an app specifically for that platform. This is becoming increasingly important given data that native apps have more reach than the web.
Access to core device features: Access to a device’s camera, address book, etc. are virtually impossible with web technologies.
Pro Web:
Cross-platform VM: Write once, deploy anywhere. This can become exceedingly important when you want to hit more than one device platform, even more so if you need to hit those platforms in multiple countries. For instance if going the native app route, instead of 1 codebase, you’d probably have to keep a separate codebase for each platform, multiplied by the number of regions you’re targeting.
Live distribution: Allows for fast iteration, A/B testing and continuous integration. This is a huge advantage to the web. For example, Etsy has had great success with continuous integration.
Vibrant, enormous ecosystem: The “paradox of choice” can be seen as a good thing. The web community provides tons of different tools to suit your needs – you’re not locked down to any software suite, or operating system for that matter. With so many developers writing great tools, competition is high – which drives innovation.
End-to-End “harmony” with node.js: The ability to code entirely in one language from the front-end client app all the way to the server software.
URL’s: Ubiquitous, easy to share.
Currently there’s no real definitive answer to this dilemma. The web vs. apps debate is something that needs to be brought up on a case-by-case basis. Ultimately the end goal is to create the best experience for the user, and the right tools for that job vary between projects. A fast-paced twitch game might benefit from being coded as a native app because performance is a key factor however, you may want the advantages of live distribution because the interface is complex and needs continuous user testing and deployment. More often than not the answer may be a hybrid approach where you write a native app to get the benefits of performance and native UI, then load some or all of your app’s content inside a Webview to only write those parts once. The LinkedIn mobile app is a good example of this approach.
So will there be a definitive answer to the web vs. apps debate in the future? I’m not sure, but as a web developer I’m rooting for the web. I could elaborate on reasons why the future looks promising for web technologies, but I’ll save that for a later post.
By, Austin Happel, Smashing Ideas Front End Developer


