Looking at Differences in Development for Cloud-based Applications
After looking at the design and architectural differences in cloud development in my last post, let’s review some of main differences in development approach for cloud-based applications.
- Cloud development means frequent updates and releases: You can build and release new functionality incrementally without worrying about shipping software upgrade & patch releases. You can actually focus on “customer delight” by adding new useful functionality and spending maintaining older versions in different customer environments.
- Agile, iterative and efficient development methodology: Frequent software releases requires different engineering and development practices. Best practices like Continuous Integration and Automated unit testing becomes critical to do high-quality releases frequently.
- Better Testing tools and practices: In a multi-tenant SaaS application, one issue could affect all customers not just one, which is one of the biggest risk of SaaS based applications. In addition to more functional and regression testing, testing in cloud requires additional types of testing. Testing for data security, application performance, comprehensive integration testing, billing mechanism testing and business continuity testing by simulating failure scenarios and disaster recovery scenarios bring new set of testing challenges in cloud based development.
- API support and Stateless architecture – Services based approach would require designing API for your services. SaaS/Cloud based applications must define loosely coupled services and should be architected to be stateless applications. Stateless services allow dynamic scaling mechanism by letting you add/reduce machine instances as user load increases or decreases.
- Data Localization – Do not localize data storage! Data can be stored local to one server instance as they may come and go in case of instance failure or horizontal scaling.
- Dependency resolution and identification – In a service-oriented architecture, one service may depend on or use other services. In cloud, finding such resources effectively needs to be a part of the application using reusable components.