There is a big problem in the App Ecosystem

Hola, Namaste, Hello! Mobile Apps

Previously there were different Operating Systems, then came different browsers and now we different application development ecosystems, and just looking at the mobile ecosystem, we can see that there is so much difference among the different service providers, OEM manufacturers and merely the smartphone itself.  In the mobile space, there is the iOS platform, the Android platform and the recently released and hopefully catching up Windows Phone OS. Take a look at the difference in the foursquare application on the different platforms.
The Foursquare Mobile application on the iOS platform
The Android Platform running the Foursquare application (notice the tabs on the top as compared to the iOS's at the bottom)

The Windows Phone Ecosystem presents a completely different application ecosystem.

What it means

Now each platform promises a different approach to building applications, the iOS has tabs, navigation bars etc. while the windows phone os has panorama and pivot based applications. These are not just different looking but completely different in the way of the functionality as well. Since of course the user only cares about the application experience, the underlying layer of functionality might not be visible to him/her. This is because once you get too acquainted to a system of doing things on your smart phone or mobile device, you just get it. It's about learning a new language, you don't have to figure out the syntax and semantics of the language when you become fluent in it. Thus, any significant deviation from a particular convention of  display on a particular device will cause issues with the set of users on that particular device, they would either need to get familiar to the application design or completely settle for another similar cloned app because it just looks good.

For developers this means writing apps in multiple platforms and multiple languages. There are various frameworks available to speed up the process and of course regular debates about whether HTML5 is the new standard or whether one should switch to a native way of writing code for a platform application. Although I am not really interested in the debate part, I am definitely interested in the different mergers and fusions this is bringing about. One of them is Parse which is trying to change the face of mobile development by taking care of the backend for the apps. The biggest challenge to adopting such a development strategy is that it is very good for small apps, apps like instagrm where the functionality is less and all the app does is data transfer to and fro, very few relationship management on the server side among the data objects. For bigger applications and more complicated ones, I am not sure if Parse can be put to test. Another is Titanium, which uses HTML5, CSS and Javascript to structure the application. However with Titanium you get a CSS feel and the application feels like a mobile clone of a website and deviates miles away from any of the platform guides on user experience like Apple's or Microsoft's. Same is the case with Phonegap or Apache Cordova (As it is called now) or Jquery Mobile or Adobe's new Flex technology. 

The problem remains the same, one cannot get a native feel with using technologies like CSS, HTML and javascript.

What should be done

I think before thinking about what should be done, one needs to realize that there is a problem. We can agree that maintaining multiple application platforms is a pain, while people (Mac users and Windows users) love the Office 13 preview released recently they cannot help blame Microsoft for not updating the Mac application at the same time as the Windows application. And the mobile application ecosystem is exploding as we speak. Android is pushing interface changes regularly while Apple is staying the same with more features and shortcuts being added with each version of iOS. Microsoft is the new player with it's new Metro design philosophy. We can agree that not one of these players is going to completely dominate the market. 

In my my opinion there needs to be evolution in the form of an abstraction, which separates the templating engine from the logic code. This would mean that the logic code consisting of core libraries, networks, login support, offline processing, notification management etc. can be shared between the different platforms, while another set of code and libraries do the rendering based on the different type of device platforms they encounter. It can look radically different, but at least since the core libraries are shared, the functionality can be made available to different platforms. It just needs to be written, accessed anywhere. Much akin to Java byte code philosophy. Let's say you come up with a new feature of tagging comments and putting them into a stack organized by good, bad tags etc. So you can abstract out that feature and put it in a core library. That way, a Windows Phone OS developer does not need to worry about that feature having bugs. All he needs to do is make sure the view code calls the library with the appropriate parameters.

Where does this leads to?

Ideally I would like to see a mixture of Adobe Flex and Parse. Flex allows developers to share code between different device platforms and that is something that really cuts the work of developers try to hunt for a bug which might be caused by the platform itself. Parse can do the shared code part very effectively although I am a bit skeptical the limit to which Parse can be stretched. Still the common code part (Network Management, Login Support etc.) is pretty cool and cuts down the boiler plate code a person needs to write for different devices.

Write Once, Access Anywhere. Any takers?