Skip to content

reference · 20 concepts

What each concept is for

Each entry states what a concept is, then the problem it solves — because a definition without a motivation is not something you can recognise the moment you need it. Underneath that, how far the projects on this site actually get with it.

Those claims come from reading the repositories rather than their READMEs, which is why they are uneven. Ten concepts are built across the DevOps journey. Two of the other ten have working code. The rest are written down in design documents and nowhere else, and are labelled as such rather than counted as experience.

in the journey
10
built elsewhere
2
study gaps
8

vocabulary

What the badges mean

  • built working code in the repository
  • designed worked out in an architecture document, never built
  • proposed only recommended in a design document, never built
  • considered, rejected considered and deliberately went the other way
  • not used nothing in any project here

These are different claims, not grades. Writing an architecture decision that was never built is real work and is labelled designed. Deciding against a technique on purpose is labelled considered, rejected, because that is a decision rather than a gap.

10 concepts

Platform & delivery

What the DevOps arc builds, one concept at a time.

Where each of these appears is read directly from the journey data, so this page and the journey cannot disagree about it.

Containers & Docker

A container packages an application with the filesystem and libraries it needs to run, so the same image behaves identically on a laptop, a CI runner and a server.

what it solves

The "works on my machine" gap, and slow environments. Building an image once and shipping that artefact means provisioning a host stops being a prerequisite for deploying.

On this site: From stage 5 onward the arc stops using Docker to deploy. It becomes the cluster driver, and the Dockerfiles move to a sibling application repository.

Kubernetes & Orchestration

A control plane that holds a declared description of your workloads and continuously works to make reality match it — rescheduling failed pods, replacing drifted ones, scaling replicas.

what it solves

Managing a fleet by hand. You stop asking "is the server up?" and start declaring "there should be three of these", which is a question the control plane answers continuously.

On this site: First appears at stage 5. Stage 7 designs an EKS/AKS platform for it, in documentation only — there are no cluster manifests in that repository.

in the journey · 2 of 7 stages

new marks where the journey first puts the concept to work.

Service Discovery

A naming layer that maps a stable logical name to whatever addresses currently back it, so callers never hold an IP address that can change.

what it solves

Hardcoded addresses and the ordering problem they create. In Kubernetes a Service plus cluster DNS gives a name that survives pod replacement, restarts and scaling.

On this site: Introduced only by Kubernetes, at stage 5. The four VM stages before it discover nothing — every address in a Vagrantfile is fixed at provision time.

in the journey · 2 of 7 stages

new marks where the journey first puts the concept to work.

Load Balancing

Distributing incoming requests across several interchangeable backends, so no single server is a bottleneck and any one of them can disappear without taking the service down.

what it solves

A single point of failure and a single scaling ceiling. It also decouples the address clients know from the set of servers actually running.

On this site: Present in all seven stages, but never the same twice: a hand-written nginx upstream, then an inventory-templated one, then metric-driven weights, then kube-proxy, then an Ingress class.

Health Checks

An active or passive signal about whether a dependency is actually usable — HTTP probes, cluster health endpoints, TCP checks — that other systems act on.

what it solves

Routing traffic to something that cannot serve it. Without a health signal, a load balancer keeps sending requests to a process that is alive but broken, which is worse than being down because it looks fine.

On this site: The arc shipped no automated health check for its first three stages. Stage 4 is the first real one, and even at stage 5 only the backend has probes — the frontend has none.

in the journey · 4 of 7 stages

new marks where the journey first puts the concept to work.

Observability

Collecting metrics, logs and traces from running systems so their internal state can be inferred from their output — the four golden signals being latency, traffic, errors and saturation.

what it solves

Debugging production by SSHing into it. It converts "the site feels slow" into a query you can run, and it is what makes the load-balancer stage and the capacity planning stage possible at all.

On this site: Stage 3 consumes Prometheus rather than deploying it, and stage 7 ships a monitoring stack with no Alertmanager — the other two monitoring stages both have one.

CI/CD Pipelines

An automated, repeatable path from a commit to a running deployment, where each stage — build, test, scan, publish, deploy — can fail the run before it reaches the last one.

what it solves

Hand-deployed releases and "it worked when I ran it". Scanners sitting in the pipeline also make security a build gate rather than a periodic audit.

On this site: Stage 7 designs a GitLab and ArgoCD pipeline with zero implementation: no .gitlab-ci.yml and no Jenkinsfile exist in that repository.

in the journey · 4 of 7 stages

new marks where the journey first puts the concept to work.

Infrastructure as Code

Describing servers, networks and configuration in version-controlled files that a tool applies, rather than as a sequence of commands someone ran.

what it solves

Undocumented drift and the "works on this box" server. It makes infrastructure reviewable and diffable, and it makes rebuilding a whole environment a single command.

On this site: Stage 7 has no Terraform, CloudFormation or Ansible at all. The word appears only as a ManagedBy: Terraform tagging convention in a design document.

in the journey · 5 of 7 stages

new marks where the journey first puts the concept to work.

Secrets Management

Keeping credentials out of source code and out of the process environment, in a store that can issue, rotate and audit them — typically one secret per environment rather than one per person.

what it solves

Credentials committed to git, where they persist in history even after a later commit deletes them, and are shared freely because rotating them is painful.

On this site: Stage 5 uses Kubernetes Secrets, which are base64-encoded rather than encrypted at rest — acknowledged in that project's own notes, and the specific gap stage 6 closes.

in the journey · 4 of 7 stages

new marks where the journey first puts the concept to work.

Disaster Recovery

Having a rehearsed way to restore service after losing a machine, a disk or a region, with the acceptable downtime and data loss agreed in advance as RTO and RPO.

what it solves

Discovering during an incident that there was no backup, or that the backup had never been restored. Recovery is a capability you test, not a file you have.

On this site: Stage 1 provisions a backup server and never uses it. Stage 6's recovery is control-plane only — a deleted ArgoCD Application is recreated — with no data backup anywhere in the arc.

in the journey · 2 of 7 stages

new marks where the journey first puts the concept to work.

7 concepts

Data & scale

Storing, moving and splitting data once one database is no longer enough.

Cache (Redis)

built

A fast in-memory key-value store kept in front of a slower source of truth, holding recent results so they do not have to be recomputed.

what it solves

Repeated expensive work. A cache-aside pattern — read cache, miss to the database, write back with a TTL — turns a per-request query into a per-TTL one, and the TTL is where you choose how stale you can tolerate.

On this site: Used in one project of twelve. Two of the three database-backed apps have no cache at all, and match-me keeps presence state in-process behind a mutex instead.

where it appears

  • fullstack-ecommerce-platform Cache-aside over a geocoding API with a 24-hour sliding TTL, plus Redis-backed guest carts. Product lookups are explicitly not cached.

Object storage (S3)

designed

Durable key-addressed storage reached over HTTP, with no filesystem or block device in the way, so an application can stream a file without knowing which disk holds it.

what it solves

Serving large files off application servers, which ties capacity to requests. Buckets are cheap, elastic, and survive the machine that uploaded them.

On this site: Not implemented anywhere. Every upload in every project — product images, profile pictures, avatars — lands on a local disk or inside the source tree.

where it appears

Queues & workers

built

A broker holding work between the request that created it and a separate process that performs it, so slow or failing work does not block the user who triggered it.

what it solves

Requests that take as long as the slowest downstream call, and retries that lose the original request context. Decoupling also turns a traffic spike into a backlog rather than an outage.

On this site: The single strongest application-side concept here, and still only one implementation. match-me uses bare fire-and-forget goroutines with no persistence, retry or broker.

where it appears

  • fullstack-ecommerce-platform RabbitMQ payment_queue: the handler publishes on order and a worker consumes, requeueing with Nack when the database is down. No dead-letter queue and no worker pool.

Read replicas

proposed only

Asynchronous copies of a primary database that serve read queries, letting reads scale horizontally without making writes any faster.

what it solves

Read-heavy workloads bottlenecked on one primary. Because replication is usually asynchronous, the trade is explicit: you are accepting replication lag in exchange for read throughput.

On this site: Not implemented anywhere. It would be actively harmful in the smaller projects — book-forum is a single SQLite file, where replication has no meaning.

where it appears

  • fullstack-ecommerce-platform A stress-test document recommends read replicas for catalogue browsing. The application connects to a single host with one DSN.

Sharding

proposed only

Splitting data across several databases by a key — usually a tenant or an account — so each shard holds a subset and the cluster holds the whole.

what it solves

A single database that has outgrown one machine. Splitting by a key that matches your access pattern keeps a query hitting one shard instead of fanning out to all of them.

On this site: Not implemented, and deliberately so. Sharding is the most expensive item on this list to add late, which is precisely why the concept exists.

where it appears

  • fullstack-ecommerce-platform A review guide discusses sharding the database across servers as a future step. No partition clause and no shard router exist.

Snowflake IDs

considered, rejected

Distributed, roughly time-ordered integer identifiers — Snowflake, ULID, UUIDv7, KSUID — that keep the small-integer storage of a sequence while being safe to generate on many nodes at once.

what it solves

The tension between a central sequence, which is a single point of contention, and a random UUID, which is not index-friendly and leaks volume information through enumeration.

On this site: Not implemented anywhere — but it is the one concept here that was actively considered and argued against, which is a more interesting result than absence.

where it appears

  • fullstack-ecommerce-platform Deliberately chose UUID v4 over auto-increment, argued on anti-enumeration grounds in its own design docs.
  • make-match UUID primary keys with the uuid-ossp extension across every table.
  • book-forum Sequential INTEGER PRIMARY KEY AUTOINCREMENT — the opposite end of the same trade.

Consistent hashing

not used

Placing keys on a hash ring rather than modulo a fixed count, so adding or removing a node remaps only its neighbours instead of moving most of the keyspace.

what it solves

The remapping storm that plain modulo hashing causes when a cluster resizes — and, with virtual nodes, the load skew that a small number of physical nodes introduces.

On this site: Not implemented anywhere. Worth knowing mainly because that unused indirect dependency is the kind of thing a dependency audit surfaces and a README never would.

where it appears

  • fullstack-ecommerce-platform A rendezvous-hashing library sits in go.mod as an indirect dependency and is imported by zero files. A module-graph entry is not a design.

3 concepts

Edge & serverless

Moving compute toward the request instead of toward the database.

Serverless (AWS Lambda)

designed

Small functions run in response to an event, on infrastructure you do not manage and pay for by invocation rather than by uptime.

what it solves

Glue code that is too small to justify a server and too intermittent to keep one warm — cron jobs, webhook receivers, and scheduled teardown of test environments.

On this site: Planned only. Every deployed project here ships as a long-running process under Compose, which is a deliberate choice rather than a limitation.

where it appears

  • cloud-migration-devops-analysis Lambda with EventBridge for scheduled shutdown of non-production environments, as a cost-optimisation measure in the risk assessment.

CDN

proposed only

A network of caches in front of your origin that serves popular responses from a location near the requester, so most traffic never reaches your servers.

what it solves

Origin bandwidth and latency. It also moves a class of load — static assets — off the application entirely.

On this site: No CDN anywhere. What exists is the origin side of the contract, done properly and unused — the headers are right, and nothing sits in front to honour them.

where it appears

  • fullstack-ecommerce-platform Sets correct origin Cache-Control and ETag headers, and tags responses with Surrogate-Key — but no CDN is deployed and nothing consumes that key, so there is no purge path.

Edge functions

not used

Code running in a runtime sited in a CDN's network, close enough to the visitor to rewrite a request, set a header or run authentication without a round trip to an origin.

what it solves

Work that must happen on every request but does not need a database — bot filtering, geo-routing, A/B assignment, JWT verification at the edge.

On this site: Not implemented anywhere. This is the clearest pure study-gap item on the list — nothing in the projects edges anything.

where it appears

  • fullstack-ecommerce-platform The frontend runs as a Vite dev server. The only edge-like thing on the site is a Surrogate-Key header with no consumer.

where to look next

Taught here, not yet built

These are the concepts this reference teaches that no project on this site implements. They are listed as plainly as the ones that are built, because a gap you can name is a gap you can go and close.

back to the journey → Juho