Over the past couple of years, the cloud has been able to firmly cement its position in the Enterprise and has emerged as one of the most disruptive technologies of the last decade. IDC reported that in 2016 alone, the cloud market stood at a value of $148 billion, growing at an annual rate of 25%. IDC also estimated that more than 41% of businesses plan to increase their cloud spends. Gartner predicts that by 2020 cloud deployment of software will become the default choice of the enterprise owing to the high rate of cloud adoption. With concerns of compliance and security being mitigated, organizations across the globe are not only looking at migrating their applications to the cloud but are also developing products that are developed and hosted on the cloud itself.
Cloud products, also known as SaaS applications, provide organizations with increased application scalability. These applications are easy to deploy, use and manage and require minimal to no infrastructure at all. Cloud applications do not use legacy technologies such as Flash, Silverlight etc. and favor the use of newer technologies such as CSS3, Java, jQuery, HTML5 etc. as these technologies support multi-tenancy which allows application infrastructure sharing.
But is developing a cloud product different? Well, it is in some key ways – in this blogs we look at just what that difference is.
One of the primary concerns of developers when building cloud products should be self-service. The application should be such that the users can leverage the application, largely without the help of a support team or an admin. Lengthy processes to get started on the application will only put off users and hence, the application should allow the users to register and start using the services almost immediately.
Utilize multi-tenancy architecture
Cloud products can indeed should, serve a large number of users at the same time. Hence the focus of such products thus should be on flexibility as these products need to have the capability to manage the data and services for multiple clients. To do so, cloud products should be developed using multi-tenancy architecture. Here all the clients are served from a common software instance, employ a common hardware infrastructure, and use a common code-base to expand services. This makes the cloud product easy and cost-effective to develop and maintain.
Integration with other applications should also be a key focus area when developing a cloud product. Using a standard set of API’s when developing a cloud product makes it easier to integrate the cloud application with other on-premise or cloud applications the Enterprise may use.
Assessing the scalability requirements of the application are central to developing a cloud application. Developers should assess if their application needs vertical scaling (increasing system resources such as CPU cores, RAM etc.) or horizontal scaling (increasing the load of the application across a group of servers). Assessing the scaling capability of the platform on which the application is being built and ensuring that an increase in the number of users or transactions does not impact application performance negatively is imperative. It, therefore, is necessary to address questions of usage spikes, connectivity or system failures, concerns of additional storage etc. at the outset of the application development process and prevent outage concerns. Having a strong link between the data and application ensures that the backend can scale separately from the presentation and business logic layers. This ensures maximum application performance.
Security set up
Application security is of paramount importance when developing cloud products. Gartner estimates that most security breaches take place at the application layer, making it imperative for developers to code for common application errors like SQL injection. Since cloud applications use the same underlying database system, a flaw in one application can put all the other applications at risk as well. Developers also need to ensure that data is protected always, in transit as well as at rest, by securing the communication channels between physical systems and resources on any machine. Using application security scanners, encrypting primary data, implementing secure engineering practices in the design and code development stages, employing source code scanners etc. help in making cloud applications more secure.
Cloud applications must be built for performance. Since cloud applications will be accessed via the internet it is imperative that the application has high performance in data rendering, data querying and while implementing transactions. Additionally, since these applications have a “one-size-fits-all” structure, they demand a high degree of configurability which means that the developers have to enable flexible dashboards, facilitate storage of extended data with built-in objects etc. amongst other things. Further, they need to ensure that a sudden spike in the number of users at any given point in time does not lead to an outage. They also need to design API’s and assess which of these API’s should be exposed to third-parties to avoid security concerns and ensure high performance.
Cloud products will be accessed and used by multiple clients simultaneously and use a shared infrastructure. Thus, these products need to have strong identity management policies in place. Uniquely identifying each individual tenant and segregating them both at the application and the database layer becomes imperative. Along with this, developers cannot have a single schema for all tenants and need to make provisions for having separate schemas for each individual tenant using or accessing the application.
Cloud products need to be tested differently than traditional web applications. Given a large number of shared users, it is essential to test the application performance in conjunction with the shared resources to ensure that the application performs optimally at all times. Testing for multi-browser compatibility, peak performance tests, interface backward compatibility, security testing, access control, multi-privilege tests, ensuring SLA adherence, testing interfaces between components and application performance amongst other things such as live upgrade tests etc. become essential.
Given the increased adoption of cloud products, developers often consider DevOps to make application development easier, faster and more convenient. Using the DevOps methodology for cloud product development streamlines the development process further and makes it more time efficient for testing, deployment, and production. Here the cloud is leveraged as a performance platform. This enables even more agile software development and execution by eliminating error-prone environments. Employing DevOps for cloud product development gives developers the ability to respond faster to user needs and navigate the coding, testing, integration and deployment cycles in the quickest possible manner. This also gives businesses the flexibility to allow process changes according to business demands by accelerating the speed to deployment.
Is your product a Cloud product yet? What special considerations did you factor into your product development?