After spending six weeks building a mobile site for my current employer I had the chance to really get a sense of where mobile development is and a bit where it’s headed. The project itself was built with ASP.Net MVC3 along with jQuery Mobile and was meant to provide an iPhone-less experience. During the development I touched on Sench Touch, PhoneGap, and collaborated with both the Android and iPhone developers on staff to mimic the available functionality.
Unfortunately for me I happened to pick the time to develop the site using jQuery Mobile Alpha 4 and three weeks after launch the Beta was launched. In hindsight I think it would have been a better effort to develop the site using media queries to style the pages. jQuery Mobile is nice but the Ajax handling of page requests can cause some undesired effects. It’s a wee bit cache happy. The experience either way was very enlightening.
The takeaway from the experience was this. Mobile sites are slow, unreliable, and are a giant cluster when it comes to developing a consistent experience across multiple mobile OS and device manufacturers. Android browsers for example on 2.0 to 2.2 experiences vary widely. Even using the same Android 2.2 OS on the Motorola Droid X and HTC Thunderbolt handle mobile sites differently. HTC Thunderbolt has a fixed large network request buffer much different than that of the Droid X causing page requests delays. HTC Desire has an interesting virtual keyboard quirk when typing secondary characters. The keyboard enters the standard key and upon selecting the secondary key deletes the original character and replaces it, but it doesn’t always happen resulting in two characters being entered. Don’t even get me started on Windows Phones or Blackberry OS 5 or less.
It’s also difficult to get a true sense of our user experiences across different networks regardless of device. This is the biggest complaint I have against mobile development. I keep seeing newer phones released with dual-core processors, bigger screens, but they’re all still neutered by the worse than dial-up bandwidth. If the mobile device is on WiFi the device may act relatively well, but if the user is out and about on the AT&T or Cricket network the experience could be drastically different. Ajax has helped web pages come a long way to feeling as responsive as desktop applications, but the moment a chatty site moves to the mobile realm the proverbial shit hits the fan. That gets into the biggest disadvantage a mobile site has versus native apps when dealing with suboptimal bandwidth. Local storage.
Local storage enables the iPhone or Android applications to retrieve data, store it, and then use it for whatever the application needs. For example maybe the application requires a list of financial transactions, and then to allow the users to sort/filter/and view individual line item transaction details. For Android and iOS the transactions can be requested, stored, and easy as pie used for their purpose. Mobile websites are not afforded this luxury. For mobile sites the list of transactions are requested and besides session, storage is limited. Even rendering a large amount of transactions in markup, regardless of latency in retrieving the data, can cause massive delays. For what could take the iOS/Android OS native applications 10 seconds to retrieve, display, and enable interaction could take upwards of a minute or more on a mobile site just to render.
Looking at it again with the new perspective, knowing full well that more smart phones are sold than PCs, it’s saddening where the state of mobile development remains. The landscape is rich with a bevy of powerful mobile devices and many promising mobile operating systems. Still, each and every single one of the devices rely on a communication structure that provides the same experiences that desktop PCs had ten years ago while using dial-up. Sure, there is 3G/4G but coverage is limited, devices capable of using those connections are not as wide spread, and even device configurations (screen size/ touch capability/ browsers) are as numerous as stars in the sky.
In the meantime mobile website development using media queries can be perfectly adept for displaying static content that mostly works on most modern mobile browsers. Native application development still makes the most sense until high-speed mobile bandwidth is provided and hopefully without bandwidth limitations. AT&T you suck by the way. PhoneGap goes a long way to help alleviate the pain of having to master Object-C, Java, and puts focus back on HTML/Javascript. Not every developer is a polyglot programmer, but most developers have at least a familiarity with HTML/Javascript so this makes natural sense to adopt.