0.1 Introduction to DevOps
What is DevOps?
Understanding DevOps is a journey, not just about mastering tools and technologies but adopting a mindset of collaboration, automation, and continuous improvement. At its core, DevOps is about delivering value to customers faster, more reliably, and with higher quality. It’s also about the culture and practices that bring people together, enabling teams to overcome challenges and grow through shared goals and successes.
My opinion that a DevOps engineer should be a complete engineers, one that has knowledge of how to build but also how to run an application, is in a way returning to the old ways, when an computer engineers would do everything, from manageing of the hardware layer to building applications. This is a good thing, because it allows for a more complete understanding of the system, and it allows for a more efficient way of working, because the engineer can see the whole picture, and can make better decisions.
DevOps means different things to different people:
For some, it’s about automating pipeline and infrastructure.
For others, it’s about improving security, system performance and reliability
And for many, it’s about everything that doesn’t fit in the dev or ops category.
Regardless of the perspective, the goal of DevOps is universal: improving the way we work and delivering better results to our customers.
“Explain Like I’m 5” (ELI5) version of DevOps
Imagine a restaurant. Developers are the chefs, creating the food. Operations engineers are the waiters, delivering the food to customers. DevOps and SREs are like the kitchen staff who wash the vegetables, peel the potatoes, clean the floor—doing the unglamorous but critical work that ensures everything runs smoothly and efficiently.
![DevOps](../_images/devops-merge.png)
Note
“DevOps is the union of people, process, and products to enable continuous delivery of value to our end users.” — Donovan Brown
Note
Technically, DevOps combines “Development” and “Operations,” bridging the gap between software developers and IT operations teams. It emphasizes collaboration, automation, continuous integration, and continuous delivery to create, test, and deploy software faster and more reliably.
DevOps started in 2009 when Patrick Debois and Andrew Clay Shafer hosted the first DevOpsDays conference in Ghent, Belgium. The conference highlighted the growing need for better collaboration between development and operations teams. Since then, DevOps has evolved into a global movement, embraced by organizations worldwide.
DevOps Core Principles
DevOps is guided by several fundamental principles:
Continuous Integration (CI): Developers frequently merge code changes into a central repository, triggering automated builds and tests to catch issues early.
Continuous Delivery (CD): Extending CI, CD involves deploying changes automatically to production-ready environments for rapid releases.
Microservices: Applications are broken into small, independent services, making them easier to develop, test, deploy, and scale.
Infrastructure as Code (IaC): Systems are managed through code, enabling version control, reviews, and repeatability.
Monitoring and Logging: Continuous system monitoring and logging ensure performance, prevent downtime, and enable rapid issue resolution.
Automation: Automating repetitive tasks—such as builds, tests, and deployments—minimizes human error and accelerates processes.
Collaboration and Communication: Fostering close communication across teams ensures alignment and improves outcomes.
Fail Fast, Learn Fast: Encourages experimentation while minimizing the impact of failures and learning quickly from mistakes.
Security Integration (DevSecOps): Security is built into the development lifecycle from the start, not as an afterthought.
Continuous Improvement: Feedback loops drive iterative enhancement of both processes and products.
DevOps Patterns and Anti-Patterns
DevOps patterns are proven practices that help teams succeed in their DevOps journey. They include:
Automated Testing: Ensures code quality and reliability through automated unit, integration, and end-to-end tests.
Immutable Infrastructure: Treats infrastructure as disposable, enabling rapid, consistent deployments.
Blue-Green Deployments: Minimizes downtime by switching between two identical environments during deployments.
Canary Releases: Gradually rolls out new features to a subset of users to validate changes before full deployment.
Chaos Engineering: Introduces controlled failures to test system resilience and identify weaknesses.
Feature Flags: Enables toggling features on and off without deploying new code, reducing risk and enabling rapid rollbacks.
Single Source of Truth: Ensures consistency by storing configuration and code in a single, version-controlled repository.
Dark Launching: Tests new features in production without exposing them to users, reducing risk and validating performance.
What I Do as a DevOps Engineer
The role of a DevOps engineer varies depending on the company, team, and project, but it generally involves:
Supporting teams with the infrastructure and automation they need: building pipelines, integrating tools, and creating new environments.
Enhancing security, performance, reliability, and scalability of systems.
Mentoring team members and fostering knowledge-sharing.
Conducting PoCs (Proof of Concepts) for new tools and technologies and documenting decisions with Architecture Decision Records (ADRs).
Managing stakeholders by helping them understand DevOps culture and its benefits.
Site Reliability Engineering (SRE) vs. DevOps
“Explain Like I’m 5” (ELI5): DevOps vs. SRE
Imagine a theater production.
DevOps is like the team that writes the script, directs the play, and sets up the stage and lighting. They ensure the play is ready to run smoothly when it’s showtime.
SRE is the backstage crew, handling lighting and sound, fixing issues during the performance, and ensuring the play goes on without a hitch.
While DevOps focuses on streamlining the entire development and deployment process, SRE emphasizes reliability and performance during operations. Both roles often overlap but have distinct missions.
DevOps Flavors
DevOps adapts to specific contexts, leading to specialized “flavors”:
CloudOps: Focused on managing cloud infrastructure using practices like IaC and automation.
DataOps: Streamlines data engineering and operations to enhance data reliability and accessibility.
DocOps: Integrates documentation with development and operations workflows, using tools like Sphinx or MkDocs.
MLOps: Applies DevOps principles to machine learning, ensuring models are trained, tested, and deployed efficiently.
LLMOps: A subset of MLOps, tailored to managing large language models.
![DevOps Flavors](../_images/devops-flavors.png)
CI/CD Pipeline
A CI/CD pipeline automates the process of delivering code to production. It typically involves seven steps:
Coding: Develop and review code; manage with tools like Git.
Building: Convert code into deployable artifacts using tools like Maven or Gradle.
Testing: Validate functionality, security, and performance with Pytest or JUnit.
Packaging: Prepare build artifacts for deployment using tools like Docker.
Releasing: Manage releases with Jenkins or GitHub Actions.
Configuring: Set up infrastructure with tools like Terraform or Ansible.
Monitoring: Track application performance with Prometheus or Grafana.
Continuous Integration
Continuous Integration (CI) involves frequent merging of code changes into a central repository, triggering automated builds and tests. This practice identifies and resolves issues early, enhancing software quality.
Continuous Delivery
Continuous Delivery (CD) builds on CI by automatically preparing code changes for deployment. This ensures every build is deployment-ready, enabling rapid releases.
![CI/CD](../_images/ci-cd.png)