The DevOps Ice cream:
6 flavors that you should taste!

Juan Manuel Gomez

Published: 13 Oct 2020

When we start to talk about DevOps people usually say that the term as it is is too broad or complex to have any practical implication. Even some Tech Gurus refers to it as a culture, which I  totally agree with. However, I also believe that we need to break DevOps down into smaller pieces (flavors) in order to understand all the practices that it involves and to have a better understanding of the whole software lifecycle and how DevOps helps to improve all the development and delivery of a software product step by step.

Flavor 1: Infrastructure as Code

As its name says, this practice is about defining code that, when executed, will build an entire environment in the cloud, which includes all computing, storage, networking resources, and all kinds of services that a cloud provider offers. This way an entire IT team could have a centralized and automated way to deploy their application environments, avoiding doing manual processes through Web UIs and having all the benefits of a code repository for all the company’s technological infrastructure like versioning, changes tracing, and quick hotfixes instead of a complete deployment on each change needed. The most popular tool for this is Terraform. Also, some cloud providers offer their own infrastructure as code tools (i.e CloudFormation / Azure JSON templates)

Flavor 2: Configuration Management

CM is the practice of controlling and deploying configuration-related changes to software in an automated and multi-tenant way, allowing us to deploy from 1-to-n changes across a fleet of servers, cloud applications, or any configurable software tool using different strategies. This will depend on the technology used but the concept is the same as in Flavor 1. When we are able to bring the software configuration into code we will be able to control and apply changes in a pretty straightforward way with the benefits of tracing and quick reviewing. Additionally, we will be able to make automated deployment for each fix/new feature with less effort. The most popular tools for this practice are Ansible, Chef, and Puppet. Also, cloud providers offer their own CM services like AWS SSM or Azure VM Inventory.

Flavor 3: Continuous Integration

The goal of CI is to give the developers feedback about their code changes, applying some automated steps that will cover from build and install dependencies for the code to unit testing or any security checks that should be applied depending on each coding language. Basically, this is about having a shared code repository where all code changes are verified in an automated way and will provide feedback about the results using common communication channels (e-mail, slack’s channels, SNS topics, app notifications and so…). With all these validations executed in an automated way, developers can focus on what they’re good at; CODING and having feedback from an automated review process. In a nutshell, this practice will save a lot of time for the project and will allow the developers to work in an organized and consistent way.  There are lots of tools for this practice in modern software. Some popular names are Jenkins, CircleCI, Travis, GitlabCI, Github Actions, Spinnaker.

Flavor 4: Continuous Deployment (a.k.a Continuous Delivery)

This practice is what makes it possible to ship all the latest changes with all their integration’s validations passed into an available target environment to make it available for QA and give quick feedback to the developers and stakeholders teams about what is happening with the development of the new features and having them ready for production.

In most cases, this practice will generate a “deployment artifact” before updating the target environment which allows us to track all changes and have a tagging system that will provide more tracking information for the results of applying this into the live applications.

This will also open the possibility to do quick rollback changes with less effort in case things get complicated with any update. This step is usually made in the CI tools as a final step along with helpful notifications about the deployment results.

Flavor 5: Automated Testing

This practice is about mastering the use of specialized testing tools that are able to do a complete automated workflow of testing for specific kinds of software, trace all the results, and give quick feedback to the developer and the QA engineers based on the results of the automated tests programmed through the tool. There are several kinds of automated testing tools for UIs, APIs, ETLs processes, ML applications, or any BackEnd software that can cover testing of all these kinds:

  • Unit
  • Component
  • Integration
  • End to end
  • Performance
  • Security
  • 508 Compliance

There are a lot of tools for many purposes around this practice, some popular names are Selenium, Locust, and EggPlant.

Flavor 6: Continuous Monitoring

This is the angular stone of any stable system. When we talk about monitoring, we are talking about the measurement of all possible data or states across our applications and systems. We need to monitor at least the most critical scenarios in our infrastructure and services like database outages, application URLs not responding, bad HTTP response codes, non-expected
API response or anything that literally will make an application or system not work well.

Monitoring can cover anything from error logging, TCP ports not responding or any network related issue, evaluate patterns in API responses or SQL queries, and also predict some behaviors. If all the data is centralized and processed to generate helpful IA based monitoring systems (Forecasting) or dashboards that can help to evaluate patterns and some interesting behavior around a metric.

Combining all the health checks that can be done to any application or system with some alerting / communication tools like PagerDuty or Slack can make all the teams more proactive and being updated in real-time about the state of every monitored system, providing the capacity to troubleshoot as soon as possible if any emergency happens.
There are many cool and powerful monitoring tools. Some popular names are DataDog, Splunk, ELK, Big Panda, AWS CloudWatch, AWS EventBridge, Prometheus, Sumologic, and many others.

Sharing is caring!