Learn DevOps & Production Engineering

How source code becomes a running production system, how it is changed continuously without breaking, and what an operator does when production behaves differently from the assumptions it was built on. Thirty-three modules, from what makes production different to operating agent systems.

CodeBuildTestArtifactReleaseDeployRunObserveOperateIncidentRecoverLearnImprove

Production Fundamentals

7 lessons

What makes production different from every environment you can reason about locally — real traffic, real data, real failure, real cost, and continuous change — and what DevOps actually means once it stops being a job title.

What Production Engineering Is

The discipline of making software operable under real traffic, real data, real failure and continuous change.

Q · What is the actual discipline here, once you remove the tool names?
What DevOps Actually Means

A set of practices for reducing the distance between building software and operating it — not a team, and not a job title.

Q · What does DevOps mean, given that it is now also a job title, a team name and a tool category?
Why Local Success Predicts So Little

Everything that makes production hard is absent from the environment where the code was written and reviewed.

Q · It works locally and in staging. What is production going to do that neither of those did?
The Production Loop

Code to build to artifact to release to deploy to observe to incident to learn — and why it is a loop rather than a line.

Q · What is the full path from a commit to a running system, and where does it close?
Shared Ownership

Who is responsible for a service in production, and why that answer has to be a specific team rather than everyone.

Q · Who owns this service in production, and what does owning it actually oblige them to do?
From Developer to Users

The full path a change travels, as a model you can debug against when something in it goes wrong.

Q · What is the complete chain between a developer and a user, and why is knowing it a debugging tool?
What Can Fail Between Commit and User

A catalogue of delivery failures, arranged by where in the chain they happen and what they look like from the outside.

Q · When a change does not reach users correctly, what are the actual candidate causes?

Delivery Lifecycle

6 lessons

Plan, code, review, build, test, package, release, deploy, verify, operate, learn — each stage with its inputs, outputs, evidence and rollback story.

The Software Delivery Lifecycle

Plan through learn as a chain of stages, each with defined inputs, outputs, automation, evidence and a way back.

Q · What are the actual stages between an idea and a change users can depend on, and what does each stage owe the next?
Plan and Code

The decisions taken before and during writing — change shape, size, reversibility and coexistence — determine how safely it can ship.

Q · What has to be decided before the first line is written for the change to be shippable without heroics?
Review as a Gate

Human review reliably catches some classes of defect and reliably misses others; treating it as a general safety net is how the missed classes reach production.

Q · What does code review actually catch, what does it provably not catch, and what should therefore be checked some other way?
Package and Release

Build one artifact, address it by digest, promote it through environments, and make the release a recorded decision separate from the deployment.

Q · What exactly is being shipped, how do you refer to it unambiguously, and who decided it should go?
Verify in Production

A deploy reporting success says the orchestration worked; verification is comparing the new version against a baseline on signals that reflect users.

Q · How do you know a change is working, as opposed to knowing it was deployed?
Learn and Improve

The stage that closes the loop: turning what production taught you into a merged change, rather than into a document and a resolution to be careful.

Q · How does what production taught you become a change to the system rather than a memory?

Source Control as Production

6 lessons

A commit is not history; it is a candidate for production state. Branching models, protected branches and required checks as delivery infrastructure rather than team preference.

Source Control as Production Infrastructure

When merging triggers delivery, the repository stops being a record of what happened and becomes the control plane for what production is.

Q · If a merge can change production, what does that make the repository, and what does it owe you?
Git Workflows

Branching models are delivery constraints, not team preferences — and there is no universal winner, because they optimise for different release realities.

Q · Which branching model fits, given what you ship, to whom, and how often?
Trunk-Based Development

Small changes, integrated into one mainline at least daily, with main kept releasable at all times — which is a set of demanding requirements, not a branch naming convention.

Q · What does it actually take to keep one mainline releasable while everybody integrates into it every day?
Long-Lived Branches

Divergence has a cost that grows superlinearly with time, and the expensive part — semantic conflict — is invisible to every merge tool.

Q · What does a branch actually cost per day it stays open, and when is that cost worth paying?
Protected Branches

Rules on the branch pointer that delivery reads from — enforced server-side, because anything enforced on the developer's machine is advice.

Q · What has to be true about the branch your pipeline deploys from, and where can that be enforced?
Required Checks

Automated checks bound to a branch as a merge condition — useful exactly to the extent that they ran on the right code, mean something, and are trusted.

Q · What should be required before a merge, and what makes a required check worth its latency?

Continuous Integration

9 lessons

CI as a feedback system, not a task runner: what to check, in what order, how to parallelise it, what to cache, and why a slow pipeline changes engineering behaviour.

Continuous Integration

Merging everyone's work into a shared mainline often enough that divergence stays small, and proving the merged result actually works.

Q · What does continuous integration commit you to, beyond having a pipeline that runs on push?
CI Is a Feedback System

The product of a pipeline is a trustworthy verdict delivered while the author still has the change in their head; everything else is overhead.

Q · What is CI actually for, given that the tests would run eventually anyway?
Designing the Pipeline

Order checks by signal per unit of cost, gate on the cheap ones, and be explicit about which checks run on a branch, on trunk, and nightly.

Q · Given a set of checks, in what order should they run and which ones should block?
Parallelising CI

Wall-clock time is set by the longest dependent chain, not by total work — so parallelism helps exactly as far as the graph and the shared resources allow.

Q · The pipeline is slow and we have runner capacity. What actually gets faster when we parallelise, and what does not?
The CI Dependency Graph

A pipeline should be a DAG of real dependencies; stages, sequential steps and path filters are approximations of it, and each approximation has its own way of being wrong.

Q · Which jobs in this pipeline genuinely have to wait for which others, and which are waiting because of how the file is written?
Caching in CI

A cache key is a claim that two inputs are equivalent; when the claim is wrong the pipeline does not get slower, it gets wrong.

Q · What can safely be reused between CI runs, and what does the key have to include for that reuse to be correct?
Triaging a CI Failure

A red pipeline has four common causes with four different correct responses, and telling them apart quickly is a learnable procedure.

Q · The pipeline is red. Is that my change, the environment, a flake, or something already broken on trunk?
CI Security

The pipeline is a privileged production identity that executes code from anyone who can open a pull request — and those two facts have to be kept apart.

Q · What can an attacker do with our CI system, and what is the smallest set of privileges each job actually needs?
Flaky Tests

A test that passes and fails on identical input destroys the verdict for every other test in the run, because it teaches people to re-run until green.

Q · Why is an intermittent test failure more dangerous than a consistent one?

Build Systems

7 lessons

Turning source into an artifact you can trust: reproducibility, pinned inputs, environment isolation, and being able to prove where a binary came from.

What a Build System Actually Is

A dependency graph of tasks with declared inputs and outputs, plus a rule for deciding what still needs doing — not a script that runs commands in order.

Q · What is a build system doing that a shell script does not?
Reproducible Builds

The same source plus the same declared inputs yields the same artefact — which requires pinned dependencies, deterministic actions and an isolated environment, in that order.

Q · If I build this commit again next month on another machine, do I get the same artefact — and how would I know?
Build Provenance

Six facts recorded at build time — commit, builder, inputs, toolchain, timestamp and artefact digest — that let you answer "where did this artefact come from" without guessing.

Q · Something is running in production. Can we prove which commit it was built from, by what, and from which dependencies?
Dependency Management

Most of what you ship was written by strangers, resolved by an algorithm you did not choose, and updated on a schedule you have to decide.

Q · What is actually in this build, who decided which versions, and how does that set change over time?
Dependency Pinning

Pinning buys reproducibility and tamper-evidence, and hands you the update duty the range was performing on your behalf.

Q · Should dependencies be pinned to exact versions, and what do you take on when you do?
Build Environments

The machine a build runs on is an input to the build, and everything about it that is not declared is a source of drift, of irreproducibility and of shared-state compromise.

Q · What about the machine running this build is an input, and which of those inputs have we actually declared?
Build Performance

Builds are slow for three different reasons — repeated work, serialised work, and genuinely expensive work — and each has a fix that does nothing for the other two.

Q · The build is slow. Which of the three slownesses is it, and what actually helps?

Artifacts & Registries

7 lessons

Build once, promote many. Immutable outputs, digests versus tags, registries, retention, and why rebuilding per environment quietly destroys your evidence.

What an Artifact Is

The immutable, stored, addressable output of a build — the unit that gets tested, promoted, deployed and rolled back.

Q · What exactly is the thing that gets deployed, and why does it have to exist before the deploy starts?
Build Once, Deploy Many

One artifact is built, then promoted unchanged through every environment, and environment differences arrive as configuration rather than as a rebuild.

Q · If staging and production need different settings, why not just build a separate artifact for each?
Artifact Registries

The store artifacts live in between build and deploy — and a piece of production infrastructure on the critical path of every scale-up.

Q · Where do artifacts live between being built and being run, and what does that store owe you when it is 3am?
Tags Versus Digests

A tag is a mutable human reference; a digest is content identity. Deploying by digest is what makes a rollout reproducible.

Q · What is the difference between deploying `app:2.3.1` and deploying `app@sha256:9f3e...`, and when does that difference become an incident?
Semantic Versioning, and Where It Stops Applying

A version number is a compatibility promise to consumers who upgrade on their own schedule — and for a continuously deployed internal service there are none, so a build number is the honest answer.

Q · What does a version number promise, who is it a promise to, and what should an internal service use instead?
Artifact Retention

Which artifacts you can delete, why "keep the last N" deletes the one you needed, and why retention policy is part of the rollback plan.

Q · Which stored artifacts are safe to delete, and what breaks the first time you delete the wrong one?
Promotion

Moving one artifact forward through environments by changing what is claimed about it, never by changing its bytes.

Q · What is actually changing when an artifact is "promoted", and how do you tell a real promotion from a rebuild wearing its name?

Containers in Production

8 lessons

The lifecycle from source to running process, layers and caching, what image size actually costs, and the process and signal model that decides whether deploys drop requests.

The Container Lifecycle

The full path from a build context to a process serving traffic, and back to a stopped container — with the failure that belongs to each hop.

Q · What is the complete sequence between `docker build` and a process serving requests, and which step is failing when a deploy does not work?
Layers and the Build Cache

Why one changed line rebuilds everything below it, why a deleted file is still in the image, and how instruction order decides both.

Q · Why does changing one line of source sometimes rebuild almost nothing and sometimes rebuild everything?
What Image Size Actually Costs

Size is paid on cold pulls and nowhere else — and an image with no shell is a real operational cost that nobody puts on the other side of the ledger.

Q · What does a large image actually cost, and when is making it smaller the wrong optimisation?
Multi-Stage Builds

Compile in one image, ship another — so the toolchain, the source and the build credentials never reach production.

Q · How do you build inside a container image without shipping the compiler, the source tree and everything the build needed?
Image Versus Container

An image is an immutable package; a container is a running instance of it with a throwaway writable layer — which is why nothing you change inside one survives.

Q · What is the difference between an image and a container, and why does it decide where state is allowed to live?
PID 1 and Signals

The entrypoint becomes PID 1, PID 1 does not get default signal handling, and a shell wrapper in between is why your container ignores SIGTERM.

Q · Why does my container ignore the stop signal and take the full grace period to die every single time?
Graceful Shutdown

Signal, stop accepting work, drain what is in flight, release resources, exit — inside a hard timeout you do not control.

Q · What must a container do between receiving a termination signal and exiting, so that a rollout does not drop user requests?
Debugging a Container in Production

What survives a container's death, what does not, and the order to ask questions in when there is no shell and the evidence is being deleted on every restart.

Q · The container is crash-looping and the image has no shell. What do you actually look at, and in what order?

Environments

7 lessons

Staging is not production. Drift, parity, preview and ephemeral environments, and the limits of pre-production evidence — including why more environments is not more safety.

What an Environment Is For

Each environment is an instrument that measures some production properties and is blind to others — which makes an extra one a cost to justify, not a safety improvement to assume.

Q · How many environments should we have, and what is each one actually evidence for?
Environment Drift

Environments diverge from each other continuously and silently, and a drifted environment does not stop answering questions — it starts answering them wrongly.

Q · Why does a change that passed staging fail in production when nobody changed either environment?
Parity That Is Worth Paying For

Parity means preserving the operational characteristics that matter for the change at hand — explicitly not identical scale, which is unaffordable and still insufficient.

Q · How similar does a lower environment have to be to production for its result to mean something?
Preview Environments

A running instance per change, created from the pull request and destroyed with it — excellent evidence about wiring and product behaviour, no evidence at all about scale.

Q · What does giving every pull request its own running environment actually buy, and what does it quietly cost?
Ephemeral Environments

Environments created on demand and destroyed when done, which is only possible once infrastructure, configuration, data and secrets are all codified — and which turns environment count into a decision instead of an inheritance.

Q · What has to be true before an environment can be created and destroyed on demand rather than kept running forever?
Production Data in Lower Environments

Copying real user data into a test environment moves it from your most controlled system to your least controlled one — use synthetic data, anonymised data or a controlled subset instead.

Q · We need realistic data for testing. Can we copy production into staging?
Promotion Between Environments

Promotion moves one immutable artifact forward and changes only its configuration — which is what makes the evidence from earlier environments mean anything at all.

Q · What exactly moves between environments, and what does each promotion gate actually prove?

Configuration

5 lessons

Artifact plus configuration equals a running service. What belongs in each, validating at startup rather than discovering at 3am, and treating config as a deployable with its own blast radius.

Artifact Plus Configuration

A running service is an immutable artifact combined with environment-specific configuration — and the configuration half is the one nobody versions, tests or reviews.

Q · What belongs in the artifact, what belongs in configuration, and why does that line decide so much?
Validate at Startup, Fail Clearly

Check every configuration value when the process starts and refuse to serve if anything is wrong — rather than discovering an invalid value at 3am, on the first request that happens to need it.

Q · When should a bad configuration value be detected, and what should happen when it is?
A Config Change Is a Production Change

Configuration changes reach production faster than code, apply to everything at once, are reviewed less, and frequently have no rollback story — which is why so many outages are config-only.

Q · Why do configuration changes cause so many outages when they involve no new code?
Configuration Drift

Configuration diverges between environments and between instances, and the divergence is invisible until a code path that only exists in one place runs for the first time.

Q · Why does a service behave differently in production when it is running the same artifact?
Build-Time and Runtime Configuration

When a value is fixed decides how you change it — build-time values need a new artifact and a full pipeline, runtime values change without one, and picking the wrong side quietly destroys build-once-promote-many.

Q · Should this value be baked into the artifact or read when the process runs?

Secrets

6 lessons

Credentials out of source and out of images: workload identity, secret managers, and rotation that applications actually survive.

What Counts as a Secret, and Where It Must Not Be

Credentials, API keys, private keys, certificates and tokens must not live in source control or in images — because both are copied, cached and retained far beyond the systems you control.

Q · What actually counts as a secret, and which places must it never reach?
Secret Managers and What They Actually Give You

A secret manager is a store with access control, versioning, audit and encryption at rest — and the product details differ enough between providers that a working design is not portable without re-verification.

Q · What does putting secrets in a dedicated manager actually buy, and what still has to be designed?
Workload Identity

The primitive that removes the first secret: the platform attests what a workload is, that attestation is exchanged for a short-lived credential, and no static key exists anywhere for an attacker to find.

Q · If secrets live in a manager, what credential does the workload use to authenticate to the manager?
Rotation That Applications Survive

Old, then new alongside old, then a transition window, then old revoked — and the application must tolerate the change, because one that reads a secret at boot and caches it forever breaks the moment you rotate.

Q · How do you change a credential that is in use by a running fleet without an outage?
Secrets in CI

CI holds credentials for everything and executes code that anyone can propose — which makes it the highest-value target in the delivery path and the one most often protected by conventions rather than controls.

Q · How does a build system get the credentials it needs without becoming the easiest route to production?
When Secrets Fail

The characteristic secret failure is a crash loop with an error that does not mention secrets at all — which is why secret resolution belongs in startup validation, where it can fail loudly and name what is missing.

Q · A service is crash-looping and the error says "connection refused". How do you know it is a secret problem?

Infrastructure as Code

8 lessons

Describing infrastructure so it can be reviewed, reproduced and changed safely — plans, state, drift, and the destructive changes a rename can hide.

Infrastructure as Code

Describing infrastructure in reviewed, versioned files so it can be reproduced and changed with the same evidence as application code.

Q · The console already works. Why write the infrastructure down?
Declarative vs Imperative Infrastructure

Describing the end state and letting a tool derive the steps, versus writing the steps yourself — and the cases where writing the steps is still correct.

Q · Is describing the desired end state actually better than scripting the steps, or is that just fashion?
The Plan: Desired vs Current

A plan is a diff between what the code says and what exists, classified into create, update, replace and delete — and every destructive line in it needs a human.

Q · What exactly is a plan telling me, and which parts of it must a person read before it runs?
State

The mapping between configuration addresses and real resources — why it must exist, why it goes stale, why it holds secrets, and what concurrent applies do to it.

Q · Why does the tool need a state file at all when it could just ask the cloud what exists?
Drift

Reality diverging from what the code says — how it happens, which of it is legitimate, and why the next apply is the dangerous moment.

Q · The code says one thing and production does another. Which one is wrong?
Immutable Infrastructure

Replacing servers instead of modifying them, so that what is running is a known function of an artifact rather than the sum of its history.

Q · Why replace a working machine to change one package, instead of just changing the package?
Pets and Cattle, Read Carefully

A useful metaphor about replaceability that becomes dangerous when treated as a rule — because some infrastructure genuinely is irreplaceable, and a database treated as cattle is a data loss event.

Q · Should every server be disposable, and what happens to the ones that are not?
Destructive Changes: What a Rename Really Does

Renaming a resource in configuration is read as delete-then-create, because the tool identifies resources by their address — and on a database that is the end of the data.

Q · I renamed a resource block. Why does the plan say it will be destroyed?

Deployment Strategies

8 lessons

Recreate, rolling, blue/green, canary, shadow and flags — each with how it works, what it risks, what it costs, and how you get back.

Deployment Strategies

Six ways to replace running code, compared on how they work, what they risk, what they cost, how you get back, and what each is actually for.

Q · Every strategy replaces running code with new code — so what actually differs between them, and how do I choose one for this change?
Recreate: Stop Everything, Then Start the New Thing

The simplest strategy, an outage by design — and the only honest answer when two versions of your system genuinely cannot coexist.

Q · When is deliberately taking the service down the correct way to deploy, and what does that window actually consist of?
Rolling: Two Versions, One Database

Replacing instances in batches keeps the service up — at the price of a window where old and new code run simultaneously against exactly the same state.

Q · While a rolling deploy is in progress, two versions of my code are live at once — what does that actually oblige me to guarantee?
Blue/Green: Paying for the Fastest Rollback There Is

Two complete environments and a router between them: reversal in seconds, exposure of one hundred percent, and a database that is still shared.

Q · What exactly am I buying with a second environment, and what does it fail to protect me from?
Canary: One Percent, Then Five, Then Watch

Exposing a small share of real traffic to the new version and widening only while health holds — the strategy that bounds width rather than duration.

Q · How do I let real production traffic find the bug without letting it find every user?
Shadow Traffic: Real Requests, Discarded Answers

Duplicating production traffic to a candidate that serves nobody — strong evidence about crashes, load and resource use, and no evidence at all about writes.

Q · How do I run the new version against real production traffic before any user depends on its answers — and what does that actually prove?
Feature Flags: Deploy Is Not Release

Shipping code that is switched off, then turning it on for whom you choose — and the four ways a flag system quietly becomes the least reviewed part of production.

Q · How do I get code into production without releasing its behaviour, and what does that decoupling cost over time?
Progressive Delivery: Exposure as a Dial

Combining a rollout strategy, an automated comparison and a release control into one idea — exposure that increases only while evidence supports it.

Q · What does it look like when the strategies in this module stop being alternatives and become one system?

Rollout Safety

8 lessons

Blast radius as the organising idea: version coexistence, canary analysis against a baseline, rollback that is actually safe, and when rolling forward is the only option.

Version Coexistence: N and N+1, in Both Directions

Any deploy without downtime runs two versions of your code against one set of state — and rollback runs them in the other order, which is the direction nobody tests.

Q · For how long, and under what obligations, do two versions of my code have to work at the same time?
Canary Analysis: Compared Against What?

Deciding whether a candidate is healthy by comparing it against a concurrent baseline on errors, latency, saturation and business outcome — and never on CPU alone.

Q · The canary is running. What do I compare, what do I compare it to, and what result means "continue"?
Rollback: Only Useful If It Is Actually Safe

Going back to the previous version is the fastest way to end user impact — until the change made the previous version invalid, at which point what you are doing is not a rollback.

Q · Can I actually go back, how long does it take, and what does going back fail to undo?
Roll Forward: When Going Back Is the Harder Option

Irreversible migrations, side effects already emitted and dependencies that moved on — the situations where the fix has to go forward, and how to ship one safely under pressure.

Q · The change is bad and reverting it would be worse. How do I ship a fix under time pressure without making a second incident?
Blast Radius: If This Is Wrong, How Much Does It Affect?

The organising question of the whole domain — one test, one user, one tenant, one percent, one zone, one region, everyone — and why the honest answer is usually larger than the intended one.

Q · If this change is wrong, how much can it affect — and what, specifically, would stop it from affecting more?
Reducing Blast Radius

The techniques that move a change down the ladder — exposure control, partitioning, staging, privilege limits and reversibility — and the ones that appear to contain and do not.

Q · I know how far this change could reach. What actually makes that number smaller?
Change Size: Why Small Changes Are Safer, and When They Are Not

Small changes make cause and effect legible, review effective and rollback cheap — but diff size and blast radius are different axes, and confusing them is how one-line outages happen.

Q · Why does shipping smaller changes more often make a system safer, and what does "small" fail to guarantee?
A Successful Deploy Is Not Evidence of a Healthy System

The pipeline reports success when bytes moved and a process answered a health check — which is several layers short of the system doing what it exists to do.

Q · The deploy succeeded. What have I actually learned, and what would I need to check to know the system is healthy?

Database Migrations

6 lessons

The change most likely to cause an outage and least likely to be rehearsed: expand/migrate/contract, backfills, locks, and why a migration and a deploy are one coupled event.

Why Migrations Are the Dangerous Change

Five distinct risks hide under the word "migration", and every one of them scales with data you do not have in staging.

Q · Why is a schema change more dangerous than a code change of the same size, and what exactly is the danger?
Expand, Migrate, Contract

The pattern that makes schema change safe: add the new shape, move to it, and only remove the old shape in a later deploy.

Q · How do I change a schema when two versions of my code are running against it at the same time?
Zero-Downtime Migrations

The techniques that let a schema change land while the service keeps serving — and the engine-specific rules that decide which ones are available to you.

Q · How do I apply a schema change without taking a maintenance window?
A Migration and a Deploy Are One Event

Schema and code version separately but must be compatible continuously, which makes every schema change a two-artifact rollout with a compatibility window.

Q · The migration is in the same pull request as the code. Why is that not the same as them changing together?
Backfills

Moving or computing data across every existing row is a long-running production write workload, and it needs the properties of a job rather than of a migration.

Q · How do I populate a new column across a hundred million existing rows without hurting the service?
Destructive Migrations

Dropping, renaming, truncating and narrowing are the only changes with no rollback — and during a rolling deploy they break the instances that have not been replaced yet.

Q · Why is `DROP COLUMN` dangerous when the column is unused, and what does a safe destructive change look like?

Kubernetes

8 lessons

What orchestration problems exist, which abstractions answer them, and how to decide whether you need any of it — taught as one implementation, not as what production means.

Do You Need Kubernetes?

Kubernetes is a distributed workload orchestration platform. The first question is not how to use it but whether the orchestration problem it solves is one you actually have.

Q · Before learning any of it — is orchestration complexity justified for this system?
The Problems Kubernetes Answers

Five operational problems appear the moment you have many containers on many machines. Every Kubernetes object is an answer to one of them, and is only worth learning as such.

Q · What problems appear once you have many containers on many machines, and which object answers each?
Cluster, Control Plane, Nodes, Pods

One model to debug against: a cluster is a control plane holding desired state and nodes running the workloads, with controllers continuously closing the gap between them.

Q · What are the moving parts, and which one do I look at when something is wrong?
Pods: The Unit That Gets Scheduled

A pod is one or more containers that share a network namespace, a lifecycle and a set of volumes — and it is the smallest thing the scheduler can place.

Q · Why is the unit of scheduling a pod rather than a container, and what does that grouping actually share?
Deployments: Declaring What Should Be Running

A Deployment is desired state — this many replicas of this image, with this rollout policy — that a controller works toward continuously, including after failures nobody scripted.

Q · How do I say "this version, this many, replaced safely" and have it stay true?
ReplicaSets: The Layer You Should Not Manage

A ReplicaSet keeps N pods matching a template alive. It exists so that a Deployment can roll out by scaling two of them in opposite directions — and that is the only reason you should ever look at one.

Q · What is this extra object between my Deployment and my pods, and when does it matter?
Services: A Stable Address Over Moving Pods

Pod IPs change every time a pod is replaced. A Service is a name and address that keeps meaning "the currently ready pods for this workload", updated continuously as that set changes.

Q · How does a caller reach a workload whose instances are replaced on every deploy, restart and node failure?
Getting Traffic Into the Cluster

Internal Services are unreachable from outside. Something at the edge must terminate TLS, match hostnames and paths, and route to the right Service — and which object expresses that is currently in transition.

Q · How does a request from the internet reach the right workload, and who owns the rules that decide?

Kubernetes Runtime

9 lessons

Reconciliation as the core mental model, plus the runtime behaviours that produce most real incidents: scheduling, requests and limits, OOM kills, throttling and probes.

Reconciliation: The Loop Under Everything

You write desired state; a controller observes actual state; the difference is the instruction. That loop never stops running, which is the whole idea.

Q · What is actually happening between the moment you apply a manifest and the moment the cluster matches it — and why does it keep happening afterwards?
Apply Is Not Running

Accepted, scheduled, pulled, started, ready and receiving traffic are six different moments, separated in time — so desired state is never instant reality.

Q · Why does `kubectl apply` return success while nothing new is serving yet, and what is happening in the gap?
The Scheduler, and Why a Pod Is Pending

Placement is a filter-then-score decision made against declared requests. `Pending` is not a failure state — it is the scheduler telling you no node satisfied the constraints.

Q · What decides which node a pod runs on, and what is the cluster telling me when a pod stays `Pending`?
Requests and Limits

A request is a scheduling reservation; a limit is an enforced ceiling. CPU and memory behave completely differently when you reach the ceiling, and that difference is the lesson.

Q · What do requests and limits actually control, and why does exceeding a CPU limit feel nothing like exceeding a memory limit?
How Resource Settings Go Wrong

Four failure shapes come from two numbers being wrong in two directions each — and each shape has a distinct symptom that tells you which one you are looking at.

Q · My workload is unhealthy and the code did not change. Which resource number is wrong, and in which direction?
OOMKilled: Over the Memory Limit

Memory cannot be taken back, so the only enforcement available is termination. Over the limit, the kernel kills the process — it does not slow it down or warn it.

Q · What exactly happens when a container reaches its memory limit, and why does it die rather than degrade?
CPU Throttling: The Latency With No Error

Over a CPU limit the container is descheduled until the next period rather than killed. Nothing errors, nothing restarts, and the tail latency gets worse for reasons nothing in the application explains.

Q · Why is my service slow when its CPU graph looks unremarkable and nothing in the logs is wrong?
Probes: Readiness, Liveness and Startup

Readiness gates traffic, liveness restarts the container, startup covers a slow boot. Confusing the first two turns a dependency outage into a cluster-wide restart storm.

Q · What is each probe actually allowed to decide, and what must never be inside a liveness check?
Reading a Broken Workload

One decision tree covers most Kubernetes failures: is it running, is it ready, is it routed — and each "no" points at a different, small set of causes.

Q · The service is not serving. Where do I look first, and what does each state actually mean?

Kubernetes State

5 lessons

Config, volumes and stateful workloads — why a database is not a stateless API with a disk attached, and where the abstraction stops helping.

ConfigMaps and Secrets

Two objects that inject configuration into pods, one of which is named after a security property it does not, on its own, provide.

Q · How does configuration reach a container, and what does calling something a Secret actually buy you?
Volumes: Storage With a Lifecycle

A container filesystem dies with the container. A volume is a way of saying which data outlives what — the pod, the node, or the cluster — and each answer has different failure modes.

Q · What happens to data a container writes, and how do I choose how long it should survive?
Why Stateful Workloads Are Harder

A stateless replica is interchangeable and can be replaced at any moment. A database replica has an identity, a copy of the data, a position in a replication stream and an opinion about who is the leader.

Q · Why can I replace an API pod at will and not a database pod?
StatefulSets: Identity, Storage and Order

The workload controller that gives each replica a stable name, its own volume and a defined position in startup and rollout — which makes running stateful systems possible, not advisable by default.

Q · What does Kubernetes offer a workload that needs stable identity, and what does it still leave to you?
Kubernetes Anti-Patterns

The recurring mistakes that produce most cluster incidents — each one reasonable at the moment it is made, and each one with a specific failure it eventually causes.

Q · Which cluster practices reliably produce incidents, and what does each one actually break?

Production Networking

8 lessons

The operational half of the network: service discovery, DNS behaviour under change, certificate lifecycles, load balancer health and draining connections without dropping work.

Service Discovery in Operation

Instances appear and disappear continuously, so callers cannot hold addresses. Discovery is a registry plus a health signal plus a propagation delay — and the delay is where the incidents are.

Q · How does a caller find a healthy instance of a service whose instances are being created and destroyed all day?
DNS in Production

A DNS change is not an action, it is an expiry schedule. TTL decides how long the old answer keeps being used, and several caches between you and the user do not necessarily obey it.

Q · I changed a DNS record. Who is still using the old answer, and for how long?
Certificates as an Operational Object

Issue, deploy, renew, rotate, revoke. A certificate is the only production component with a hard expiry date, which is why expiry remains one of the most common outages in the industry.

Q · What is the full lifecycle of a certificate in production, and why does expiry keep taking systems down?
Renewal: Automating the Thing That Expires

Certificate renewal is the textbook case for automation — predictable, recurring, error-prone by hand. It is also the textbook case for monitoring the automation, because silent renewal failure is how certificates expire anyway.

Q · If renewal is automated, why do certificates still expire — and what would have caught it?
Operating a Load Balancer

The algorithm matters less than the health check, the connection lifetime and the capacity that remains when a backend leaves. Most balancing incidents are about membership, not distribution.

Q · My traffic is not evenly distributed and removing a backend caused errors. What is the load balancer actually doing?
Draining: Stopping Without Dropping

Stop new connections, let active work finish, then exit. The whole difficulty is ordering — the instance must leave the routing layer before it stops serving, and those two events are not naturally sequenced.

Q · How does an instance stop serving without dropping the requests that were already in flight?
Operating the Edge

The ingress is where everyone's traffic meets one shared configuration. It is the component with the widest blast radius per line of config, and the one most often changed by people who own only one route.

Q · What breaks when the edge is a shared component that every team can change?
How Networks Fail in Production

A catalogue: DNS, certificates, blocked ports, security group mistakes, connection exhaustion, NAT port exhaustion, packet loss and latency spikes — each with a symptom that identifies it.

Q · Something in the network is wrong. What are the candidates, and which symptom belongs to which?

Release Engineering

8 lessons

Deployment is not release. Versioning, promotion, release manifests, change management and the audit trail that lets you answer "what changed" during an incident.

Deployment Is Not Release

Deployment means code reaches an environment. Release means functionality becomes available to users. Conflating them makes both riskier than either needs to be.

Q · What is the difference between deploying a change and releasing it, and why does it matter operationally?
Continuous Delivery

The practice of keeping software in a state where any commit on the main line could be released — whether or not you choose to release it.

Q · What does "always in a releasable state" actually require, and how would we know we have it?
Continuous Deployment

Every change that passes verification reaches production automatically, with no human release step — which is a different and stronger claim than continuous delivery.

Q · What changes when the pipeline deploys to production with no human in the path, and what has to be true first?
The Deployment Pipeline

The path from commit to production as a designed system: ordered stages, each with an input, a verdict, evidence, and a defined behaviour on failure.

Q · What is the pipeline actually for, beyond running the build and the tests?
Release Engineering as a Discipline

Someone has to own how software becomes a release: versioning, what a release contains, how it is assembled, who decides, and what record it leaves.

Q · Who owns the question of how our software becomes a release, and what does owning it involve?
The Release Manifest

One record naming the version, commit, artifact digest, config version, migration version and flag state — so "what is production right now" is a lookup rather than an investigation.

Q · What single record would let you answer "what exactly is running in production" without asking anyone?
Change Management

Deciding which changes need what scrutiny, so that ordinary changes stay cheap and genuinely risky ones get attention — without a process people route around.

Q · Which changes should require approval, from whom, and how do we avoid a process that adds delay without adding safety?
The Audit Trail

Who changed what, when, why — and what the previous state was. The last field is the one that turns a log into something you can act on.

Q · During an incident, how do you find out what changed and what it was before?

Production Access

5 lessons

Who can touch production, with what privilege, for how long — and what to do about the emergency where someone genuinely must.

Alerting & Operational Signals

6 lessons

Using observability rather than building it: alerts that demand action, symptom-based paging, dashboards an operator can act on, and the cost of noise.

Incident Response

8 lessons

Detect, triage, mitigate, communicate, recover. Stopping user impact before understanding cause, and the roles that keep a severe incident coordinated.

What Happens Between the Page and the Postmortem

Alert, acknowledge, triage, mitigate, recover, verify, learn — a defined sequence, so nobody has to invent one at 3am.

Q · Something is broken in production and you have just been told. What happens now, in what order?
Severity: What It Should Reflect

A shared shorthand for how much of the organisation to wake — and a local convention, not a fact about software.

Q · What makes one incident more severe than another, and who decides?
Stop the Harm Before You Understand It

The mandatory distinction: mitigation ends user impact, root cause analysis explains it, and they happen in that order.

Q · Users are failing right now and you do not know why. Do you debug, or do you act?
Roles During an Incident

Separating coordination from investigation so that neither starves the other — valuable at high severity, overhead at low.

Q · Who is in charge during an incident, and when is having someone in charge worth the overhead?
Reconstructing What Actually Happened

An evidence-based sequence of changes, signals and actions — built from records, because memory reorders events with total confidence.

Q · After the incident, how do you establish what happened and in what order, well enough to learn from it?
Telling People What Is Happening

Different audiences need different things at different cadences — and none of them should have to interrupt the person fixing it.

Q · While an incident is in progress, who needs to be told what, how often, and by whom?
On-Call Is Production Ownership

Someone has to be reachable when production breaks. Done well it is the shortest feedback loop a team has; done badly it is the fastest way to lose people.

Q · Why does someone need to be reachable at 3am, and what is that person actually expected to do?
Rotations People Can Sustain

Load, frequency and recovery are properties of the system, and a rotation that cannot be sustained is a defect in the system rather than a shortcoming of a person.

Q · What makes an on-call rotation something a team can carry for years rather than months?

Postmortems

5 lessons

Blameless but accountable learning: contributing factors over single root causes, and action items specific enough to change the system rather than the people.

Readiness & Ownership

5 lessons

What a service owes before it carries traffic — an owner, a runbook that encodes understanding, dashboards, alerts, a rollback plan and a tested recovery path.

Capacity & Cost

11 lessons

What saturates first, how much headroom failure and deploys require, and cost as a first-class trade-off against reliability and performance.

Capacity Management

Knowing how much load a system can carry, which resource runs out first, and what the moment of saturation looks like from outside.

Q · How much traffic can this system safely carry, and what gives way first when it cannot?
Building a Capacity Model

Turning request rate, CPU, memory, connections, queue throughput, network and storage into one defensible statement of safe capacity.

Q · How do you turn a pile of resource limits into a single number you can plan against?
Headroom

Why critical systems are never run at their limit, and the four separate claims on the reserve you hold.

Q · Why not run production at full utilisation, given that unused capacity is money spent on nothing?
Load Shedding

Deciding in advance what to drop when demand exceeds capacity, so the system fails in the shape you chose.

Q · When there is more work arriving than the system can serve, what should it stop doing?
Capacity During Failover

If two regions each serve half the traffic, either one must be able to serve all of it — and most teams find that out during the failover.

Q · When a failure domain goes away, does the capacity that remains actually fit the traffic that remains?
Cost Awareness

Treating spend as an engineering property with a feedback loop, rather than as a finance report that arrives after the decisions are made.

Q · Why do the people who determine infrastructure cost usually not see it?
Cost Drivers

What infrastructure spend is actually made of, expressed as what each component scales with rather than what it costs.

Q · When the bill grows, what is growing — and what is it growing with?
Cost Per Request

Infrastructure cost divided by successful requests — the unit that lets you compare architectures instead of comparing bills.

Q · How do you tell whether a system got cheaper, when the business got bigger at the same time?
Overprovisioning

The difference between reserve you decided to hold and capacity you bought because nobody knew the right size.

Q · When is unused capacity a deliberate reserve, and when is it just a number nobody has revisited?
Idle Capacity

Resources that are running, billed, and doing nothing — and how to tell them from the reserve that is doing nothing on purpose.

Q · Which of the things you are paying for have no user, no traffic and no claim on them?
FinOps

The operating practice around cloud spend — allocation, visibility, budgeting and optimisation — kept at the level engineers actually act on.

Q · What organisational practice keeps cloud spend attributable, visible and deliberate over time?

Autoscaling

6 lessons

Scaling on the signal that reflects the actual constraint, and the lag, cold starts, oscillation and downstream bottlenecks that make autoscaling a capacity tool rather than a capacity answer.

Backup & Disaster Recovery

7 lessons

Backups you have restored, recovery objectives connected to real runbooks, region failover as an operational procedure, and the capacity question failover always raises.

Backup Operations

Schedule, retention, encryption, access and verification — the six properties that decide whether a backup is protection or a green checkmark.

Q · What has to be true of a backup before it counts as protection rather than a scheduled job that exits zero?
Restore Drills

The only evidence a backup works: restore it into a real target and verify the application against it. Backup success is not a signal.

Q · Our backup job succeeds every day. Are we safe?
Disaster Recovery as an Operation

A disaster is a class of event, not a size of one. DR is the standing capability to reach a known-good state, chosen per failure class.

Q · What actually counts as a disaster, and what capability answers each kind?
RTO and RPO

Two business objectives that only mean something when they are traced to an architecture, a runbook and a measured drill.

Q · How do recovery objectives stop being numbers in a document and start constraining the system?
Region Failover

Five questions decide whether a failover works: is the data there, can traffic move, is there capacity, are config and secrets present, are dependencies reachable.

Q · What has to be true in the target region before shifting traffic to it can possibly work?
Operating in More Than One Region

Two regions is not two copies of one system. Deploys, migrations, config, secrets and data all become distributed problems you now operate every day.

Q · What does running in a second region cost operationally, every day, in exchange for surviving the loss of one?
Partial and Logical Data Recovery

Most real data loss is partial and logical. Restoring the whole database over a live system is usually the wrong tool and often makes it worse.

Q · One table is wrong and the rest of the database is fine — now what?

Supply Chain Security

6 lessons

Everything between a dependency and a running artifact is attack surface: pinning, scanning with context, signing, provenance and SBOMs.

The Delivery Chain as Attack Surface

Every hop between a line of source and a running process is something that can be substituted, and each hop needs a control and a way to verify it held.

Q · What exactly is between my source code and the process serving traffic, and which of those things am I trusting without checking?
Scanning, and Why a Finding Is Not a Risk

A scanner tells you which known-vulnerable components are present. Whether any of them is exploitable in your system is a separate question, and conflating the two destroys the practice.

Q · The scan reports 400 findings. Which of them actually matter, and what happens if we treat them all as urgent?
Signing and Verifying Artifacts

A trusted builder signs the artifact it produced, and the deployment refuses anything whose signature it cannot verify — the verification is the control, not the signature.

Q · How does a deployment know that the artifact it is about to run came from our pipeline and not from somewhere else?
Software Bill of Materials

A machine-readable inventory of what is actually inside an artifact, generated at build time — the thing that turns "are we affected" from an investigation into a query.

Q · A critical vulnerability is announced in a library. Which of our artifacts contain it, at which version, and which of those are running right now?
Securing the Pipeline Itself

CI is the most privileged system in the delivery path and the least reviewed — it can read every secret, write to the registry, and deploy to production.

Q · What can our CI system reach, and what would it take for something that runs in it to reach further?
The Builder Is Inside the Trust Boundary

Every downstream control attests to whatever the builder produced — so if the build environment can be influenced, signatures, SBOMs and provenance all faithfully describe a compromised artifact.

Q · Why does it matter where the artifact was built, if we sign it and verify the signature?

Platform Engineering

8 lessons

Internal products that make safe delivery the easy path: golden paths, self-service with guardrails rather than gates, policy as code, and developer experience as an operational metric.

Platform Engineering

Building reusable internal products that make safe delivery the easy path for the teams that ship on them.

Q · When does building an internal platform make delivery safer, and when does it just add a team between developers and production?
The Internal Developer Platform

Turning "create a service" into one standardised workflow that produces a repository, a pipeline, a deployment, observability, secrets, infrastructure and documentation.

Q · What does "create a service" have to actually produce before a team can call it self-service?
Golden Paths

A recommended, supported route to production that removes toil without removing engineering judgement — and stays a path rather than becoming a cage.

Q · How do you make one supported way of building a service without forbidding every other way?
Developer Experience as an Operational Metric

Time to first deploy, feedback time, build time, local setup, deployment friction and incident discoverability — measured, because each one changes what engineers do.

Q · Which measurable properties of the delivery path actually change engineering behaviour, and how do you track them without turning them into targets?
Self-Service Infrastructure

Letting teams provision what they need without a ticket, by constraining what can be asked for rather than by reviewing every request.

Q · How does a team get a database, a queue or a bucket without waiting for someone, and without being able to create anything at all?
Guardrails, Not Gates

A gate is a human approving everything; a guardrail is automation that makes the invalid action impossible. A gate scales as a queue, a guardrail scales as code.

Q · Something dangerous is possible. Do you require someone to approve it, or make it impossible to do by accident?
Policy as Code

Encoding organisational rules — no public buckets, required tags, resource limits, deployment constraints — as machine-evaluated checks that run on every change.

Q · How does a rule that exists in a document become a rule that is actually true of production?
Service Templates

The production-readiness checklist expressed as a template, so a new service starts with health checks, signals, shutdown, config validation, alerts, a runbook and an owner already in place.

Q · What should a brand-new service already have on the day it is created, before anyone asks for it?

Automation & Toil

5 lessons

Reducing manual, repetitive, automatable work — and the trap of automating something you do not understand, which scales mistakes faster than it scales work.

How to Automate Something

Repeated manual task, then understand, then standardise, then automate, then monitor the automation — in that order, because skipping a step moves the failure rather than removing it.

Q · A task keeps being done by hand. What is the correct sequence for turning it into automation that is safer than the hand version?
The Automation Trap

Do not automate what you do not understand. Bad automation does not make mistakes less likely — it makes them faster, wider and more confident.

Q · What exactly goes wrong when you automate a procedure you have not understood?
Toil

Manual, repetitive, automatable operational work that scales with the service and leaves nothing behind — and the "scales with the service" part is what makes it toil rather than just work.

Q · Which operational work is genuinely worth engineering away, and which work only feels like it should be?
Cron Jobs in Production

Six failure modes that scheduled work has and request handling does not: duplicate execution, missed execution, overlap, timezones, long-running jobs, and no observability at all.

Q · A job runs on a schedule. What are all the ways that goes wrong, given that nobody is watching it?
Job Scheduler Reliability

Five questions that decide whether scheduled work survives real infrastructure: can it run twice, can it overlap, what if the machine dies, can it retry, is it idempotent.

Q · Under what guarantees is my scheduled work actually running, and does the job hold up under the ones I actually have?

Operating Dependencies

8 lessons

The day-to-day of running databases, queues, caches and scheduled jobs: connection budgets, dead letters, hot keys, and why production time is always UTC.

Operating a Production Database

The standing duties around the one component you cannot restart your way out of: connections, locks, bloat, replication, and change discipline.

Q · What does owning a production database actually require, beyond it being up?
The Connection Budget

A database accepts a finite number of connections. Every instance, worker, job and console session spends from the same pool — so the pool sizes have to add up.

Q · If the database allows N connections and we run M instances, what may each instance's pool be set to?
Operating Queues and Scheduled Work

Depth, oldest message age, consumer throughput, failure rate and dead letters — plus the clock-driven cousin, where duplicate and missed runs live.

Q · What do you watch on a queue, and what does each signal mean when it moves?
Dead Letter Queues Are an Operation

A DLQ needs an alert, an inspection path, a replay strategy and an owner. Without those four it is a place failures go to be forgotten.

Q · What happens to a message after it fails for the last time — and who finds out?
Operating a Cache

Hit rate, memory, evictions, hot keys and latency — plus the planning question that decides your real architecture: can the system survive losing the cache?

Q · If the cache disappeared right now, would the system stay up?
Production Time Is UTC

Machine timelines, logs, storage and schedules in UTC; local time only at the edges where a human reads it. The conversion belongs in one place.

Q · Why does every experienced operator insist that production runs on UTC?
Timezone and DST Failures

The hour that happens twice, the hour that never happens, the billing cutoff in the wrong zone, and the incident timeline nobody can reconcile.

Q · What actually goes wrong twice a year, and why does it survive every code review?
Clock Synchronisation

Machines need reasonably synchronised clocks for logs, certificates, tokens and scheduling — reasonably, because perfect synchronisation is not available.

Q · How closely do production clocks need to agree, and what breaks when they drift?

Production Debugging

6 lessons

Working from symptom to cause under time pressure, starting from the highest-signal question there is: what changed?

Production Debugging

A method for narrowing from symptom to cause under time pressure, using six questions in a fixed order rather than intuition.

Q · Production is broken, you have partial information and people are waiting — what do you actually do first?
Deployment-Centric Debugging

The highest-signal habit in the domain: when an incident begins, ask what recently changed before asking what is wrong.

Q · Why is "what did we ship?" a better first question than "what is broken?"
The Debugging Timeline

Deployments, config changes, alerts, error rate and latency drawn on one shared axis, so causal order is read rather than argued about.

Q · How do you see whether the change came before the symptom, instead of asking three people what they remember?
Change Correlation

Four categories of change — deploy, config, infrastructure, dependency — plus traffic, and the discipline of checking all of them rather than only code.

Q · When you ask "what changed?", what is the complete list of things that could have?
Production Anti-Patterns

The practices that reliably produce incidents — each with why it is tempting, because a list that only says "do not" teaches nothing.

Q · Which habits produce most production incidents, and why do sensible teams adopt them anyway?
CI/CD Anti-Patterns

Seven pipeline habits that quietly convert a feedback system into a bottleneck you cannot trust, and the pressure that produces each.

Q · What turns a delivery pipeline from a safety mechanism into a ritual people route around?

Operating Agent Systems

5 lessons

Prompts, models and tool definitions are deployable production inputs. Versioning, evaluation before rollout, canaries judged on quality and cost, and a kill switch that does not need a redeploy.