This article first appeared in Forbes.
I like to use an analogy when comparing traditional IT to DevOps. It goes like this: Traditional IT operations are comprised of highly trained specialists who are like drivers on the treacherous Lowari Pass who can flawlessly execute specific tasks.
They do so in a high-touch, highly manual way that results in backlogs that slow down business productivity and innovation. Conversely, DevOps is like paving that dirt road with a sleek, modern freeway that anyone is capable of driving -- complete with road signs, traffic rules and barriers that keep everyone moving smoothly in their own lane.
Having painted this analogy, it’s important to note that you can build this sleek expressway in the cloud (which is rife with tools and services for just this purpose) or in your own on-premise data center. And just as you can have DevOps without the cloud, you can also have the cloud without DevOps. This situation leads many people to ask a very chicken-or-the-egg type of question: What should come first -- the cloud or DevOps?
Part of the challenge with this question is that DevOps is a cultural and process-related change while cloud computing is a technology. In essence, the question compares apples to oranges, which further muddies the waters. The best answer is to approach the two simultaneously, so you can take advantage of the strengths of each in parallel. Let’s analyze each scenario individually to illustrate why.
As mentioned, DevOps can certainly be implemented on-site. Its implementation differs significantly from cloud-based DevOps because one of the core tenets of DevOps process improvement is the application of automation to streamline processes for increased IT operations and developer productivity. On-site, teams can automate server configuration and code with tools like Ansible or Chef. However, hardware elements like networking are much harder to automate since the legacy networking equipment does not offer ready-to-use APIs.
In contrast, cloud computing offers the ability to automate the provisioning of not just software but also infrastructure elements (e.g., routers and load balancers). Through code and templates, teams can automatically summon elements as diverse as security services, databases and networking. However, as mentioned above, you can be in the cloud and not use automation at all. Indeed, there are many companies that move to the cloud sans DevOps. Most often, these organizations take a lift-and-shift approach in which they simply move their data center to the cloud without adding any automation. To give a simple example, you could create a WordPress cloud server, login and use it. This uses no automation and should not be confused with cloud-based automation or DevOps.
While you can benefit from cloudless DevOps automation and you can benefit from a DevOps-free cloud implementation, it’s only when the two come together that ultimate DevOps benefits are achieved. It is the combination of the cloud’s deep automation capabilities with DevOps processes that maximizes productivity and efficiency.
DevOps streamlines the delivery of infrastructure, code and configurations while maintaining security. You need each of these areas to be fully functioning to achieve the goal of an efficient, free-flowing expressway. For this reason, organizations that begin their DevOps initiative hand in hand with a move to the cloud typically achieve benefits faster than their peers. Cloud-based tools like AWS EC2 and CodeDeploy make DevOps easier to adopt because you can set the level of automation. And doing so in support of process change makes adopting the change all that much easier.
Which Path To Take
With all this in mind, there are several paths to take to achieving cloud-based DevOps benefits:
1. Cloud first, followed by DevOps: This approach often looks like a lift and shift to the cloud with automation subsequently added through cycles of continuous improvement. For example, consider a small nonprofit organization that took this approach as its data center lease was expiring. It didn’t have the time to automate and provision a new infrastructure in the cloud, so it took a forklift approach to moving to the cloud. Once the migration was complete, it began adopting new cloud-based automation in support of DevOps processes.
2. DevOps first, followed by the cloud: Conversely, this approach often starts with organizations automating as many processes as possible on the premises. For example, I had the opportunity to work with a large specialty retailer that had paired technologies like Docker Swarm, VMs and Ansible to automate the continuous integration and continuous delivery of code to all but one area of automation in-house. Once the organization reached such an advanced level of maturity, it sought to move to the cloud to take advantage of the cloud’s deep automation capabilities for even greater efficiency.
3. Concurrent adoption: This option is the most efficient and gets you to DevOps faster. It allows an organization to adopt automation at all levels concurrently, using technology to enforce new DevOps processes while maximizing efficiencies. Organizations that take this approach often have the time to work ahead and build a cloud architecture for themselves that takes full advantage of automation for infrastructure provisioning, configuration management, continuous code delivery and even container management. Using advanced cloud services helps maximize operations and developer productivity while increasing security since human error is less prone to occur (there is ample room for human error in manual processes).
Naturally, your timeline and business requirements will dictate which of these approaches is best for your organization. Regardless of your path to DevOps and the cloud, the more automation you can integrate into your processes, the more mature you’ll find your team becoming. And with maturity grows efficiency, productivity and specific desired business outcomes like faster time to market, greater scalability and increased global reach.