Today I read a good post by CrispWireless CTO, Xavier Facon, entitled “Apps Call, but will your phone answer? Maybe not.” The post was a response to an MSNBC CES article bemoaning the fact that many apps exist on certain platforms, but not others. This of course is not news. Apple’s iPhone had 100,000, Google’s Android 20,000 and Palm’s WebOS just over a 1,000 (please make more, I like my Pre and do have app envy). The fragmentation of the mobile industry across different operating systems and different hardware systems is well documented and is the bane of many software developers and testers across the world.
The crux of Facon’s post seems to provide tacit support a more standards-based approach coalescing around HTML5, but also acknowledging that the industry is not close to supporting a single standard and therefore they try to solve the quandary by re-writing the app across different platforms. At least Crisp seems to focus on keeping the functionality, something that many companies don’t do. This is an important decision by Crisp because it helps maintain not just common functionality across devices, but also promotes a common design and better usability as users move from one device to another.
But I want to get back to the standards issue. As much as software engineering teams across the globe would like to have a standard “write once, run anywhere” approach as they’ve been used to with modern languages like Java, I don’t think there is any likelihood of this happening in the short to medium term. It’s really not all that dissimilar to creating desktop apps for Mac v. PC, it’s just that there are more options in the mobile world. The hardware platform providers like Apple, RIM, Google, Nokia and Palm each have different OS’ that they think create differentiation for their platform and provide better performance/user experience. If you want to take advantage of the full capabilities of the device, you have to write for the platform. And the reason behind it all is usability.
While using a standard language like HTML5 may make it easier to program across platforms, but it doesn’t allow you to take advantage of the specific capabilities that the OS and hardware allow for. Plus you have to design for the form factor. Mobile apps — perhaps I should say “good mobile apps” — look vastly different from the content on the web. They’re designed for action more so than information. For fingers, not mice. For use by broader segment of the population who may be less tech savvy. I mean can you even imagine using an iPhone or Palm Pre without multi-touch and gestures? Look how that changed the entire experience and drove usage through the roof. In a recent PhoCusWright report Mobile: The Next Platform for Travel, they demonstrate the difference in presentation and usability between a standard web site, a mobile transcoded site and an app. Now there are many WAP-enabled sites that run in a browser and provide something in-between the transcoded site and an app, but anyone that’s used a WAP site still prefers and app to get the same information. Usability is what it’s all about. The App strategy wins over a WAP strategy.
Google wants HTML5 because it wants a web-oriented portable computing device to better leverage the web apps that is the core of its business. Android is more of a strategy to extend it’s platform rather than to create a new one that is optimized for mobile.
Additionally, an app strategy rather than just a mobile web strategy provides a performance advantage. A downloaded app only needs to get refreshed data over the network rather than reloading the entire page each time. It’s true that 3G and 4G networks are improving (if you have coverage; no apologies to AT&T coming. As tiresome as the Verizon ads have become, Luke Wilson is seriously annoying), performance is extremely important. Abandon rates on the web are high for a 3 second delay. Most people would kill for a 3 second delay on their mobile applications.
So while it may be a pain to code for multiple platforms, it’s the only way to go.
What’s your take? Agree? Disagree?