Why Mobile Application Development is Hard
Most people’s first reaction would be that the programing is difficult because of limited memory and CPU resources. While its true that mobile phones typically have far less RAM and horsepower than, say, PCs, they still have quite a bit and their capabilities are growing every year. It is not uncommon for a device to have several megabytes of memory, and high end devices will have on the order of a gigabyte. Programming in low-memory devices is not that hard, but given the dominance of the PC world, most people graduating from CS or EE programs in the last ten years probably haven’t done much of it. You may have to pay a premium to hire experienced mobile developers.
The bigger issues are platform specific. Focusing on the most obvious example, every manufacturer of J2ME devices has multiple families of the platform, each with different levels of API support, and potentially different input modes, screen sizes, and screen resolutions. Some versions of the platforms will have bugs. You end up having to write device-specific code and build scripts. Along the way you’ll spend time discovering the quirks of each model.
Cross-platform issues are also a problem. Want to launch an application with Verizon Wireless? It has to be BREW. Want it on Sprint as well? It has to be J2ME. These two languages are different and you’ll be able to reuse very little code. Want it on high end Nokia phones as well? J2ME might work, but Symbian will work better. Symbian and BREW are both based on C++ but are different languages with their own APIs and unique challenges.
Then comes getting an operator to launch your application. For anything but something like a simple game, the operator might want to test and certify it on each device. This takes time and money, even if your code works properly on the first try. Then, for most platforms, you’ll need to have your application certified by a testing house, such as NSTL, before the operator puts it on their deck for download. Each pass through NSTL for each device can cost hundreds of dollars or more. If you are developing a branded application, such as a Yahoo instant messaging or email client, you’ll have to get it through their certification process as well. Again, more time and money.
Testing on real handsets becomes expensive as well. You can use an emulator, but emulators don’t emulate all phones properly, nor do they emulate some of the strangest quirks in each device. Buying phones and service plans can easily run into the tens of thousands of dollars.
Unlike a server based application or most PC client applications, once you have a mobile application out there and a bug is discovered, you have to go through the whole set of certification processes again. It may be a more cursory certification if the bug fix is relatively minor, but you still have to do it.
Another issue. Unless your application is integrated with the client firmware, it may not be able to run automatically upon launch. For communication applications, this is virtually a show stopper. Given the ridiculous menu navigation that most phone manufacturers have inflicted upon us, you’ll have to have a very compelling application if you expect users to click over to your application every time they boot the phone.
How to avoid all of this? Don’t develop a mobile application if you don’t absolutely have to. I’ve been saying the same thing for years about PC client applications. If you can make it web based, you get the “client” out there virtually for free and can focus on the much simpler task of writing a server-based application. WAP browsers are still pretty primitive but they are getting better each year. You’ll find making your site WAP-friendly much easier that developing a mobile client.
If you have to develop a mobile application, make sure it is a simple one. Otherwise you’ll quickly find yourself in porting hell.
This isn’t to say that it cannot be done. Some companies have made a successful business out of mobile application development as well as associated hosted services. My point is that it is just plain hard, especially given that to many peoples’ eyes, it looks deceptively easy.
September 26th, 2007 at 10:58 am
Mike I could not agree more. I heard from somebody “software on network infrastrcuture is a lot more complex and challenge than mobile”, what is your opinion on this? I don’t have any experience on network infrastrcuture, however I had a lot of experience on weather radar, which is a huge system too. To me, software on mobile is still more challege than a weather radar. On the other hand, things are changing now. With embedded Linux, applications development are similar to desktop. device driver/kernel might still. Another thing is, web2.0 gives another opportunity. I read a blog on meebo.com, since all their IM application is over web, they managed to make meebo.com working on iPhone in couple of days.
September 27th, 2007 at 5:34 am
Infrastructure software is usually larger in scope but it is easier to manage, upgrade and deploy. I’ve used some of the web based IM portals and they don’t really give the user experience that an embedded mobile application gives.