No two ways around it, mobile development is hard. I've
often referred to it as first trying to verbalize some complex
topic such as the meaning of love, the definition of
consciousness, or the reason people watch America's Most
Wanted, and then deciding you want to do it in the form
of a sonnet. Then, once you are nearly done, you realize you
need to translate it into three different languages and half a
dozen dialects.
Let's look at some of the specific challenges of mobile
development.
The Form Factor Challenge. The biggest
challenge of developing mobile applications centers around
those dinky little screens. I can barely read a phone number
on most of them, and somebody seriously thinks I can access my
corporate ERP app on it. Well, you can�but you need to
carefully consider usability when you are developing your
application and remember that users may be able to see only a
little bit of information at one time.
Displays on mobile devices range from two-line cell phones
up to roomy (relatively speaking!) PDAs such as the Microsoft
PocketPC. Because of all the different screen sizes,
getting the pagination right for all the devices becomes a
nightmare�what looks good on one device won't work well on
another. Besides the variety of screen sizes, orientations
vary: some are landscape, while others are portrait; some are
even square. It gets really messy when you consider MP3 and
WMA players with their painfully hip designs.
Capability Issues. Besides the issues
involving screen real estate, each of these devices has
different capabilities. First off, sticking with display
issues, you need to support devices that can display images
and color all the way down to those devices that can handle
only black-and-white, plain text. Next, some devices can
process forms and both send and receive data, while others
only display messages. (Some devices are send-only such as
barcode readers and the package tracking devices used by
overnight delivery services, but I won't address them here
because you can work them much the same way you currently
process standard user input.)
Because they are battery powered, these devices have
limited CPU cycles available and (except for PDAs) no local
storage to speak of. However, the data processing capabilities
of these mobile devices vary greatly. At one end of the
spectrum are browsers that can do nothing but render markup.
At the other end you have the Microsoft PocketPC that not only
can run scripts and process XSLT but also has a local copy of
Microsoft
SQL Server� 2000 CE Edition that you can use for complex,
client-side applications.
Finally, most devices contain inherent capabilities that
you really must leverage. For example, if an end user is
working with a phone to search for a coworker on the corporate
directory, you should give him or her the ability to directly
place a call rather than forcing the user to key in the
number.
Bandwidth Issues. Related to a device's
capabilities is the bandwidth available to it. There are
really three separate issues (throughput, latency, and
reliability) you need to be aware of here, but let's lump them
together to keep things simple. While some geographies
(notably Europe) have high-speed wireless networks, most
devices rely on circuit-switched networks, so you are often
limited to 9600 baud with latencies reaching into the seconds.
The point here is you need to be very economical in what you
send down to the browser even in a case in which the client is
a rich device.
Worse still, as you know from your standard cell phone,
wireless connections are not what one would call robust, so
your application will need to gracefully recover from dropped
connections. Because connections occasionally (okay, often)
drop, mobile devices have pretty aggressive error correction
and will drop into recovery mode quickly if your server-side
logic takes too long, causing the device to think it is
disconnected. What is the typical recovery mode of a device,
you ask? Oh, simple: just resend the last request. D'oh! Now
you have twice the load on your already slow page and need to
make sure you don't process transactions twice.
Markup Challenges. In addition to all the
physical challenges of working with mobile devices, you also
have to contend with three different markup languages and
protocols in widespread use.
First off, you have standard HTML over TCP/IP supported by
the Microsoft PocketPC and some of the other rich devices.
Second, you will need to support compact HTML (cHTML) used by
NTT DoCoMo's i-mode service and its 25-million-plus
subscribers. You can look at cHTML as a subset of standard
HTML. It supports most of HTML 3.2 except for the tags
required for frames, tables, style sheets, and fonts.
Third, you will have to contend with wireless market
language (WML) defined by Nokia, Motorola, Ericsson, and
Unwired Planet and used by wireless application protocol
(WAP)-enabled cell phones. Unfortunately, WAP is, as you would
expect from it's name, a protocol. It is similar to TCP/IP but
is optimized for low bandwidth, and noisy and unreliable
connections. It also has a number of phone-specific
enhancements, such as processing voice calls in addition to
data and the ability to understand and manipulate address
books. Because it is a protocol, it presents yet another
barrier to development�you can't just hook up any device with
a TCP/IP stack (say, a PC with your development environment),
test your app, and debug it using your standard set of
tools.
State Management. State management is
always hard for Web applications, but it poses a special
challenge for mobile applications. Most mobile devices don't
support cookies, which has been the traditional tool
developers have used to maintain state. The role of state
management is particularly important in mobile applications
because of the possibility that the device will resubmit a
post if it thinks it has been disconnected. Without access to
state information (such as a unique ID buried in a cookie), it
is difficult for the device to determine whether a given
submission is a duplicate or not. Additionally, the lack of
view state is often a frustration for users of mobile devices
because data input is so difficult; having to triple key all
the data on a form once is bad enough, but having to do it a
second time because of a validation error or a dropped
connection is downright frustrating.
Tough stuff, huh? Well, that's all the bad news. On to the
good news. |