How Should You Develop Software Differently for the Cloud?
The Pre-Cloud Development Workflow
Before the Cloud, application development and operations required obtaining servers and storage, and configuring them with database server software, middleware, runtime environments, etc. Often network equipment would need to be purchased and configured to connect servers and storage securely.
In the past, hosting often meant either purchasing or renting specific server hardware, sized to a particular workload based on user traffic to the application. User traffic is difficult to predict and varies considerably based on many factors. Time-of-day, external events, and time-of-year can all have an impact on user traffic to an application. Think Black Friday for a retailer’s eCommerce site. Developers are always asked how much CPU and RAM the unfinished application was going to need and how many users would be using the app concurrently. An organization with multiple applications would constantly juggle how to deploy an app on an existing server they were already paying for without creating issues with the current apps on the server.
The creation of virtualized servers, and later, cloud fabrics had a dramatic impact on the way developers and organizations approached hosting. This audience was eager and ready for a solution that would change the challenging and expensive proposition of forecasting and maintaining server infrastructure, which was typically overprovisioned to support periods of peak traffic. This change began chipping away at the traditional development workflow, and that was only the beginning. As cloud services have matured, they have moved beyond just virtualized infrastructure and have begun to influence every aspect of the development workflow.
Evolution of Cloud Service Offerings
Application development companies created the concept of a Cloud in the early days of the web. They adopted a new application architecture which allowed them to host and manage their application on their users’ behalf, while their users accessed it using a browser. They removed the complexity of managing on-premise infrastructure from their customers.
This method of software delivery is now referred to as software as a Service (SaaS). From online banking and brokerage to email and calendaring services like Office 365 and Gmail, SaaS is commonplace today.
Cloud Service Providers, such as Amazon, Microsoft, Google, etc., have greatly expanded Cloud service offerings since the early days of SaaS. Let’s review those offerings:
IaaS (Infrastructure as a Service)
Think of this as your On-Premise solution but hosted by someone else. This provides Servers, Virtual Machines, a network infrastructure, and a storage infrastructure. As SaaS removed the responsibility of managing infrastructure for a particular application, IaaS removes that responsibility for all infrastructure required by an organization. With IaaS, you still manage the Server OS, any Middleware, Runtimes, Data Services, and any Applications.
Developing in an IaaS environment is not much different than developing applications for an On-Premise data center. The only difference is that you will connect outside of your firewall and into the service provider’s data center.
PaaS (Platform as a Service)
PaaS continues easing the burden of application administration by further managing the VMs, middleware, and runtimes. The service provider handles everything except the custom application code you build and the management of the data. You still need to provide resources to be put into and brought out of service as workloads vary.
The PaaS offering from cloud service providers also provides discrete services for data, messaging, file storage, analytics, data warehouse, orchestration services, streaming services, security and identity, artificial intelligence, and facial recognition, to name a few.
The service provider manages these PaaS services, and you pay for your usage without the associated cost and pain of that management. You can incorporate these services in your applications that, historically, would have been cost-prohibitive to license.
FaaS (Function as a Service)
FaaS, also called serverless computing, further abstracts infrastructure management, instantly scaling application resources in response to real-time events. Serverless computing only runs the software as required by application events. As a fully managed service, server management and capacity planning are provided by the platform, and billing is based-on resources consumed while the actual code is running. FaaS is ideally suited for microservices-based application development.
Application Development in Traditional On-Premise Architecture vs. Cloud Architecture
Let’s briefly review what it takes to develop and deploy an on-premise web application. As noted earlier, in an on-premise environment, it would be necessary to acquire all the storage, servers, network gear, operating systems, database server software, middleware, and runtimes. All of this would need to be installed and configure before the developed application is deployed.
Let’s compare that work to what the requirements are for each of the cloud services: IaaS, PaaS, and FaaS. Note that purchasing hardware is unnecessary for each of the cloud services
Developing in a PaaS and FaaS offering appear very similar, but there are significant differences. PaaS provides managed services for an “always on” application. You have to configure those resources to meet anticipated workloads, and you pay for those resources as long as they are in use. With FaaS, you only pay for the compute resources consumed while the application is processing events.
Although PaaS and FaaS eliminate infrastructure management, they generally offer a narrower feature set than corresponding licensed software found in on-premise and in IaaS environments. Before making a move to PaaS or FaaS, learn the features, their strengths, weaknesses, tooling, and specific methods of integrating them into your solution.
Moreover, some PaaS and FaaS solutions provide a specific toolset for the IDE, debugging, and source control. You gain a high level of abstraction with services that make it easier to build forms, workflows, security, and validations. To fully leverage those features, you need to understand the offering fully.
In other cloud offerings like AWS and Azure, you have access to services that can often seem very similar if not identical. In those cases, you need to learn the variations to understand which is best for your specific application.
For instance, Azure provides no less than 11 variations of databases. Azure SQL sounds very much like SQL Server hosted on a VM, but they have significant differences in functionality, scalability, and cost. It provides multiple variations of NoSQL databases, each with its distinct features and applications.
If you are new to cloud development, start learning about the cloud offerings, you might be leveraging and different architectural approaches available. As you are doing this, think about one or more of the projects you have built. Think about how you can take advantage of that offering if you were to develop your solution again from scratch.
Cloud software development can open a world of reduced cost, management, and maintenance while optimizing availability and performance. The key is to learn your cloud offering and architect your solution using the right combination of tools for the job.