What actually is DevOps? Is it just a buzz word? Is it a job title? Is it a rebranded sysadmin role? Is Kubernetes DevOps? What’s all this mention of Culture and other hand-wavey hullabaloo?
Finding a simple explanation of DevOps online can be challenging. You’ll wade through buzzwords on silos, cultural philosophies, agility, team empowerment and other terms that mystify DevOps.
Definitions vary depending on who you ask. It’s hard to get a definitive answer to “what is devops?” Today we’ll be going deeper and learning about the origins of the term “DevOps” and what it means today.
Put as simply as possible, DevOps is a set of practices that allow organizations to deliver software quicker and more reliably. That’s it.
Getting a little deeper though, it gets more complicated.
DevOps is thought to have originated around 2007 or 2008. Traditional software development principles at the time had “silos” or separation between the people who wrote software and the people that deployed and supported it in production.
Meetups and movements were beginning to spring up challenging these beliefs. “10+ Deploys per day: Dev and Ops Co-operation at Flickr” was one of the most popular presentations early in DevOps history.
This new way of thinking caught on and made waves. The “wall” between developers and operations was being broken. DevOps was born.
What’s all this culture business?
Quickly googling “What is DevOps” brings up tons of mentions of the word “culture”. Practitioners will yell and state that “DevOps is cultural!” What is the cultural piece of DevOps? As best we can tell, culture references is about the relationship between Developers and Operations. In some companies, engineers may be both development and operations, with no organizational split. Either way, culturally, DevOps is about coming together and sharing responsibility for software being built.
DevOps Practices and Tools
AWS claims these are all DevOps best practices
Continuous integration, or the CI in “CI/CD” refers to the practice of regularly merging code into a central repository. Often, automated builds and tests are ran before this merge process. CI’s goals are to surface bugs quicker, and reduce the time to write quality software.
The latter of the “CI/CD” duo, Continuous Delivery refers to the practice of releasing code to production. This happens after the automated building and testing of that same code. Continuous Delivery is often bundled together with Continuous Integration tools such as: Jenkins, CircleCI, Travis, Gitlab, bamboo and many others.
Micro-services are an architectural decision and certainly have been popular lately. An alternative to the “monolithic” architecture, microservices splits a single application into many separate pieces. These microservices are often maintained by a single team and communicate with other microservices over an API.
Infrastructure as Code
Infrastructure as Code is a new way of managing and deploying infrastructure like servers, DNS settings, Load balancers and any other cloud resource with…code! This model integrates software development best practices with infrastructure deployment principles. The most common Infrastructure as Code, or IaC, tools are Terraform and Cloudformation. Some people would consider chef, puppet and ansible as infrastructure as code tools as well.
If infrastructure as code defines the resources that run applications, Configuration Management is the tracking of the state running on those resources. Config management tools allow engineers to apply changes in a controlled and systematic way. This reduces the risk of outages and “drift”. Drift is changing of configuration over time from the desired state. Popular configuration management tools include Ansible, Salt, Puppet, Chef and more.
Monitoring and Logging
Monitoring and logging are not new principles to operations engineers. However, this responsibility usually falls under DevOps. DevOps Organizations maintain tools that monitor metrics and logs that tell the health of an application in a quick glance. These same tools can be configured to alert engineers if the application experiences any kinds of issue. Monitoring stacks vary between free and open-source solutions like Prometheus and Grafana to paid services like DataDog and AppDynamics.
Version control is the tracking of code through versions. Version control allows developers to collaborate on code, review code and develop new features. Since version control keeps track of every line of code that changes, it allows quick recovery from bugs and detailed analysis of who developed what piece of code. Git is the most popular version control software today. Version Control applied to DevOps allows for tracking changes on Infrastructure as Code and Configuration Management.
Automation sure is a broad word, isn’t it? In general, DevOps engineers eliminate toil. They often do so through automation. Automation might be any kind of combination of writing scripts, developing software and creating new processes. For us, automation is one of the most exciting parts of DevOps, since it allows us put on our hacker hats and make life easier for ourselves and our peers.
DevOps often is complementary to Agile software development. Many of DevOps princples such as CI/CD and automated building and testing trace their origins to Agile in the 90s. Agile is a process organizations use to deliver software. It generally focuses on short “sprints”, early delivery, and continual improvement. Sounds really familiar, huh?
Communication and Collaboration
Back to our cultural discussion, proper communication and collaboration is a DevOps key principle to bringing together development and operations. Proper communication can make or break a DevOps organization.
Where to learn more
The DevOps Handbook and The Phoenix Project are probably the 2 most popular books on the subject of DevOPs. The former is a formal definition and expansion on topics we discussed above. The Phoenix Project is a novel about a company that overgoes a DevOps transformation.
We hope you enjoyed learning more about DevOps! If you’re interested in learning more about DevOps, networking with other Software Development professionals, please consider subscribing to our newsletter below 👇