DevOps · Map

The DevOps Map

DevOps is the work of getting code from a commit to a healthy production service, quickly and repeatably. The tools fall into layers, from Linux and containers up through orchestration, CI/CD, infrastructure as code, observability and deployment strategies, and each layer solves one problem. This page maps the landscape for a Java and Spring engineer who deploys to AWS, compares VMs, containers and serverless, gives a which-tool-for-which-problem guide, introduces the DORA metrics, and lays out the pages that follow.

7
Layers
5
DORA metrics
9
Pages planned
3
Ways to run
01
Chapter One - The Big Picture

Build, Ship, Run, Observe

DevOps is the practice of making the path from "code committed" to "code running and healthy in production" short, repeatable and safe, and of making the people who write the code responsible for how it behaves in production. The tools are a consequence of that goal, not the goal itself. Every tool in this section solves one stage of one loop.

The delivery loop: build, ship, run, observe, and back to build
BUILD code, test, package SHIP registry, release RUN cluster or servers OBSERVE metrics, logs, traces commit > CI pipeline > immutable artifact deploy running service emits telemetry feedback Infrastructure as code provisions the places things run (network, clusters, databases, IAM) Pages: 01 Linux and 02 Docker underpin every box; 05 CI/CD is BUILD and SHIP; 03 and 04 Kubernetes, 06 Terraform and 08 deployment strategies are RUN; 07 observability closes the loop.
StageQuestion it answersTypical failure when it is missing
BuildCan anyone, on any machine, produce the same artifact from this commit, and does it pass the tests?"Works on my machine"; manual builds; a release nobody can reproduce
ShipHow does a tested artifact reach an environment, and who or what approves it?Copying a jar by hand over SSH; different artifacts in test and prod
RunWhere does it execute, how is it restarted, scaled and configured?A process started in a terminal; one server nobody dares reboot
ObserveIs it healthy, and if not, why?Users report outages before you notice; hours spent guessing
InfrastructureWho created these servers, networks and permissions, and can we recreate them?Click-built environments that drift apart; no disaster recovery
Key insight: Treat everything that is not business logic as code that is reviewed, versioned and tested: the build recipe (Dockerfile, pipeline), the infrastructure (Terraform), the runtime configuration (Kubernetes manifests). Once it is code you can review it, roll it back and repeat it, which is most of what "DevOps" means in practice.

A Java/Spring engineer who deploys to AWS already touches every stage: Maven builds a jar, something copies it to ECS, EKS or EC2, an environment variable points it at RDS, and CloudWatch shows its logs. This section makes each stage explicit, with the Linux and container knowledge underneath it.

02
Chapter Two - The Landscape

What Each Layer Solves

The tool names change every few years; the problems do not. Learn the problem each layer solves, and a new tool in that layer is a variation, not a new subject.

The tool landscape as layers: each layer solves the problem the one below leaves open
Observability Prometheus, Grafana, OpenTelemetry, CloudWatch Is it working? Why not? Deployment strategies rolling, blue-green, canary, feature flags How do we release without an outage? CI/CD GitHub Actions, GitLab CI, Jenkins, Argo CD How does a commit become a release? Infrastructure as code Terraform, OpenTofu, CloudFormation, CDK How do we create clusters, DBs? Orchestration Kubernetes, Amazon ECS Where do containers run, scale, heal? Containers Docker, OCI images, registries (ECR) How do we package app + dependencies? Linux processes, files, networking, systemd, cgroups What everything above runs on Read it bottom-up for learning order, top-down for what users feel.
LayerProblem it solvesRepresentative toolsPage
Linux and shellEverything runs as processes on a kernel: you must be able to inspect, limit and debug thembash, systemd, ss, journalctl, cgroups01
ContainersPackage the app with its exact dependencies so it runs the same everywhereDocker, Podman, containerd, OCI images, Amazon ECR02
OrchestrationRun many containers across many machines: scheduling, restarts, scaling, service discovery, configKubernetes, Amazon ECS, Amazon EKS03, 04
CI/CDBuild, test and release automatically on every changeGitHub Actions, GitLab CI, Jenkins, AWS CodePipeline, Argo CD (GitOps)05
Infrastructure as codeCreate and change cloud resources from reviewed, versioned definitionsTerraform, OpenTofu, AWS CloudFormation, AWS CDK, Pulumi06
ObservabilityUnderstand a running system from its outputs: metrics, logs, traces, alertsPrometheus, Grafana, OpenTelemetry, Loki, Jaeger, CloudWatch, X-Ray07
Deployment strategiesChange what is running without downtime or with controlled riskRolling update, blue-green, canary, feature flags08

Two ideas connect the layers. Immutability: you never patch a running server; you build a new image and replace the old instance. Declarative state: you describe what you want (three replicas of this image, this load balancer) and a controller (Kubernetes, Terraform apply) makes reality match, instead of scripting the steps.

⚠ Collecting tools instead of solving problems
  • A team of five with one service does not need a service mesh, a GitOps controller and a multi-cluster setup. Add a layer when its absence hurts: when manual deploys cause outages, add CI/CD; when environments drift, add infrastructure as code; when you cannot explain an incident, add observability. Operating a tool is a permanent cost.
03
Chapter Three - Where Does It Run

VM, Container or Serverless

Three ways to run the same service
Virtual machine Your app + libraries Guest OS (own kernel) Hypervisor Hardware You patch the OS Container Your app + libraries Container runtime Host OS (shared kernel) Hardware or VM You build and ship the image Serverless function Your function code Provider runtime Provider fleet (hidden) Provider hardware You ship only the code Top box = what you own. Everything lower is shared, managed by you (VM, container host) or by the provider (serverless). On AWS: EC2 is a VM. ECS and EKS run containers on EC2 or on Fargate (serverless compute for containers). AWS Lambda runs functions. Spring Boot can run on all three; the trade-off is control versus operational work.
Virtual machine (EC2)Container (ECS, EKS, Fargate)Serverless function (Lambda)
Unit you deployA machine image plus your artifactA container imageA function package or image
IsolationStrong: own kernelProcess-level: shared kernel (namespaces, cgroups; see page 01)Provider-managed, strong
Start timeTens of seconds to minutesSeconds, plus image pullFast, but a cold start for a JVM is a real concern
ScalingAuto Scaling groups of whole machinesAdd or remove containers; the platform packs themPer request, automatic, can scale to zero
You manageOS patching, runtime, scaling, configThe image and its manifests; node patching unless FargateCode and configuration only
Cost shapePay for the instance whether busy or idlePay for the nodes (or Fargate vCPU and memory), better packingPay per invocation and duration; poor fit for steady heavy load
Good fitLegacy apps, special OS needs, stateful systems you ownMost long-running Spring services; many small services; portabilityEvent handlers, glue code, spiky or rare workloads
Watch out forSnowflake servers, drift, slow rolloutsOperational complexity of Kubernetes; image hygieneExecution limits, cold starts, vendor lock-in, hard local debugging

For a Spring Boot service the practical order of preference on AWS is usually: ECS on Fargate when you want containers with the least operations; EKS when you want the Kubernetes ecosystem or portability and have the team to run it; EC2 with systemd (page 01) for simple or legacy deployments; Lambda for event-driven glue rather than a full Spring web application. Check current limits and pricing on the AWS documentation before deciding, as they change.

Containers do not replace the need for Linux knowledge
  • A container is a Linux process with a private view of the system. Memory limits, signals, PID 1, file descriptors and DNS all behave exactly as on a plain server, so most container incidents are solved with the tools of page 01.
04
Chapter Four - Choose

Which Tool for Which Problem

Your problemReach forWhyPage
"It works on my machine, fails on the server"Docker image built in CISame image from laptop to production; dependencies travel with it02
A service is slow, full or crashing and you are on the boxLinux tools: top, ss, df, journalctl, dmesgEvery incident starts at the OS; the playbooks give the first ten minutes01
Run many containers, restart failed ones, scale themKubernetes (or ECS)A control loop that keeps actual state equal to declared state03
Pods restart, nodes fill up, resources are mis-sized, upgrades are scaryKubernetes operations: requests and limits, probes, autoscaling, troubleshootingDay-2 problems of a cluster04
Every release is manual and error-proneCI/CD pipelineAutomated build, test, scan and deploy on every merge05
Environments differ, nobody remembers how the VPC was builtTerraform (or CloudFormation, CDK)Reviewable, repeatable infrastructure with a plan before every change06
"We found out from customers"Metrics, logs and traces with alertingYou cannot fix what you cannot see; alert on symptoms, investigate with telemetry07
Deployments cause downtime or risky big-bang releasesRolling, blue-green, canary, feature flagsLimit blast radius and make rollback fast08
Asynchronous communication between servicesMessaging: Kafka, SQS, RabbitMQDecouples services; has its own operational concernsother section
Choosing a database or cacheNoSQL and caching or SQLData store choice shapes the whole architectureother section
A sensible adoption order for a small team
  • 1. Put everything in Git and build the artifact in CI (page 05).
  • 2. Containerise the service (page 02) so build and run environments match.
  • 3. Run it on a managed platform (ECS on Fargate, or EKS if you need Kubernetes), not on hand-built servers (pages 03 and 04).
  • 4. Define the infrastructure as code (page 06).
  • 5. Add dashboards and alerts before the first incident, not after (page 07).
  • 6. Adopt rolling then canary releases when the cost of a bad release justifies the effort (page 08).
05
Chapter Five - The Learning Path

Pages in This Section

The pages build upward through the layers. Read page 01 and page 02 first: everything else assumes you know what a process and a container are.

Related sections
  • AWS - the services these tools deploy onto: ECS, EKS, ECR, CloudWatch, IAM, VPC.
  • Spring Guide - the applications being built and deployed, including Actuator health and graceful shutdown.
  • Performance Engineering - JVM and database tuning that observability data feeds.
  • Messaging - the asynchronous side of distributed systems.
06
Chapter Six - Measuring It

DORA Metrics

How do you know whether your delivery process is good? The DORA research programme (DevOps Research and Assessment, now part of Google Cloud) identified a small set of metrics for software delivery performance. The current guide on dora.dev defines five metrics in two groups, checked against that page on 2026-10-31.

DORA software delivery metrics: throughput and instability
THROUGHPUT: how fast do changes flow? Change lead time Deployment frequency Failed deployment recovery time INSTABILITY: how often does it go wrong? Change fail rate Deployment rework rate Source: dora.dev guide to DORA metrics The point of pairing them: speed without stability is recklessness, stability without speed is stagnation. Use them to measure a team or a service, never individuals.
MetricGroupDefinition (as published by DORA)What it tells you
Change lead timeThroughputTime for a change to go from committed to version control to deployed in productionHow long the pipeline, reviews and approvals take
Deployment frequencyThroughputNumber of deployments over a period, or the time between deploymentsBatch size: small frequent changes are lower risk
Failed deployment recovery timeThroughputTime to recover from a deployment that fails and requires immediate interventionHow well rollback, alerting and on-call work
Change fail rateInstabilityRatio of deployments that require immediate intervention afterwards, likely a rollback or a hotfixQuality of tests, review and release strategy
Deployment rework rateInstabilityRatio of deployments that are unplanned but happen as a result of an incident in productionHow often incidents force extra, unplanned releases

Older material (the Accelerate book and early State of DevOps reports) lists four key metrics: lead time for changes, deployment frequency, time to restore service and change failure rate. The current guide renamed the recovery metric (to failed deployment recovery time) and added deployment rework rate as a fifth. If an interview or a document quotes "the four DORA metrics", that is the older formulation; knowing both is the safe answer.

  • Measure from data you already have: pipeline timestamps give lead time and frequency; incident tickets and rollbacks give fail rate and recovery time.
  • Use them to find bottlenecks, not to rank people. Goodhart's law applies: a team told to maximise deployment frequency will deploy empty changes.
  • Each page in this section moves a metric: CI/CD and GitOps shorten lead time; deployment strategies and observability shorten recovery time and cut change fail rate.
Where the numbers come from
  • Definitions above are quoted in substance from the DORA guide at dora.dev/guides/dora-metrics/. DORA also publishes benchmark bands in its annual report; those change from year to year, so this section does not repeat them. Use the current report if you need targets.
07
Chapter Seven - Summary

Cheat Sheet and Recap

Cheat sheet
QuestionAnswer
What is DevOps in one line?A short, repeatable, safe path from commit to healthy production, owned by the team that writes the code
The loopBuild, ship, run, observe, repeat; infrastructure as code underneath
VM vs container vs serverlessOwn kernel and OS vs shared kernel and an image vs only your function
Containers are...Linux processes with namespaces (what they see) and cgroups (what they use)
Kubernetes is...A declarative control loop that keeps actual state equal to desired state
Terraform is...Declarative infrastructure as code with a plan step and a state file
Three telemetry signalsMetrics, logs, traces
DORA metrics (current guide)Change lead time, deployment frequency, failed deployment recovery time, change fail rate, deployment rework rate
Adopt in this orderCI, containers, managed runtime, IaC, observability, safer release strategies
∑ The DevOps map - what to remember
  • DevOps is a loop, not a toolbox: build, ship, run, observe, and feed what you learn back into the next build.
  • Learn the problem each layer solves; tools are interchangeable within a layer.
  • Immutable artifacts and declarative state are the two ideas behind nearly every tool here.
  • Linux knowledge never goes away: containers and pods are still processes on a kernel.
  • Add a layer when its absence hurts, not before; every tool has an operating cost.
  • Measure with DORA: five metrics in two groups, throughput and instability, used to find bottlenecks and not to rank people.
Version note

DORA metric names and definitions were checked against dora.dev/guides/dora-metrics/ on 2026-10-31 (five metrics: change lead time, deployment frequency, failed deployment recovery time, change fail rate, deployment rework rate). Tool names are representative examples, not an endorsement list. AWS service limits and prices are deliberately not quoted here; see the AWS documentation. The detailed pages in this section verify their own version-specific facts.

Next in this section