In theory, the hardware fragmentation can be addressed with a series of checks that can be done at the application level. The goal is to figure out if the hardware can run the app properly. If yes, run it – If not, display a message and terminate. Developers, especially from the PC world are used to this.

The software fragmentation is more of a problem, although OS fragmentation is something that most developers know how to deal with. The OS customization is the real issue. Because Android is open for all to modify, there are a numbers of device manufacturers that do so, and there’s not always a good mechanism to let the app know what has changed. And even if there was, *everything* can be customized, so the number of verifications would be hugely inconvenient for the app.

Changes can be as simple as size, styling or colors. That can lead to black text on a black background, or buttons that are too large to fit in their designated areas. This seems minor, but more and more developers are now listing in their contract a short number of devices that are “guaranteed to work”. They will charge more to test (and fix) the app on additional devices.

One of the highlights of Android was that it was free, open and customizable, but this creates all kinds of side effects from fragmentation, to delayed updates. Also, the customizations are sometime questionable, especially those made by the carriers. HTC Sense is probably the shining star here, as it globally makes things better – not worse.

The word on the street is that Google has started to reach partners to limit, or tighten, the range and depth of customizations so that developers can live in a more harmonious Android world. In the meantime, Android retains two major advantages over competitors like Symbian and Windows Phone (iOS is not available to non-Apple devices): it’s good enough and it’s free.