The tools of the trade, grouped by job. For each one: what it is in one line, when to reach for it, the lab where we use it in this course, and its official site. The course stack is deliberately small: Docker Compose to run everything locally, k6 to load-test, OpenTelemetry + grafana/otel-lgtm to observe, Toxiproxy to inject faults, kind or minikube for Kubernetes, GitHub Actions and Argo CD to deliver, and LiteLLM + Ollama + pgvector for the AI service. The alternatives are listed so you recognize them in job descriptions and engineering blogs.
About the links
Links go to each project's official site or official repository. Tools change fast: check the current documentation before copying a command from a blog post, and pin versions in your docker-compose.yaml and CI files.
| Job | In this course | Common alternatives | Lab |
| Run the whole system locally | Docker + Docker Compose | Podman, Tilt | Hands-on 0 |
| Load test an HTTP API | k6 | Gatling, Locust, JMeter, wrk2, vegeta | Hands-on 2 |
| Inject latency and failures | Toxiproxy | Chaos Mesh, LitmusChaos, AWS FIS, Gremlin, Pumba | Hands-on 9 |
| Metrics, logs and traces | OpenTelemetry + grafana/otel-lgtm | Prometheus + Grafana + Loki + Tempo, Jaeger, commercial APM | Hands-on 8 |
| Find where the CPU goes | async-profiler (Java) | Pyroscope, perf | Class 15 |
| Explain a slow query | EXPLAIN (ANALYZE, BUFFERS) + explain.dalibo.com | pgAdmin, pganalyze | Hands-on 6 |
| Local Kubernetes | kind or minikube | k3d, Docker Desktop Kubernetes | Hands-on 10 |
| CI pipeline | GitHub Actions | GitLab CI, Jenkins | Hands-on 11 |
| GitOps and progressive delivery | Argo CD (+ Argo Rollouts) | Flux, Flagger | Hands-on 11 |
| Infrastructure as code | Terraform / OpenTofu | Pulumi, Crossplane, cloud-native templates | Class 11 |
| Scan images and produce an SBOM | Trivy + Syft | Grype, Docker Scout | Hands-on 11 |
| Draw an architecture | Excalidraw, Mermaid | diagrams.net, PlantUML, Structurizr | every class |
| Call LLMs through one gateway | LiteLLM (+ Ollama locally) | Envoy AI Gateway, cloud gateways | Hands-on 12 |
| Test prompts and guardrails | promptfoo | custom eval scripts | Hands-on 12 |
Load testing
| Tool | What it is | Reach for it when | In the course | Site |
| k6 | Load-testing tool scripted in JavaScript, with thresholds that fail a run (great for CI) | You want readable scripts, smoke/load/stress/spike/soak profiles and pass/fail thresholds | Hands-on 2, every "Measure it" step, CI gate in Hands-on 11 | k6.io |
| Gatling | Load-testing tool with scenarios in Java, Kotlin or Scala and detailed HTML reports | Your team lives on the JVM and wants code-first scenarios | Alternative to k6 | gatling.io |
| Locust | Load testing with user behavior written in Python | You prefer Python, or need custom protocols | Alternative to k6 | locust.io |
| Apache JMeter | Veteran GUI-based load-testing tool, many protocols | You inherit existing JMeter plans or need its protocol plugins | Recognize it | jmeter.apache.org |
| wrk2 | Tiny HTTP benchmarking tool with a constant request rate, corrected for coordinated omission | You need a quick, honest latency distribution at a fixed rate | Class 15 (coordinated omission) | github.com/giltene/wrk2 |
| vegeta | HTTP load tool with a constant attack rate, usable as a CLI or Go library | Open-model (fixed-rate) tests from the command line | Alternative for quick tests | github.com/tsenart/vegeta |
| oha / hey | Minimal command-line HTTP load generators | A ten-second sanity check, not a test campaign | Quick checks | oha · hey |
Open vs closed workload
Most tools default to a closed model (N virtual users, each waiting for its response before sending the next). Real internet traffic is closer to an open model (requests arrive at a rate, whether or not the server keeps up). k6's constant-arrival-rate and ramping-arrival-rate executors, wrk2 and vegeta generate open load; use them when you want to see queues build up. See Class 15 · Load testing.
Chaos and fault injection
| Tool | What it is | Reach for it when | In the course | Site |
| Toxiproxy | TCP proxy that adds latency, bandwidth limits, timeouts and connection drops, controlled by an API | Testing timeouts, retries and circuit breakers between two services, locally or in CI | Hands-on 9 | github.com/Shopify/toxiproxy |
| Chaos Mesh | Kubernetes-native chaos (pod kill, network delay, stress, time skew) defined as custom resources | Chaos experiments inside a Kubernetes cluster | Optional in Hands-on 10 | chaos-mesh.org |
| LitmusChaos | Kubernetes chaos engineering platform with a hub of ready experiments | Scheduled, repeatable chaos workflows on Kubernetes | Recognize it | litmuschaos.io |
| AWS Fault Injection Service (FIS) | Managed fault injection for AWS resources (stop instances, throttle APIs, AZ disruptions) | Game days on AWS infrastructure | Recognize it | aws.amazon.com/fis |
| Gremlin | Commercial chaos engineering platform | Organizations that want a managed, audited chaos practice | Recognize it | gremlin.com |
| Pumba | Chaos for Docker containers (kill, pause, network emulation with tc) | Breaking containers in a Compose environment | Optional in the game day | github.com/alexei-led/pumba |
Observability
| Tool | What it is | Reach for it when | In the course | Site |
| OpenTelemetry | Vendor-neutral APIs, SDKs, auto-instrumentation agents and the Collector for metrics, logs and traces | Always: instrument once, send anywhere | Hands-on 8 | opentelemetry.io |
grafana/otel-lgtm | One Docker image with an OpenTelemetry Collector, Prometheus/Mimir, Loki, Tempo, Pyroscope and Grafana | A complete local observability stack in one container | Hands-on 8 | github.com/grafana/docker-otel-lgtm |
| Prometheus | Pull-based metrics database with PromQL and alerting rules | Metrics and alerts, especially on Kubernetes | Hands-on 8, Hands-on 10 | prometheus.io |
| Grafana | Dashboards and alerting over many data sources | RED/USE dashboards, SLO panels | Hands-on 8 | grafana.com |
| Grafana Loki | Log aggregation indexed by labels | Cheap, searchable logs next to your metrics | Hands-on 8 | grafana.com/oss/loki |
| Grafana Tempo | Trace storage on object storage | Storing traces cheaply, linked from metrics and logs | Hands-on 8 | grafana.com/oss/tempo |
| Jaeger | Distributed tracing back end and UI (CNCF) | A standalone tracing UI | Alternative to Tempo | jaegertracing.io |
| Grafana Pyroscope | Continuous profiling | Seeing flame graphs over time in production | Optional | grafana.com/oss/pyroscope |
| async-profiler | Low-overhead sampling profiler for the JVM that produces flame graphs | Finding where a Java service spends CPU or allocates memory | Class 15 | github.com/async-profiler/async-profiler |
Infrastructure as code and configuration
| Tool | What it is | Reach for it when | In the course | Site |
| Terraform | Declarative infrastructure as code with providers for every cloud (HCL language) | Creating cloud resources reproducibly, with plans and reviews | Class 11 | terraform.io |
| OpenTofu | Open-source fork of Terraform (Linux Foundation), compatible with its language | Same as Terraform, with an open-source license | Class 11 | opentofu.org |
| Pulumi | Infrastructure as code in general-purpose languages (TypeScript, Python, Go, Java…) | Your team prefers real programming languages to HCL | Recognize it | pulumi.com |
| Ansible | Agentless configuration management over SSH with YAML playbooks | Configuring virtual machines and their software | Recognize it | ansible.com |
| Helm | Package manager for Kubernetes (charts with templates and values) | Installing third-party software on Kubernetes, packaging your own | Optional in Hands-on 10 | helm.sh |
| Kustomize | Template-free customization of Kubernetes YAML with overlays (built into kubectl) | One base manifest, small differences per environment | Hands-on 10, Hands-on 11 | kustomize.io |
| Crossplane | Manages cloud resources as Kubernetes custom resources | Platform teams building self-service APIs on Kubernetes | Recognize it | crossplane.io |
CI/CD and GitOps
| Tool | What it is | Reach for it when | In the course | Site |
| GitHub Actions | CI/CD workflows defined in YAML in the repository | Build, test, scan, build images and run k6 gates on every push | Hands-on 11 | github.com/features/actions |
| Argo CD | GitOps controller: keeps a Kubernetes cluster in sync with manifests in Git | Deployments that are reviewed as pull requests and self-heal from drift | Hands-on 11 | argo-cd.readthedocs.io |
| Argo Rollouts | Progressive delivery for Kubernetes: canary and blue/green with automated analysis | Canary releases that roll back on bad metrics | Hands-on 11 | argoproj.github.io |
| Flux | GitOps toolkit for Kubernetes (CNCF) | Alternative to Argo CD | Recognize it | fluxcd.io |
Containers and local clusters
| Tool | What it is | Reach for it when | In the course | Site |
| Docker | Builds and runs OCI container images | Packaging every service | Hands-on 0, Hands-on 1 | docker.com |
| Docker Compose | Runs multi-container applications from one YAML file | The whole BoxOffice stack on a laptop | Every lab | docs.docker.com/compose |
| Podman | Daemonless, rootless container engine compatible with the Docker CLI | Environments where Docker Desktop is not an option | Alternative | podman.io |
| kind | Kubernetes clusters running in Docker containers | Fast, disposable clusters locally and in CI | Hands-on 10 | kind.sigs.k8s.io |
| minikube | Local single- or multi-node Kubernetes with add-ons (ingress, metrics-server) | Learning Kubernetes with batteries included | Hands-on 10 | minikube.sigs.k8s.io |
| k3d | Runs the lightweight k3s distribution in Docker | Very light local clusters | Alternative | k3d.io |
| kubectl | The Kubernetes command-line client | Everything on a cluster | Hands-on 10 | kubernetes.io/docs/reference/kubectl |
| k9s | Terminal UI for Kubernetes | Watching pods, logs and events while a load test runs | Optional | k9scli.io |
Diagramming
| Tool | What it is | Reach for it when | In the course | Site |
| Excalidraw | Hand-drawn style whiteboard in the browser, with collaboration | Interviews, mock interviews, quick sketches | Mock interviews | excalidraw.com |
| Mermaid | Diagrams as text (flowchart, sequence, state) rendered in Markdown | Diagrams that live in the repository next to the code — like the ones on this site | Every class | mermaid.js.org |
| diagrams.net (draw.io) | Free diagram editor with cloud icon sets | Detailed architecture diagrams with official cloud icons | Project design doc | drawio.com |
| PlantUML | Diagrams as text, strong on UML and C4 | Teams that already use UML | Recognize it | plantuml.com |
| Structurizr / C4 model | The C4 model (context, containers, components, code) and a tool to keep diagrams as code | Design docs with several consistent levels of zoom | Design doc | c4model.com · structurizr.com |
| System Design Playground | The course simulator: design with the palette and run it under load | Testing whether a design survives, not just drawing it | Playground | — |
Databases and caching
Security and supply chain
| Tool | What it is | Reach for it when | In the course | Site |
| Trivy | Scanner for vulnerabilities and misconfigurations in images, file systems and IaC | Failing the CI build on critical CVEs | Hands-on 11 | github.com/aquasecurity/trivy |
| Syft | Generates a software bill of materials (SBOM) from images and directories | Knowing exactly what ships in each image | Hands-on 11 | github.com/anchore/syft |
| Grype | Vulnerability scanner that works on images and SBOMs | Scanning an SBOM produced by Syft | Alternative to Trivy | github.com/anchore/grype |
| cosign (Sigstore) | Signs and verifies container images and attestations | Proving an image came from your pipeline | Hands-on 11 | github.com/sigstore/cosign |
| OWASP ZAP | Dynamic application security scanner (proxy and automated scans) | Checking a running API for common vulnerabilities | Optional in Hands-on 4 | zaproxy.org |
| Keycloak | Open-source identity provider (OIDC, OAuth 2) | A real authorization server for local development | Hands-on 4 | keycloak.org |
| Tool | What it is | Reach for it when | In the course | Site |
| curl | The universal command-line HTTP client | Any quick request, in scripts and docs | Every lab | curl.se |
| HTTPie | Friendlier command-line HTTP client with JSON support | Exploring an API by hand | Optional | httpie.io |
| Bruno | Open-source API client whose collections are plain files in Git | Sharing API requests with the team through the repository | Optional | usebruno.com |
| Postman | Popular API platform for requests, collections and tests | Teams that already use it | Recognize it | postman.com |
| grpcurl | curl for gRPC servers | Calling gRPC services by hand | Class 5 | github.com/fullstorydev/grpcurl |
AI systems
| Tool | What it is | Reach for it when | In the course | Site |
| LiteLLM | LLM gateway/proxy with an OpenAI-compatible API, budgets, fallbacks and cost tracking | One front door to local and hosted models | Hands-on 12 | github.com/BerriAI/litellm |
| Ollama | Runs open-weight models locally behind an HTTP API | Developing without API keys or costs | Hands-on 12 | ollama.com |
| pgvector | Vector type and similarity indexes (HNSW, IVFFlat) for PostgreSQL | RAG without adding a new database | Hands-on 12 | github.com/pgvector/pgvector |
| Model Context Protocol + MCP Inspector | Open protocol for exposing tools to models, and a tool to test MCP servers | Building and debugging the assistant's tools | Hands-on 12 | modelcontextprotocol.io · inspector |
| promptfoo | Tests and red-teaming for prompts, RAG and guardrails, runnable in CI | Catching regressions in answers and injection defenses | Hands-on 12 | promptfoo.dev |
Learn the job, not just the tool
Interviewers rarely care whether you used k6 or Gatling. They care whether you know what to measure (percentiles at a target rate, the knee, the bottleneck) and why. Learn one tool per job well, and be able to say what its alternatives do differently.