The Ins and Outs of DevOps
DevOps is a set of principles and practices that help to enhance communication and collaboration between development and operations, but it’s widely misunderstood by many people. Some folks think DevOps is essentially developers deploying their own code into production, which will obviously not scale if you are working at a large bank or any publically-owned firm that must comply with the most basic regulatory and audit requirements. Others believe DevOps is a specific team of individuals who are responsible for automating application build, package, and deployment.
In my world, DevOps focuses on enhancing the working relationship between different organizational structures. These can include development and operations but also could just as easily include QA, data security, or any other silo of smart people who need to collaborate more effectively. This requires an understanding of DevOps principles.
DevOps, by its very nature, views the organization as a comprehensive system that includes development, QA, operations, and any other team that contributes to the success of the project. DevOps breaks down silos and focuses on effective communication and collaboration. The first step is to ensure that stakeholders get involved as early in the lifecycle as possible. This means operations should help deploy applications from the very beginning of the lifecycle.
When I am working as a deployment engineer, I ask to do the deploys starting with the development test environment. This approach has become known as “left-shift,” where Ops gets involved from the early stages of development. Early involvement helps me understand the technology and gives sufficient time to automate each step of the application build, package, and deployment. Unfortunately, too many organizations allow the development team to operate in a vacuum and expect the Ops team to somehow jump in just before the application is deployed to user acceptance testing or even production.
DevOps encourages feedback loops and experimentation so teams can ascertain what works best and continuously improve their process. The fundamental unit of an effective DevOps culture is the “cross-functional” team, which operates at a pace that is sustainable. The first thing I usually do is get the team to deploy smaller releases on a more frequent basis.
I often see teams who try to deploy large releases every other month with far too many glitches and problems. Just getting the team to deploy twice a week eliminates many common problems. The first reason is that the releases are smaller, they involve less risk, and if anything does go wrong, it is much easier to fix. The second reason why it's better to deploy more often is that the team just gets more efficient at deploying and automating every single step.
DevOps requires that tools become first-class citizens. Process is more important than tools, but great tools are just not optional. Successful organizations create structures and processes where effective collaboration is compelling—and this leads to agile systems, profitable businesses, and happy users.