Cloud and DevOps are two of the top buzzwords in the modern technology lexicon. They are a big part of modern software development practices. At Transcendent Software, we group them into their own service offering. In our recent post, “A Case For Custom Software”, we analyzed when to build or buy custom software. After deciding to build or buy custom software, your next thoughts are going to be centered around:
- Deploying the product to your workforce
- Scaling the product as your needs change
- Responding to changing the software as your needs change
All of these questions can be answered by the Cloud and DevOps. Before we answer all of your questions, we will provide a little history and define them both, then we will look at why they go hand-in-hand.
What is the Cloud?
The Cloud is not a new concept, but actually one that has been around since the advent of the internet. The term came of popularity in the mid-2000’s and has stuck ever since. The Cloud refers to software and services that run on infrastructure hosted in data centers all around the world, and accessible via the internet. The beauty is in how we utilize this hosted infrastructure, and really what makes the Cloud different and not just another term for standard hosting services. Before we understand how the Cloud has become an elastic and efficient mechanism for hosting software and systems, we need to understand how it came to be.
With the Cloud, the location of the infrastructure, and the actual hardware are not nearly as important as they once were. This became a reality in the mid to late 1990’s when companies started working on building virtual machines. Virtual Machines are servers that run inside of software that mimics the hardware of your choice. They are independent of the hardware they actually reside on.
In the early days of hosting, it was very important to choose the right hardware components, operating system, and networking equipment that all worked best together with our software. The virtual machine changed all of this. Now you could create a virtual server that matched your software, and a virtual network that the software worked most optimally, and it didn’t matter the actual hardware and network at all.
As the Cloud began to grow, large companies such as Microsoft, Google, Amazon, and Salesforce started offering more and more ways to interface with the Cloud, and terms such as SaaS (Software as a Service), IaaS (Infrastructure as a Service), and PaaS (Platform as a Service) came into the mainstream. They all provide software systems that provide you resources and the ability to scale with different considerations.
The Cloud is SaaS
Software as a Service is the most basic concept in the Cloud. A software vendor provides a product commercially as a subscription service hosted in the Cloud. Before SaaS, you would be required to buy a license to use software products. You would then have to allocate hardware and networking equipment to host the software. You then had to hire qualified professionals to manage the software and hardware. With SaaS, you just need to subscribe to the software, and the provider hosts the software for you. You can utilize it over the internet, either through a web browser, a small desktop application, a mobile app or IoT (Internet of Things) app.
Which came first, SaaS or IaaS?
Infrastructure as a Service and Software as a Service evolved along side each other, and were both early in the Cloud technologies evolution. Through Infrastructure as a Service the provider exposes the virtual infrastructure and allows you to deploy your software to that infrastructure. You can utilize IaaS with traditional licensed software or custom software, and not have to worry about acquiring, maintaining and refreshing actual hardware. The provider handles the underlying hardware, provides redundancies and SLA (Service-Level Agreement) guarantees.
The Cloud has become PaaS
Platform as a Service is another leg of evolution of Cloud products. Rather than subscribing to software for your business or subscribing to virtual hardware and networks, PaaS is subscribing to a platform. As a software developer, you can target the platform for your software, and not worry about infrastructure except for the platform.
For instance, if you develop a piece of software, you can deploy to the Cloud on a platform and not worry one bit about what hardware it resides on, just that it performs as you expect it to perform. You do this by designing for the platform and utilizing the scaling tools the platform offers you.
What is DevOps?
DevOps is the combination of two roles in companies that develop software solutions. Dev meaning Software Development and Ops meaning IT Operations. Again, this term is fairly new, but the concept has been around for many years. The DevOps goal is to get a stable product to market as fast and as reliably as possible. This allows software teams to focus on building features quickly and not worrying about a formal system to deploy the software where traditionally the software would have to be deployed manually by people. This ties into Agile Development, which focuses on iterative development.
The DevOps movement started as an offshoot of the Agile Development methodology. Before Agile, most software was developed utilizing a methodology called Waterfall. Waterfall originated in manufacturing and construction. It requires a lot of planning and design, and breaks work into complete phases. Once phases are completed, the product is proven to be ready for the client to use. These phases could be months or years long. Agile Development relies less on planning and design and more on iterating on small features to create a better product faster than traditional approaches like Waterfall. It shortens the feedback loop by getting the features into the hands of clients very quickly and finding out if the features are useful, need improvement, or meet client expectations.
DevOps and Agile Development
Since Agile Development leans on an iterative approach, DevOps fits nicely in this cycle. Before DevOps, Agile allowed software developers to work in iterations, but the deployment of the software was still a slow process having to pass through quality assurance, systems, hardware, and network operations people and processes before getting to clients. DevOps processes remove those barriers, and automate much of what those people were doing, so code can ship faster. This started with Continuous Integration (CI) and later evolved again with Continuous Delivery (CD).
The aim of Continuous Integration is to integrate feature and bug development quickly into the source code repository, automatically running tests against the code to identify integration issues and bugs faster. This allows the team to resolve these problems in a timely manner. CI works very well with Agile Development and the iterative approach to software development. In other long phase methodologies like Waterfall, these integrations wouldn’t happen until much later in the software development life cycle and would introduce all sorts of issues trying to get all of the code to work together.
Continuous Delivery builds on Continuous Integration and is a perfect compliment to Agile Development. As teams patch bugs and build features in iterations, they are empowered to release the software frequently. Through automated testing, they have some level of certainty that their feature works as expected. It’s now safe to be released the client. While the trigger of the release is still a manual one, teams have automated the process of releasing the software. Releasing is just as simple as clicking a button or several buttons and the software is shipped!
Another offshoot of Continuous Delivery is Continuous Deployment (also abbreviated CD). The terms are often used interchangeably. I find myself doing the same from time to time. Continuous Deployment builds on Continuous Delivery by automating the trigger and release of the deployment to the client. When a developer has completed a bug patch or feature, they check their source code into source control. This triggers levels of automation to build the project, test the features, and release the product to production. Teams that utilize Continuous Deployment can release new versions of their product many times a day or week. The best part is that the releases are transparent to the end users! This is DevOps at it’s best!
The Perfect Pair
As the title of this post suggests, when used together, Cloud and DevOps really are the perfect pair. Agile Development enabled both Cloud and DevOps to work at their best. Neither works quite as well without the other. Cloud systems can be developed without DevOps. Without the Cloud, DevOps can still utilize techniques like automated testing, CI and CD on private hardware and networks. When used together, from the moment source code is checked into source control all the way to the client utilizing the product at scale, Cloud and DevOps are a wonderfully woven symphony of technological bliss!