It wasn’t that long ago that building an application targeted at broad consumer market didn’t involve many difficult choices. You built either a Windows application or a Web application. If you wanted a disconnected experience, Windows owned virtually the entire connected consumer story so they only decisions that you needed to make were about language, IDE, methodology, etc.

Those were the days.

For some time I’ve considered building a sporting community based business. I’ve been giving it more serious though lately and realizing that changes in the computing technology landscape have made selecting strategy for such a business / application a complex thought process.

As we evolved the ASP.NET web site, we were concerned with scale and performance, and with features and content, but we had the luxury of a pretty targeted audience.
Building a community experience for a broad audience is more complex especially if you want your strategy to include a rich disconnected experience.

Yes, yes, I know about HTML5, and it is promising, but not just yet. What it will ultimately delivers is yet to be determined.
Windows still owns the large majority of desktop market share but the Mac is now statistically significant Mac users cannot be ignored by business’s who seek to engage the largest possible customer audience.

There is no really GOOD solution for developing a desktop application with a single source code base that runs on both Windows and the Mac, and then there is Linux.

There are some choices.

Adobe AIR runs on both Windows and Mac as does Microsoft’s Silverlight but Adobe recently discontinued Linux support which makes AIR’s future a question mark and Silverlight has never run on Linux. Silverlight’s future on the Mac is also a question mark and Novell’s discontinuation of the Mono team adds additional variables.

There is Java, which seems to be enjoying a bit of renewed growth recently, probably as the result of the popularity of Android.
Which, of course, brings us to an even bigger issue: internet users are not necessarily PC users any more. “Mobile” devices represent a slight majority of internet users and that percentage is rapidly growing.

An immersive community experience with rich on line and off line features simply must include iPhone, iPad, Android Phone and Android Tablet devices at a minimum. And, there are smaller user bases of other devices such as Windows Phone 7 and WebOS devices.

There is no good solution to developing a cross platform desktop application (Windows & Apple Mac), nor is there a really good solution for building a cross platform mobile application (iOS versus Android)

The optimal choices :

  • WPF on Windows
  • Silverlight on WP7
  • xCode on Mac, iPad, iPhone (though not a single application)
  • Java for Android Phones and Tablets

And a new wave of Windows tablets is bound to be very popular when they start shipping in the near future.

There are technologies that could be used for more than one of the target devices listed above, but I’ve come to believe that doing so would result in a less than optimal implementation on any specific target.

Every software development team that I’ve ever worked on that shipped products on multiple platforms ultimately chose to write separate, platform specific desktop implementations. (One company built a cross platform application in Java but abandoned it as the final result was unsatisfactory on both Windows and the Mac.

So perhaps, for the needs I’ve specified above, multiple unique client implementations are required.

Given that, I’ve started thinking about how I might implement as much of the logic as possible in a single SERVER implementation and use “connected” intervals to sync data. This would include deferring as much application logic as possible to server interactions even when the device is connected.

AJAX / SOA to the rescue ?

Though I’m just starting to think about how this might work with specific features, it seems like more and more companies will be facing these issues. Many companies that I have worked with simply make compromises based on user base and their resources. For personal computer users an exclusively browser based experience often must suffice. As they expand to mobile device users, many companies start with the iPhone due to its installed user base and often don’t create an iPad optimized application.

From a practical perspective iOS and Android are both required market segments given their equivalent market share and Windows Phone 7 is statistically significant as well.

It seems to me that the market fragmentation simply requires one to implement rich client applications on as many platforms / devices as makes financial sense and centralize as much application logic as possible on the server where we can make a single tool set choice.

Doing so however will require architectural considerations. Not only will such application need to make rich use of AJAX / SOA but implementing deferred logic will change our architectural choices as well. For example, we it may make best sense to rely on message queuing for deferred business logic, both in terms of the processing itself as well as delivering the results to the various clients.

I know it’s probably hard to picture without a more detailed look at the types of applications that I’m thinking about but I’m just sort of thinking “out loud” to my techie friends (yes, you!)

I’d be interested to hear your thoughts on this multi platform problem and on the possible solutions, or your argument that the problem doesn’t really need solving.

After all, maybe everyone COULD make do with just a browser application !

Thoughts ???