A practitioner's field guide for the journey from fundamentals to production-grade DevOps engineering.
This repository operates on three levels:
- Field Guide - Distilled concepts, patterns, and principles for each DevOps domain, written to be referenced in practice
- Learning Journal - Honest reflections, surprises, and connections discovered along the way
- Live Projects - A rolling project that evolves with each module, accumulating real infrastructure
| # | Module | Focus | Status |
|---|---|---|---|
| 00 | Intro | DevOps philosophy, SDLC, team dynamics | Done |
| 01 | Linux | Command line, filesystem, permissions, scripting | Done |
| 02 | Python Basics | Syntax, data structures, scripting | Done |
| 03 | Git & GitHub | Version control, branching, collaboration | Done |
| 04 | Advanced Python | OOP, Flask, APIs, automation | Done |
| 05 | Networking | TCP/IP, DNS, HTTP, firewalls | Done |
| 06 | AWS | Cloud fundamentals, core services | Done |
| 07 | Docker | Containers, images, Compose | Done |
| 08 | CI/CD | Pipelines, automation, deployment strategies | Upcoming |
| 09 | Kubernetes | Orchestration, pods, services | In Progress |
| 10 | Helm | Package management for Kubernetes | In Progress |
| 11 | AWS Advanced | ECS, ECR, EKS | Upcoming |
| 12 | Terraform | Infrastructure as Code | Upcoming |
| 13 | Jenkins | Build automation, pipeline orchestration | Upcoming |
| 14 | Observability | Grafana, monitoring, dashboards | Upcoming |
| 15 | ArgoCD | GitOps, continuous delivery | Upcoming |
Principles collected throughout the course. These are non-negotiable truths earned through practice.
- "An application is not code." - it is a solution living inside an organization
- "Tech decisions are also organizational decisions."
- "If it works, don't touch it."
- "Any system too open will be breached."
- "What you don't need, don't use."
- "Always think worst case."
- "A requirement not defined correctly doesn't disappear - it comes back as bugs."
- "Bug in code = incident. Bug in data = crisis."
- "Code that works in dev is not necessarily production-ready."
- "insert_one() mutates your dict — handle
_idbefore responding." - "Credentials in code = credentials in git. Use .env from day one."
- "Circular imports? Extract shared resources to their own module."
- "
kubectl create -fis imperative-with-file, not declarative. Declarative iskubectl apply." - "
spec.containersis required in every Pod manifest - it's a list, not a single object." - "
kubectl describeis your proof that actual state == desired state." - "
connection refusedon the API server = cluster probably isn't running. Checkdocker psfirst." - "
kubectl createdoes not writelast-applied-configuration. Migrating toapplytriggers a one-time warning, then the annotation is backfilled automatically." - "Old ReplicaSets at 0 replicas are not junk - they are rollback history. Don't delete them manually."
- "Never assume your working directory.
pwd+ls -labefore every lab." - "ReplicaSet counts every Pod matching its selector - including manually created Pods. Do not mix them casually."
- "Changing ReplicaSet template does not update existing Pods. Only future Pods use the new template."
- "pod-template-hash connects Deployment template, ReplicaSet name, and Pod names. Never set it manually."
- "Changing pod template (image, env, etc.) creates a new ReplicaSet. Changing replicas does not."
- "Rollback creates a new revision. It does not restore the old revision number."
- "
kubectl scaleis temporary.kubectl applyalways wins." - "Scaling replicas does not create a new rollout revision because pod template did not change."
- "
ImagePullBackOffis diagnosed at Pod level, not at Deployment level. Usekubectl describe pod." - "RollingUpdate keeps old Pods running until new Pods are healthy. A broken image does not kill availability."
- "Rollback is fast recovery. If the manifest still has the bad image, the next apply brings it back."
- "
change-causeannotation is documentation, not action. It can lie. Check the actual image." - "
kubectl diffbeforekubectl applyis not optional."
This list grows with each module.
David Rubin - AI Solutions Specialist transitioning to DevOps Engineering.
Currently bridging the gap between business needs and technical implementation, now building depth in infrastructure, automation, and production systems.
- GitHub: @Dude775
- Portfolio: system-portfolio.vercel.app