At the phone races: picking a winner
Well, Windows Phone 7.5 (aka "Mango") is
off to the races — er developers — which means that the three
main smartphone operating systems are basically at feature parity now,
so perhaps one should start thinking about which one(s) to target.
For many people, the answer is obvious. However, I see at least three obvious answers,
and perhaps a few that are less obvious.
Go with the iFlow
According to Nielsen,
the iPhone is the single largest manufacturer of smart phones in the US (see graph
below: you might have to turn your monitor 90° to understand it fully). They
have the largest app store, a ... hmm ... dedicated following, good branding
and marketing, and so on. People are
already lining up for the iPhone 5, and many say they want to
buy an iPhone 5 sight unseen. Who wouldn't want to target that market?
Well, apart from the relatively closed and insular world of the Apple device, programming
for the iPhone is different. Not functional programming different, but it does require
one to learn Objective-C . It doesn't have a huge learning
curve — it's all ones and zeros and semi-colons after all — but you
do need to keep that in mind if you want to go that way. Oh, and there's that
whole XCode difference to deal with as well.
You will be assimilated
At 38% of the market (see above graphic), Android is the most popular smart phone
OS in the US right now. Obviously the Canadian market will be different, but I'll
keep using these numbers for now.  So, the argument would
go, if you want to target the most users, you develop for Android. Add to that the
main language for writing Android apps is Java, and you have a large market of developers
as well. At the same time, the Android market is somewhat fractured, and I suspect
that we'll see bigger fractures appear as the many developers tug it into various
directions. Also, the lawsuits are flying, with Apple suing HTC and Samsung over
their phone designs, Oracle suing Google over their use of Java. The effects of
these lawsuits on the ecosystem may not be healthy long term. Finally,
only 50% of Android users say they're happy with it. Definitely, that
might be the effect of the particular phone they have, but it still might affect
Number three, but we try harder
Windows Phone 7 may only have 9% of the market , but there
are some attractive qualities. First, you program using .NET, so familiarity in
Web or Windows development carries over to the phone. Similarly, the tools for creating
WP7 apps is familiar to .NET developers. The bad news? Well, number four in the
mediocre sales. In a dedicated market , these factors
might not matter, but if you want to target a broad consumer market, you need to
While I don't think Blackberry is as cooked as some prognosticators, I'm
not that convinced it's a platform worthy to target. I still think of Blackberry
as BBM (Blackberry Messaging), with other stuff tacked on. The killer feature for
the Blackberry has always (or at least should have always, mistakes notwithstanding)
been the keyboard. None of the other devices have really integrated a thumb keyboard
quite like Blackberry . It may just be my limited imagination
though, but it seems this strength is a weakness when it comes to other applications.
The keyboard doesn't help playing Bejewelled, or other non-keyboard centric
applications. As with Windows Phone, it may make sense in a dedicated market , but less if you want to target a broad audience. Also, the
noise that many industry analysts are making about RIM  would
make me hesitant to target this market.
Of course, you could avoid many of these issues by simply having a Web application.
Using a bit of browser sniffing and tools like Modernizr,
you can determine if the client browser can support the features you need, and craft
an appropriate Web page. As most of the newer smartphones have great support for
HTML5, you're actually more likely to hit a capable client than you might if
you were hitting a desktop machine. The good news is that you can leverage the infrastructure
used by the "main" Web application. The main limitation here is of course
screen real estate. One other potential problem with this direction is that you
can't get into the various app stores. Still, this is the easiest way to target
multiple devices without requiring rewrites.
All of the above?
I am intrigued at PhoneGap, which recently
hit the "Big 1.0". It promises a "write once, run everywhere"
service to target all of the above platforms (and a few others). I suspect it suffers
from the "least common denominator" problems of many solutions like this,
but it does seem to have a good cross section of
features supported. Whether they can maintain this — especially in
light of Mango and iOS5 — remains to be seen. I wouldn't be entirely surprised
to see a press release about the purchase of Nitobi (writers of PhoneGap) by one
of the biggies.
I do think that device programming is the "next big wave"™, so it
is definitely time to start investigating one or many of these platforms, so pick
an obvious (or non-obvious) choice, fire up an emulator and start coding!