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 ???
I must admit my ignorance of mobile browsers – just how capable are they in JavaScript and AJAX operations? If they have reasonable capabilities, then it seems to me that writing mobile-capable webpages would provide the most coverage (an issue I don’t have at work).
Also, you mention WPF… I just recently bought a book on it and I find it very interesting, but doesn’t it defeat the broad coverage you’re looking for?
I’ve also been thinking about this for about the last 6 months. I agree that we have to think about the different mobile devices that are out there as they are here to stay. Maybe an open source solution? Although I have yet to find one that performs well across all platforms. I think whatever the solution it will be very time consuming to fix.
Here’s my two cents,
– a browser app is a valid option for pc/mac (maybe tablets) users, still not the best option for phones;
– when we talk about native apps for phones, 60% says iphone, the other 40% goes to android, blackberry and wp7. And android is growing really fast. Assuming you know c# you can use xamarin (former monotouch) to develop for ios and android;
– why not use silverlight for both windows 7 and wp7? I use seesmic desktop, it’s a great twitter client developed in silverlight;
– I’ve never developed a desktop app for mac, can’t help you in this one;
Joe, I was serious about my question regarding the source of your quote “Silverlight’s future on the Mac is also a question mark”. I am quite aware of what’s going on in the MS dev tools space, and all the uncertainty about Silverlight’s future, however, I have not heard any mention about the possibility of discontinuation of support on the mac os in particular.
This is very serious for us as we’re still early enough in the game to change UI strategy. We are specifically targeting silverlight as it runs on both mac and pc, but if there’s rumor of SL not running on Mac, it would be helpful to know the source.
Please advise. Thank you.
Sorry Arron, you’ll have to styay tuned to teh BUILD conference for the officail messaging.
My personal opinion is that we are at the same situations as we were before couple of yeares. We the devs must create an standart in manner like ansi sql was created for the base over the slq-based databasess. Becouse it’s natural for the companies to make there languages as much focused on there eviorments as they can and also to ignor most of the langs. from other companys. I think that we must force this companies to open their borders and to talk for somehting which can be the base and which can work over different platforms becouse today we have Mac,Windows and unix but we don’t know tomorrow what we’ll have. And as we all can see we are going to one different world,world on which you’ll work over your os,that’s why it’s time to stop this type of thinking and start to look around for the new perspectives.
@Joe
Nice article. I think what We need to do create a concept like titanium for web mobile and everything. So We can reuse single application on multiple platforms.
see the following link
http://www.appcelerator.com/products/titanium-studio/
JavaScript is completely shaking up our industry–perhaps partly due to the fact that people are predicting that it (possibly paired with HTML5, possibly compiled) will solve the multi-platform problem and be the universal programming language. Regardless, I imagine a lot of lead devs/architects are having this sort of internal debate. I’m hedging my bets.