What is DevOps?

March 03, 2024

Overview

DevOps is a model where development and operations teams are one. The idea behind it is that developers are best equipped to handle their service's operational burden. Likewise, by handling their operational burden, they can be better informed when developing new features and updating existing ones. This creates a bidirectional feedback loop.

Over time, this bidirectional feedback loop has bred a set of broad principles that most (if not all) services can benefit from.

Table of Contents

DevOps Principles
CI/CD
Automated Testing
Infrastructure as Code (IaC)
Observability
Containerization
Microservices Architecture
DevSecOps
Conclusion

DevOps Principles
^

CI/CD
^

Continuous Integration and Continuous Delivery enable rapid, incremental iteration of a project. Without it, it's difficult for many developers to work simultaneously on a codebase.

Automated Testing
^

Automated Testing is a subset of CI/CD, but it's so important that it deserves its own section. Regression in an application is inevitable without proper testing. Removing manual effort in this testing enables more time to be spent building new features.

Learn more about Testing in Software Engineering.

Infrastructure as Code (IaC)
^

Cloud Platforms have granularized individual cloud computing components into puzzle pieces. It's common to put these puzzle pieces together by hand using a Cloud Platform's GUI (graphical user interface). However, these puzzle pieces can be expressed as code using tools like AWS's CloudFormation. Defining infrastructure as code increases modularity beyond the application to its entire environment. This reduces risk when creating new environments or modifying existing ones.

Cloud-agnostic tools also exist, like Terraform. Terraform provides a single Domain-Specific Language to write Infrastructure-as-Code that can deploy to any Cloud Platform.

Observability
^

Observability encompasses features that allow operators of a service to understand its state. It encompasses:

  • Logging
  • Metrics
  • Alerts
  • Tracing (optional)

And any tool that enables broader or deeper understanding of a service or its dependencies.

Containerization
^

Containerization is the principle of encapsulating applications in modular easy-to-deploy containers. It increases reliability and modularity by bundling an application alongside its operating system and startup configurations to reduce variability in different environments.

Learn more at What is a Container?

Microservices Architecture
^

Microservices is an overused term that can just as easily refer to services. It's yet another broad principle to separate concerns and encapsulate applications in a predictable manner. More specifically, the entire microservices cluster would be referred to as a single application, composed of many services that communicate over a network. However, this network in many cases is virtual.

Learn more about this type of architecture and one of the best frameworks that uses it at What is Kubernetes?

Alternatively, more at Microservices vs Monolithic.

DevSecOps
^

Security is a growing domain within any subfield of software engineering, and DevOps is no different. In this context, it simply refers to the inclusion of a Security review in the DevOps process. This Security review may require the addition of sophisticated Security monitoring features to fully secure the application. This work is highly use case dependant and needs to be weighed against the risks.

Conclusion
^

DevOps is technically a methodology, as has been described above. However, within the industry, it could also refer to a role that specializes specifically in CI/CD (i.e. DevOps Engineer). So, it has these dual meanings.