The Decline And Fall Of The Appian Empires

Next Story

Siri, What Were Your Top 5 Hacks And Mods Of 2011?

A couple weeks ago, MG wrote: Android development itself remains a huge pain in the ass. I hear this again, and again, and again. Which took me a bit aback. I’ve developed numerous Android and iOS apps (though not games, so I can’t speak to the differences there) over the last few years, and neither set of developer tools seems to me to be hugely superior: both have their strengths and their really irritating failings.

But then I realized–if you’re an iOS developer moving to Android, then yes, Android would initially seem a million times worse, just as the converse would. It’s just that the converse has been far less common. The platform you don’t know always seems unbearably clumsy, whereas the platform you do know generally feels easy and comfortable: you’ve already gone through the setup nightmares, figured out its quirks and idiosyncracies, and learned what not to do or try.

This, I think, is a big factor in the reign of apps.

Ever since the App Store came out, people have been prophesying that apps are a passing fad, soon to be replaced by HTML5. For years now, PhoneGap and Sencha, Mono, etc., have offered cross-platform app development, ie the ability to write a single app that works on both iOS and Android. If the transition between the two is such a giant pain, then why wouldn’t everyone do that?

Well, there are a whole bunch of reasons. Cross-platform apps are still slower and clumsier. They don’t feel as polished as native apps; also, they generally don’t look like native apps. It’s a pain to get them to work with the many hardware and software services provided by the device’s OS, which native apps do very easily. Generated code is almost always much inferior to written code. To get real estate on the phone’s screen, and presence in the app store/market, you have to package your HTML5 in a native-app wrapper, which can quickly begin to feel like the worst of both worlds.

Also, cross-platform development in and of itself means learning Yet Another Set Of Tools And Languages. For some time Apple ruled the only app platform that mattered, so writing apps meant Objective-C, XCode, and iOS libraries. Then Android began to boom. App developers who wanted to expand to it as well had a choice: either learn how to develop native Android apps, or expend a comparable amount of time and energy learning how to write cross-platform apps that would be mediocre on the iOS environment where they already excelled. No wonder the latter never took off.

But the story is far from over. More and more developers are becoming fluent in HTML5 (which is really very powerful; in particular, it’s easy to write apps which are fully functional even while offline) for web app development, and more and more “apps” are really becoming “mobile portals to web services”. It would be much easier for such services to have a single HTML5 interface, tweaked slightly depending on whether the client is a phone, tablet, or desktop, than to have to support an Android app written in Java, an iOS app written in Objective-C, and an HTML5 desktop web client. This is doubtless one of the motivations for Facebook’s long-mooted “Project Spartan“.

Unless Apple and Google take the drastic step of crippling HTML5 in Android/iOS, it’s really hard to see this not happening over the medium term. (For the short term, see Ben Savage’s excellent “14 HTML5 Predictions For 2012” post.) If Windows Phone starts to take any significant bite out of the marketplace, and a third app platform arises, it will happen even faster; developers will throw up their hands and head to HTML5 en masse. But even if the Android/iOS duopoly continues to reign, the HTML5 is on the wall for native apps. They’ll continue to reign through 2012, and maybe even 2013; but make no mistake, their days are numbered.

Image credit: Wikipedia