SaaS is the cutting edge technology in the current product landscape. With an increase in the adoption of SaaS products by enterprises, more and more ISVs are trying the SaaS delivery channel. But, delivering a SaaS product cannot be considered as just a rebranding exercise of existing products. Products mostly have been architected, written, refined and customized over years with an underlying assumption that “an isolated runtime environment (i.e., isolated customer data and code execution environment) is available for each customer”. The current trend is to offer SaaS as a multi-tenanted product. This challenges the underlying assumption of the existing products. Architectures need to be re-thought to ensure that running the product in a non-isolated runtime environment for a customer does not introduce conflicts between different customer features. Moreover products have been created to scale for a single enterprise load. In a multi-tenanted environment, the same product needs to scale for a higher loads. In other words, existing products have been written as “Server Applications” and not “Cloud Applications“.
The existing application containers (Read J2EE) have been architected and designed for developing “server applications”. These containers provide ability such as clustering, queues, pooling, data sources, resource management and so on, to abstract “technology” from product development. It was recognized a decade back that we are doing redundant function coding across “server applications”. They can be abstracted into a “single container framework” that provides the necessary features thus bring down the development effort of applications. Over the years a number of such redundant coding has been eliminated from application development by addition of more libraries and frameworks that can be included into the container framework.
If we look at what we are doing in porting products to SaaS, we find that we are in the same state where redundant functionality is being re-written, to SaaS enable products. For eg., as I have mentioned before, runtime environment isolation for each customer is a requirement for all products exposed as SaaS. This can easily be provided in the underlying container using features such as java class loaders. Similarly customization of features, feature based licensing, data isolation, data integration, higher scaling abilities all are requirements of most SaaS products.
So, why not extend the requirements of a Application Container, add the Cloud Application requirements to it and provide the features for SaaS products in the container. This reduces the time taken to port existing products to SaaS. The SMART – a Cloud Application Platform is built so that redundant SaaS features are available for Server Applications with less or practically no extra effort.