Development in cloud requires a different mindset
In a recent blog post, Forrester’s Mike Gaultieri says “development isn’t all that different in the cloud”. I agree, but I disagree. Allow me to explain why.
Let me start by saying that in last couple of years, cloud development has come a long way. Cloud providers are adding new tools and services for server provisioning, monitoring and management. Several other independent services also can help companies develop, deploy and monitor applications in cloud. Single-click deployment in the cloud, for example, is very common in many of the development IDE tools like Visual Studio and Eclipse.
Yet I still believe developing in Cloud or a SaaS-based application comes with a learning curve, especially for companies who have been developing on-premise applications or desktop applications. The fact is I have seen too many poorly designed on-premise web applications that would hardly scale in a pure cloud environment.
So, how is cloud development different in the cloud after all? I’m going to divide this discussion into 3 blog posts:
- Design and Architecture
- Application management and infrastructure
So, to kick things off, let’s start with Design and Architecture first.
- Different mindset –cloud development requires a different way of thinking about and designing your product. It requires a cultural transition from being “product” focused to being “services” centric.
- Computing platform – choosing either an IaaS or PaaS platform. In making this call, you need to consider the different IaaS/PaaS platform features, including costs, functionality, monitoring and management tools, API support, choice of language technology and degree of lock-in.
- Application architecture: Design an architecture that can support a services-centric model. Cloud-based apps should use loosely coupled architectures to enable necessary integration between internal and external services. Cloud-based architecture requires designing for scaling on the cloud as needed, avoiding latency issues and managing data security. Considerations like multi-tenant architecture or physical partition of the database, support for transition between on-premise to cloud or vice -versa are good examples of the complexities in designing cloud/SaaS-based applications.
- Data Security – data security in cloud, encryption and logical vs. physical data partitioning. Security becomes a fundamental requirement in the cloud given the shared resources by many clients outside your full control and beyond the corporate firewall. Compliance and audit issues become even more complex in a cloud-based application.
- Licensing – moving your applications to SaaS and a cloud-based model provides new ways to license your product and services and create new revenue potential. Instead of licensing for big up-front license fees and yearly maintenance fees, you could license your product by users, features and modules. You can easily up-sell customers from basic starter packs to more advanced offerings that add more users and increased functionality.
- Customer Provisioning and Activation – unlike the on-premise “big-bang” deployment, adding new customers or new features in the cloud may require just turning on one switch. The software upgrades can be automated, allowing the customer to self-provision and activate new features.
Next week, we’ll cover the topic of “Development” in the cloud. Let me know your thoughts on this topic.