Transforming a server application to cloud application
On-premise products are architected and designed for server operating environment i.e., they are web-based applications. SaaS, on the other hand is a cloud application (an application exposed as a service in a cloud operating environment) i.e., they are web applications. The major differences between the two operating environments are in:
- Pricing: There are inherent differences between the way products and services are priced. SaaS is a service model and hence pricing has to be rethought for a service-based pricing while on-premise application is a product model and has product-based pricing.
- Customer Acquisition and on-boarding: The methods of customer acquisition and on-boarding differ between service models and product models. Free trials, community version, enterprise versions, freemium models and so on can be easily provided in an on-line service, while this is not the same for product model.
- Security & Scaling: In an on-premise environment, since the application is installed and run for a single customer, the number of users are controlled and the environment is inherently isolated between customers. But in a cloud application the environments for different customers are shared. The number of users increase multifold based on the customers serviced by the application.
So, changing over from an on-premise application to a SaaS application cannot just be considered as a “lift and shift” of code from server hardware to a virtualized cloud hardware. To take advantage of the cloud, both in infrastructure and business model, applications have to be transformed w.r.t two aspects, the functional aspect and the technology aspect.
Here we will see the use cases that need to be added to the server application, to transform it into a cloud application.
Use Cases for Pricing
Pricing in a service model can be either package-based pricing or a usage-based pricing. For eg., a service can be provided for free upto 10 users and as the number of users increase, the price is increased in buckets. This adds a new use case to the existing server application that has nothing to do with the business addressed by the application, but due to the change in the business model. To be able to provide a service that can cater to this kind of pricing model, the following use cases need to be added:
- Metering: Meter the number of users, events, storage size, bandwidth so that reports can be generated and price calculated.
- Monitoring, Auditing and Reporting: Be able to generate reports for the meters and allow customers to view their real time usage summary w.r.t the license they had opted for.
- Invoice and Billing: Based on the pricing model, invoices and bills need to be automatically generated based on the current meters for the customer.
Use cases for customer acquisition and on-boarding
Cloud promotes trying out a product before buying. Once bought, typically customers should be able to upgrade or downgrade licenses, add features, customize features with little or no interaction with the SaaS provider. This maintains customer relationship without sacrificing costs. For this, new use cases need to be implemented due to change in business model rather than application business use case.
- Feature-based Licensing: Product features can be grouped together as a package and associated with different licensing. License based security needs to be provided for features so that product and features cannot be used unless licensed for. Once on-boarded with a specific license of the product, upgrade or downgrade of features should be easy.
- Online on-boarding of customers: To be able to allow potential customers to try out the product before they pay for it, it is cost effective to allow them to on-board themselves. Hence an easy registration and on-boarding functionality needs to be built, that is integrated to the feature based licensing use case.
- Easy Customization of features: Premium Customers would like to customize the UI, the data stored, the process flows and so on. The architecture has to incorporate this use case.
Use cases for Security and Scaling
- Application Role and User maintenance: The creation of users for an application exists in a server application also. But, for a cloud application, definition of roles can vary by customer. Hence no global roles can be defined in the product. Again features can be customized by customers. Hence roles cannot be hard coded into the code and role-security should work in the customer isolated environment based on runtime definitions.
- Elastic Scaling: It would be good to scale without having to add and configure more nodes to a cluster as the number of customers increases. The complexity of scaling increases as the number of customers increase in a clustered environment.
- Database backups: In on-premise applications, scripts and and cron jobs can be used for database backups. But, in a cloud environment, database backups require UI to prevent the customer from directly accessing the database hosted. Since the frequency and requirement of database backup is determined by the customer it becomes necessary to provide this as a function exposed in the cloud application.
Transforming a server application to a cloud application does not have impact only on technical aspects but also adds extra use cases and modifies existing use cases. As I have suggested in my article “Need for a SaaS application platform similar to J2EE Container“, a container can be provided that implements these features listed above, independent of any SaaS application and adapted for the SaaS application. SMART – a cloud application container is built to abstract these use cases from the SaaS developer.