After spending the last couple of years developing a middleware application for mobile phones capable of running custom applications, and as SoftSource's Subject Matter Expert on the topic, I've recently come to the conclusion that writing applications for Smartphones is a challenge! I blame no particular platform vendor, device manufacturer, specific programming language, or specific smartphone device (although I wag my finger a bit at BlackBerries). The fact that so many options exist certainly contributes to the problem. And if one steps back and thinks about the variables involved with mobile development for a minute, you can start to see why it's a tough challenge to face (and potentially an expensive one too).
Consider something akin to the Drake equation, but instead of computing the number of alien civilizations with which we could hope to one day communicate, let's attempt to calculate the number of unique smartphone configurations we have to target and support, just to publish a single, wide-reaching mobile application. I see the equation being something like:
N = P × M × D × O × L
where:
N is the number of unique device configurations someone must support for a given mobile application in order to reach the widest possible audience;
and
P is the number of unique smartphone platforms in common use
M is the number of manufacturers of smartphone devices
D is the average number of devices made by each manufacturer
O is the number of mobile network operators in the world (or target region)
L is the number of languages in which to translate your user interface.
There are probably other variables I'm leaving out and some variables are a bit misleading (e.g., not all manufacturers create smartphones for every platform), but let's cram some approximate sample numbers into just these and see where we stand. Let's say the number of platforms in common use today is six (P = 6). I include as major platforms:
- Symbian
- Windows Mobile
- RIM BlackBerry
- Linux
- Palm OS
- iPhone's Mac OS X
Sure, we could argue that Java Micro Edition runs on most of the above so that effectively there are really just two or three platforms, but the fact that various platforms support various optional Java ME packages effectively makes each platform unique (I'm looking at you BlackBerry for your tardy support of JSR 172!).
Let's go with 13 device manufacturers including Motorola, Nokia, RIM, Sony, HTC, etc. There are more than 13, but let's go conservative to balance that not all manufacturers create devices for all platforms. So M = 13.
The number of devices per manufacturer is going to vary dramatically, but let's pick a number and say 5. A manufacturer like Nokia is going to have way more, but in theory each device belongs to a series (e.g., Series 60, Series 80, etc.) and that once you code to a given series, you've nailed dozens of devices (in my experience the reality is somewhat different from the theory, but again, we're ballparking here). So D = 5.
According to Wikipedia (the fountain of all human knowledge) there are 19 major mobile network operators worldwide. So on line 40, LET O = 19
Almost there. Since any "real" application is going to also be used by lots of customers that don't speak English, you need to translate your application's user interface elements into multiple languages. Let's not go crazy and say we'll target only 6 total languages. Thus L = 6.
So our "Mobile Effort Required" equation looks like:
N = 6 × 13 × 5 × 19 × 6
N = 44460
What does that number mean? Well, it doesn't really matter what it means because it's a pretty big number considering the size of the inputs, so no matter what perspective you take, that answer is: that sucks! If you're a developer of mobile applications, it means that you are essentially trying to produce code that runs on 44,460 different device configurations. Um, that sucks. If you are a quality assurance engineer, it means that you need to test 44,460 possible device configurations. Sucks. If you are a product marketing manager, it means you are trying to define a cohesive set of features for 44,460 devices. Suckage. If you are the sponsor of a mobile project, it means you're paying for the development of a product trying to deploy to 44,460 device configurations. That probably sucks most of all!
So is it hopeless? Should one not even bother trying to start? Of course not. This is, after all, the world of software where practically anything is possible. What can one do to mitigate some of these factors to bring some sanity to all of this? The easiest solution is to just start constraining the heck out of the variables. Let's just support Windows Mobile. Congrats, P now equals 1 and you're down to 7410 configurations. Just North American mobile operators! Now O is probably 4 or 5. You get the idea. But each time you constrain a variable, you're whacking chunks of potential users, which most of the time, is an important statistic to keep as large as possible.
So what can be done to decrease "Mobile Effort" but maintain optimal customers? Ah, well that's the golden question that I hope you and I can answer over the coming weeks and months. For starters, one can license feature-rich but moderately priced mobile middleware (<shameless_plug>email me!</shameless_plug>), but more importantly, I think it might be worthwhile to spend some time with blog entries that break down this complex issue into a bunch of digestible, smaller ones. Let's plan to focus on solving each smaller issue with an eye towards constraining a variable without affecting user count so we can minimize the resulting "Mobile Effort" equation but maximize the install base. And the good news is that a lot of the problems plaguing mobile development have been solved elsewhere--there are plenty of non-mobile solutions and patterns we can steal^H^H^H^H^Hborrow^H^H^H^H^H^Hleverage to help us out. And to conjecture a bit more, I suspect along the way we might even find ourselves writing and posting some code or documenting mobile-centric patterns should that makes sense as we tackle these challenges.
And I'll tell you why I'm even bothering because frankly, reading blogs and writing one myself has never really interested me all that much because I don't particularly care what you had for lunch today and I know nobody cares what I had for lunch today (fajita burrito if in fact you do). But I've finally found something compelling to write about that I don't really see anyone else addressing (okay, I read some blogs): simplifying the challenges of smartphone development. The idea that you can take a computer the size of a candy bar, stick it in your pocket, and connect yourself wirelessly almost anywhere in the world to a network of a few billion computers is pretty darn awesome, IMHO. And the fact that writing code for all of those mobile devices is a complex challenge today is also cool because who wants to do something that's easy? How boring is that? Perhaps "boring" isn't the right word, perhaps instead, easy stuff just…sucks.
Cheers,
--SG