The practices, tools, and mindset that connect development and operations — from your first Git commit to a live deployment pipeline.
DevOps is not a job title, a tool, or a department. It is a cultural and professional movement that tears down the wall between software developers (who build features) and operations engineers (who keep systems running). Before DevOps, these two groups worked in silos — developers threw code "over the fence" to operations, who then struggled to deploy software they had not built. The result was slow releases, frequent failures, and endless blame cycles. DevOps replaces that wall with shared ownership, shared tools, and shared responsibility for the entire software lifecycle.
The term was popularised at the Velocity 2009 conference by John Allspaw and Paul Hammond of Flickr, who described deploying over 10 times a day — an unimaginable frequency at the time. The core insight: if developers and operations share the same goals and feedback loops, software can be shipped safely at high speed. This was the beginning of what we now call DevOps. Learn with LSGP introduces this philosophy early because you cannot understand any specific DevOps tool without understanding the problem it is solving.
CALMS is the most widely cited framework for understanding DevOps culture:
Shared responsibility for delivery and quality. Blame-free post-mortems. Developers own their code in production.
Any manual, repetitive step in the software lifecycle is a target for automation — builds, tests, deployments, provisioning.
Eliminate waste. Small batches of work. Short feedback loops. Continuous improvement over big-bang releases.
You cannot improve what you do not measure. Track DORA metrics: deployment frequency, lead time, MTTR, change failure rate.
Share knowledge, tools, and processes across teams. Runbooks, post-mortem reports, and architecture decisions in the open.
DORA (DevOps Research and Assessment) metrics are the industry standard for measuring DevOps team performance. Every DevOps interview at a top company will expect you to know these:
| Metric | What It Measures | Elite Target |
|---|---|---|
| Deployment Frequency | How often you deploy to production | Multiple times per day |
| Lead Time for Changes | Commit to production time | Less than 1 hour |
| Mean Time to Restore (MTTR) | Time to recover from a failure | Less than 1 hour |
| Change Failure Rate | % of deployments causing failures | 0–5% |
Git is the foundation of every DevOps workflow. Without version control, there is no reliable way to track changes, collaborate across teams, roll back broken code, or trigger automated pipelines. Git is not just a file backup system — it is the single source of truth for your entire codebase's history, and in a GitOps workflow, it is also the source of truth for your infrastructure's desired state.
Every DevOps tool — CI/CD systems, deployment platforms, code review workflows — plugs into Git. A push to a branch triggers a build. A merged pull request triggers a deployment. A tagged commit triggers a release. Git is the heartbeat of the DevOps pipeline.
.git folder.git push and git pull synchronise local and remote.A branching strategy defines how your team uses branches to organise work and releases. The two most common in DevOps:
All developers push to a single main branch (trunk) in small, frequent commits. Feature flags hide incomplete features. This is how Google and Meta ship software. Ideal for high-frequency deployment.
Separate branches for features, releases, hotfixes, and develop. More structure, longer-lived branches. Better for versioned software or infrequent releases. Commonly used in open-source projects.
# Start a new feature git checkout -b feature/user-auth # Stage and commit changes git add . git commit -m "feat: add JWT login endpoint" # Keep branch up to date with main git fetch origin git rebase origin/main # Push and open a pull request git push origin feature/user-auth # After PR review and approval — squash merge git checkout main git merge --squash feature/user-auth git commit -m "feat: user authentication with JWT (#42)"
Conventional Commits is a standard for writing commit messages that can be parsed by tools. Format: type(scope): description. Common types: feat (new feature), fix (bug fix), docs, chore, refactor, test. Following this standard lets you auto-generate changelogs and trigger semantic versioning automatically in your CI pipeline.
Continuous Integration (CI) is the practice of automatically building and testing code every time a developer pushes a commit. Continuous Delivery (CD) extends CI by automatically deploying code that passes all tests to a staging or production environment. Together, CI/CD is the engine of modern software delivery — replacing manual, error-prone deploy procedures with a reliable, repeatable automated pipeline.
GitHub Actions is the most accessible CI/CD platform for beginners. Workflows are YAML files in .github/workflows/ that define what runs on which events.
name: CI Pipeline on: push: branches: [main, 'feature/**'] pull_request: branches: [main] jobs: test-and-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci - name: Run linter run: npm run lint - name: Run tests run: npm test -- --coverage - name: Build Docker image run: docker build -t lsgp-app:${{ github.sha }} . - name: Push to registry (main only) if: github.ref == 'refs/heads/main' run: | docker tag lsgp-app:${{ github.sha }} ghcr.io/lsgp/app:latest docker push ghcr.io/lsgp/app:latest
Docker solved one of the most persistent problems in software deployment: "it works on my machine." A container packages your application and all its dependencies — the runtime, libraries, config, and code — into a single portable unit that runs identically on any machine with Docker installed. Containers are not virtual machines (VMs). VMs virtualise hardware and run a full OS; containers share the host OS kernel and are isolated using Linux namespaces and cgroups. This makes containers dramatically lighter, faster to start, and more efficient.
# Stage 1: build FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci --only=production # install deps first (cached) COPY . . RUN npm run build # Stage 2: minimal production image FROM node:20-alpine WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules USER node # never run as root EXPOSE 3000 CMD ["node", "dist/index.js"]
Most real applications need multiple containers working together — a web server, a database, a cache, a background worker. Docker Compose defines and runs multi-container applications with a single YAML file.
services: web: build: . ports: ["3000:3000"] environment: DATABASE_URL: postgresql://user:pass@db:5432/lsgp depends_on: [db, redis] db: image: postgres:16-alpine volumes: [pgdata:/var/lib/postgresql/data] environment: POSTGRES_PASSWORD: pass redis: image: redis:7-alpine volumes: pgdata:
Docker runs containers on one machine. Kubernetes (K8s) orchestrates containers across a cluster of machines. It handles scheduling (which node runs which container), scaling (run 10 replicas of a service), self-healing (restart failed containers, replace unhealthy nodes), and service discovery (route traffic to the right pods). Kubernetes is the standard for production-scale container workloads. Key concepts: Pods (smallest deployable unit), Deployments (declare desired state), Services (stable networking), Ingress (external HTTP routing), ConfigMaps and Secrets (configuration injection). Learn with LSGP covers Kubernetes in depth in its Cloud and DevOps advanced track.
Before Infrastructure as Code (IaC), servers were configured by hand — someone SSHed in, ran some commands, installed packages, and hoped they remembered everything for next time. This is called a "snowflake server" — unique, fragile, and impossible to reproduce. IaC replaces this with code: you declare what you want (a web server with 8 cores, a managed database, a load balancer), and the tool provisions it automatically. The code lives in Git — versioned, reviewed, auditable, and reproducible.
Terraform (by HashiCorp) is the dominant IaC tool for cloud infrastructure. You write HCL (HashiCorp Configuration Language) files declaring the desired state, and Terraform figures out what to create, change, or destroy to reach that state. It works across AWS, GCP, Azure, and dozens of other providers.
resource "aws_instance" "web" { ami = "ami-0c02fb55956c7d316" instance_type = "t3.micro" key_name = var.key_name tags = { Name = "lsgp-web-server" Project = "learnwithlsgp" } } output "public_ip" { value = aws_instance.web.public_ip } # terraform init → terraform plan → terraform apply
Terraform provisions infrastructure; Ansible configures it. Ansible connects to servers over SSH and runs "playbooks" — YAML files describing the desired state of the server's configuration: which packages are installed, which files exist, which services are running. Ansible is agentless (no software needed on the managed machine), idempotent (running a playbook twice produces the same result), and human-readable.
terraform plan and posts the diff as a PR comment — reviewers see exactly what will change before approving.terraform apply automatically to enforce the declared state.Deploying code is not the end of the story. Once software is in production, it must be observed — are requests succeeding? Is latency acceptable? Is memory growing unbounded? Are errors spiking? Without monitoring, you are flying blind, and your users discover problems before you do. Learn with LSGP treats observability as a first-class engineering discipline, not an afterthought.
Numeric measurements over time: request count, error rate, CPU usage, memory, p99 latency. Stored in time-series databases (Prometheus). Visualised in dashboards (Grafana).
Timestamped records of events. Every significant action — requests, errors, background jobs — should produce a structured log (JSON). Centralised with tools like ELK Stack (Elasticsearch, Logstash, Kibana) or Loki.
End-to-end records of a request's journey across multiple services. Identify exactly which service and which function is slow. Tools: Jaeger, Zipkin, AWS X-Ray, OpenTelemetry.
Site Reliability Engineering (SRE) — Google's approach to running production systems — introduced a clear language for reliability targets:
Alert on symptoms, not causes. Alert when users are being hurt — high error rate, high latency, unavailability — not on every CPU spike. Each alert should be actionable: if an engineer gets paged and cannot do anything about it, the alert is noise. Keep your on-call rotation humane: too many alerts cause alert fatigue, which causes engineers to start ignoring pages. A good alert has a clear owner, a runbook (step-by-step guide to investigate and resolve), and a severity level that dictates whether to wake someone at 3am.
DevSecOps extends DevOps by integrating security at every stage of the pipeline — "shift left" security means catching vulnerabilities in development rather than in production. Traditionally, a security team reviewed code at the end of a release cycle. In DevSecOps, automated security checks run on every commit, just like tests.
| Stage | Security Practice | Tools |
|---|---|---|
| Code | Static Application Security Testing (SAST) — finds code-level vulnerabilities | Semgrep, SonarQube, CodeQL |
| Dependencies | Software Composition Analysis (SCA) — finds vulnerable libraries | Dependabot, Snyk, OWASP Dependency-Check |
| Build | Secrets scanning — prevent keys/tokens committed to Git | Gitleaks, TruffleHog, GitHub Secret Scanning |
| Container | Image scanning — CVEs in base images and packages | Trivy, Grype, Docker Scout |
| Deploy | Least-privilege IAM; no credentials in environment | OIDC tokens, Vault, AWS IAM roles |
| Production | Runtime threat detection, WAF, anomaly alerting | Falco, AWS GuardDuty, Cloudflare WAF |
Every service, user, and process should have exactly the permissions it needs — nothing more. A web server should not have write access to the database schema. A CI pipeline should not have production deploy permissions just to run tests. A developer workstation should not have production database credentials. Least privilege limits the blast radius when any component is compromised.
DevOps and cloud engineering are among the highest-demand and highest-paid specialisations in the software industry globally and in India. The transition from software developer to DevOps engineer is natural — strong programming skills are a prerequisite, and most great DevOps engineers are former developers who developed a passion for infrastructure, automation, and reliability.
Linux command line, networking basics (DNS, TCP/IP, HTTP), scripting (Bash, Python), Git. Without these, nothing else sticks.
Docker (build, run, compose), Kubernetes fundamentals (pods, deployments, services, Helm charts).
One cloud deeply: AWS (EC2, S3, RDS, EKS, IAM, VPC) or GCP or Azure. AWS has the widest job market in India.
GitHub Actions or GitLab CI. Terraform for infrastructure. Ansible for configuration. These are table stakes for any DevOps role.
Prometheus + Grafana stack. ELK or Loki for logs. Basic alerting. SLO thinking.
Secrets management (Vault, AWS Secrets Manager). Container scanning. SAST in pipelines. IAM best practices.
| Certification | Provider | Value |
|---|---|---|
| AWS Solutions Architect Associate | Amazon Web Services | Most recognised cloud cert in India; high ROI |
| Certified Kubernetes Administrator (CKA) | CNCF / Linux Foundation | Hands-on, practical; valued by product companies |
| HashiCorp Terraform Associate | HashiCorp | Validates IaC fundamentals; respected across cloud providers |
| Google Cloud Professional DevOps Engineer | Google Cloud | Strong for GCP-heavy orgs; harder than AWS equivalent |
| Docker Certified Associate | Docker Inc. | Good foundational cert; less weighted than CKA in senior roles |