A couple of months ago I wrote an infodeck about developing mobile applications for multiple devices. A core point of the deck is that for the best user-experience you need several native applications, but this is expensive. To reduce cost a mobile web application works on all suitable devices, but a web-app limits your user-interface. The result is an unavoidable choice between user-experience and cost.
While we can’t make that trade-off go away, we can turn a binary choice into a more graduated scale by developing hybrid applications that mix web and native technologies. At ThoughtWorks we’ve been pursuing this path on various client projects, with some success. We’ve now developed enough understanding on how to approach a hybrid application to make it worth sharing some code, so we recently released Calatrava, which is a framework to enable this web-native interoperation.
Calatrava is suitable for applications with significant client-side domain logic and when the application a channel for your product rather than the product itself. It is not suitable if most of your code is UI code (such as a game) or if a web app provides a sufficiently good user-experience. Calatrava is probably most valuable when you want to pursue an incremental release strategy, such as cover-your-bases.