{"name":"DevOpsNess","description":"Practical tutorials and articles on AI, DevOps, cloud, Linux, and infrastructure.","url":"https://www.devopsness.com","contentCount":200,"content":[{"title":"AIOps & Self-Healing Infrastructure in 2026: A Practical Guide","url":"https://www.devopsness.com/blog/aiops-self-healing-infrastructure-2026-07-25","description":"A practical guide to AIOps and self-healing infrastructure: the maturity ladder from alert to autonomous remediation, observability as the foundation, anomaly detection, Kubernetes-native self-healing, an operator-driven remediation loop, agentic SRE, and the guardrails that keep automation safe.","publishedAt":"2026-07-25T13:00:00.000Z","updatedAt":"2026-07-25T16:16:16.728Z","category":"DevOps"},{"title":"Building MCP Servers in 2026: The Complete Guide","url":"https://www.devopsness.com/blog/building-mcp-servers-2026-07-25","description":"A hands-on guide to the Model Context Protocol: what MCP is and why it won, a minimal FastMCP server, tools vs resources vs prompts, stdio vs streamable HTTP, OAuth 2.1 for remote servers, testing with the inspector, and deploying safely — with copy-paste code.","publishedAt":"2026-07-25T12:00:00.000Z","updatedAt":"2026-07-25T16:22:36.366Z","category":"AI"},{"title":"GitHub Actions Recipes — The Practical Guide","url":"https://www.devopsness.com/blog/github-actions-recipes","description":"Most GitHub Actions pain comes from the same handful of jobs done wrong. This is the map: the recipes that make pipelines fast, secure, and cheap.","publishedAt":"2026-07-24T00:00:00.000Z","updatedAt":"2026-07-25T16:38:59.671Z","category":"DevOps"},{"title":"Conditional Jobs and Path Filters in GitHub Actions","url":"https://www.devopsness.com/blog/github-actions-conditional-jobs","description":"Run only the CI jobs a change actually affects using if conditionals, trigger path filters, and per-job path detection in a monorepo.","publishedAt":"2026-07-24T00:00:00.000Z","updatedAt":"2026-07-25T17:14:55.328Z","category":"DevOps"},{"title":"Keyless Deploys to AWS with GitHub Actions OIDC","url":"https://www.devopsness.com/blog/github-actions-oidc-aws","description":"Stop stashing long-lived AWS access keys in GitHub secrets and let OIDC hand your workflows short-lived, scoped credentials instead.","publishedAt":"2026-07-24T00:00:00.000Z","updatedAt":"2026-07-25T16:36:57.342Z","category":"DevOps"},{"title":"How to Speed Up a Slow CI Pipeline","url":"https://www.devopsness.com/blog/speed-up-ci-pipeline","description":"A prioritized toolkit for cutting CI time: measure the critical path first, then cache, parallelize, run only what changed, and shrink the work itself.","publishedAt":"2026-07-24T00:00:00.000Z","updatedAt":"2026-07-25T23:05:32.642Z","category":"DevOps"},{"title":"GitHub Actions Matrix Builds That Don't Waste Minutes","url":"https://www.devopsness.com/blog/github-actions-matrix-builds","description":"A practical guide to matrix builds in GitHub Actions that tests across versions and platforms without burning your monthly minutes.","publishedAt":"2026-07-23T00:00:00.000Z","updatedAt":"2026-07-25T16:34:54.606Z","category":"DevOps"},{"title":"Using Secrets in GitHub Actions Safely","url":"https://www.devopsness.com/blog/github-actions-secrets-guide","description":"A practical guide to scoping GitHub Actions secrets correctly, avoiding leaks in logs, blocking fork-PR theft, and preferring OIDC over stored keys.","publishedAt":"2026-07-23T00:00:00.000Z","updatedAt":"2026-07-25T16:41:02.745Z","category":"DevOps"},{"title":"Build and Push Docker Images in GitHub Actions","url":"https://www.devopsness.com/blog/github-actions-docker-build-push","description":"A practical guide to building, tagging, caching, and pushing Docker images from GitHub Actions using buildx, GHCR, and multi-arch builds.","publishedAt":"2026-07-23T00:00:00.000Z","updatedAt":"2026-07-25T16:32:51.831Z","category":"DevOps"},{"title":"Cache Dependencies in GitHub Actions","url":"https://www.devopsness.com/blog/github-actions-cache-dependencies","description":"Stop re-downloading the same packages on every CI run by caching dependencies with keys that actually hit.","publishedAt":"2026-07-23T00:00:00.000Z","updatedAt":"2026-07-25T16:28:46.310Z","category":"DevOps"},{"title":"Argo CD & GitOps Best Practices in 2026: Deployments You Can Trust","url":"https://www.devopsness.com/blog/argo-cd-gitops-best-practices-2026-07-22","description":"A production-focused Argo CD and GitOps guide: declarative Applications and ApplicationSets, app-of-apps, sync waves and hooks, automated self-heal and prune, progressive delivery with Argo Rollouts, projects/RBAC, and secure secrets — with copy-paste examples.","publishedAt":"2026-07-22T12:00:00.000Z","updatedAt":"2026-07-25T16:18:22.351Z","category":"DevOps"},{"title":"Application Security Best Practices — The Complete Guide","url":"https://www.devopsness.com/blog/application-security-best-practices","description":"Most breaches come from the same short list of application bugs. This is the map: the vulnerabilities that actually get exploited and how to shut each one down.","publishedAt":"2026-07-22T00:00:00.000Z","updatedAt":"2026-07-24T07:18:56.738Z","category":"DevOps"},{"title":"Linux \"Permission Denied\" — Diagnose It Fast","url":"https://www.devopsness.com/blog/fix-permission-denied-linux","description":"A likelihood-ordered checklist for tracing \"Permission denied\" on Linux through mode bits, ownership, ACLs, SELinux, and mount options.","publishedAt":"2026-07-22T00:00:00.000Z","updatedAt":"2026-07-25T14:50:30.910Z","category":"Linux"},{"title":"The HTTP Security Headers Guide (with CSP)","url":"https://www.devopsness.com/blog/security-headers-guide","description":"A practical walkthrough of the HTTP response headers that harden a web app, with a real rollout plan for Content-Security-Policy.","publishedAt":"2026-07-22T00:00:00.000Z","updatedAt":"2026-07-25T16:47:09.986Z","category":"DevOps"},{"title":"Debugging a systemd Service That Won't Start","url":"https://www.devopsness.com/blog/systemd-service-fails-to-start","description":"A field-tested workflow for diagnosing why a systemd unit refuses to start, from status output to exit codes to the usual root causes.","publishedAt":"2026-07-22T00:00:00.000Z","updatedAt":"2026-07-25T18:43:12.720Z","category":"Linux"},{"title":"Threat Modeling for Engineers — A Practical Guide","url":"https://www.devopsness.com/blog/threat-modeling-guide","description":"A lightweight, whiteboard-friendly way to find design-level security flaws that scanners miss, using STRIDE, data-flow diagrams, and four plain questions.","publishedAt":"2026-07-22T00:00:00.000Z","updatedAt":"2026-07-24T07:18:59.825Z","category":"DevOps"},{"title":"Linux Troubleshooting — The Complete Guide","url":"https://www.devopsness.com/blog/linux-troubleshooting-guide","description":"When a Linux box misbehaves, the same dozen problems come up again and again. This is the map: what each symptom means and the fast path to the fix.","publishedAt":"2026-07-22T00:00:00.000Z","updatedAt":"2026-07-24T07:18:55.926Z","category":"Linux"},{"title":"Dependency Scanning and SCA — A Practical Guide","url":"https://www.devopsness.com/blog/dependency-scanning-sca-guide","description":"A practical look at how SCA scanning finds vulnerable dependencies, cuts CVE noise, and where SAST, DAST, and IAST fit into CI/CD.","publishedAt":"2026-07-22T00:00:00.000Z","updatedAt":"2026-07-24T07:18:57.243Z","category":"DevOps"},{"title":"Secure Authentication and Session Best Practices","url":"https://www.devopsness.com/blog/secure-authentication-best-practices","description":"A practical guide to hashing passwords, adding MFA, hardening sessions, and avoiding the JWT mistakes that break production auth.","publishedAt":"2026-07-21T00:00:00.000Z","updatedAt":"2026-07-24T07:18:58.406Z","category":"DevOps"},{"title":"CSRF Protection Done Right","url":"https://www.devopsness.com/blog/csrf-protection-guide","description":"A practical guide to defending against CSRF with SameSite cookies, synchronizer tokens, and double-submit, plus knowing when you don't need any of it.","publishedAt":"2026-07-21T00:00:00.000Z","updatedAt":"2026-07-24T07:18:56.933Z","category":"DevOps"},{"title":"Tracking Down High CPU on Linux","url":"https://www.devopsness.com/blog/debug-high-cpu-linux","description":"A field-tested workflow for finding which process burns your CPU and whether the time is user, system, or iowait.","publishedAt":"2026-07-21T00:00:00.000Z","updatedAt":"2026-07-24T07:18:53.459Z","category":"Linux"},{"title":"API Security Best Practices","url":"https://www.devopsness.com/blog/api-security-best-practices","description":"Most API breaches aren't exotic exploits. They're missing authorization checks on endpoints that already require a login and a valid token.","publishedAt":"2026-07-21T00:00:00.000Z","updatedAt":"2026-07-24T07:18:56.426Z","category":"DevOps"},{"title":"The Linux OOM Killer — Why It Fired and How to Prevent It","url":"https://www.devopsness.com/blog/fix-out-of-memory-linux","description":"The kernel killed your process to save the box, and the log looks like noise until you know exactly which fields to read.","publishedAt":"2026-07-21T00:00:00.000Z","updatedAt":"2026-07-25T10:04:33.277Z","category":"Linux"},{"title":"How to Prevent XSS (Cross-Site Scripting)","url":"https://www.devopsness.com/blog/prevent-xss","description":"A practical guide to stopping XSS through contextual output encoding, framework escaping, sanitization, CSP, and Trusted Types.","publishedAt":"2026-07-20T00:00:00.000Z","updatedAt":"2026-07-24T07:18:58.068Z","category":"DevOps"},{"title":"The OWASP Top 10 Explained (With Fixes)","url":"https://www.devopsness.com/blog/owasp-top-10-explained","description":"A working engineer's tour of the OWASP Top 10, each risk paired with the concrete fix that actually closes it in production.","publishedAt":"2026-07-20T00:00:00.000Z","updatedAt":"2026-07-24T07:18:57.556Z","category":"DevOps"},{"title":"Find What's Eating Your RAM on Linux","url":"https://www.devopsness.com/blog/find-what-is-using-memory","description":"A practical method for reading free, top, and ps correctly so you attribute Linux memory to a real cause instead of guessing.","publishedAt":"2026-07-20T00:00:00.000Z","updatedAt":"2026-07-25T13:32:41.984Z","category":"Linux"},{"title":"How to Prevent SQL Injection (For Real)","url":"https://www.devopsness.com/blog/prevent-sql-injection","description":"A practical guide to stopping SQL injection with parameterized queries, ORM safety, least privilege, and layered defenses that actually hold up.","publishedAt":"2026-07-20T00:00:00.000Z","updatedAt":"2026-07-24T07:18:57.748Z","category":"DevOps"},{"title":"Diagnosing High Load Average on Linux","url":"https://www.devopsness.com/blog/fix-high-load-average","description":"Load average counts more than CPU demand, so a high number needs a diagnostic path before you reach for a fix.","publishedAt":"2026-07-20T00:00:00.000Z","updatedAt":"2026-07-24T07:18:54.812Z","category":"Linux"},{"title":"CircleCI Best Practices in 2026: Fast, Safe Pipelines","url":"https://www.devopsness.com/blog/circleci-best-practices-2026-07-19","description":"A production-focused CircleCI guide: orbs, reusable commands and executors, workflows with fan-in/fan-out, contexts and OIDC for secrets, layered caching, test splitting, approval jobs, and dynamic config — with copy-paste examples.","publishedAt":"2026-07-19T12:00:00.000Z","updatedAt":"2026-07-26T00:07:09.873Z","category":"DevOps"},{"title":"Fix \"Too Many Open Files\" on Linux (ulimit)","url":"https://www.devopsness.com/blog/fix-too-many-open-files","description":"When a process hits its file descriptor ceiling everything breaks at once; here is how to find the real limit and raise it correctly.","publishedAt":"2026-07-19T00:00:00.000Z","updatedAt":"2026-07-24T08:04:28.336Z","category":"Linux"},{"title":"Fix \"Address Already in Use\" on Linux (Port Conflicts)","url":"https://www.devopsness.com/blog/fix-address-already-in-use","description":"Track down what owns a busy port, decide whether to kill it or rebind, and stop TIME_WAIT from blocking your restart.","publishedAt":"2026-07-19T00:00:00.000Z","updatedAt":"2026-07-24T08:20:19.685Z","category":"Linux"},{"title":"Fix \"No Space Left on Device\" When df and du Disagree","url":"https://www.devopsness.com/blog/fix-disk-full-linux","description":"A field guide to reclaiming Linux disk space when df reports full but du can't find where the bytes actually went.","publishedAt":"2026-07-19T00:00:00.000Z","updatedAt":"2026-07-25T14:40:26.388Z","category":"Linux"},{"title":"Best LLM APIs and AI Infrastructure in 2026 — A Cost and Capability Map","url":"https://www.devopsness.com/blog/best-llm-apis-and-infra","description":"The LLM stack is a maze of APIs, GPU clouds, gateways, and serving tools. This is the map to what each layer is for and how to keep the bill sane.","publishedAt":"2026-07-18T00:00:00.000Z","updatedAt":"2026-07-24T07:18:48.711Z","category":"AI"},{"title":"Best Infrastructure-as-Code Tools in 2026 — Terraform, OpenTofu, Pulumi, and More","url":"https://www.devopsness.com/blog/best-iac-tools","description":"The IaC landscape fractured after the Terraform license change. This is the map to what each tool is actually best at, and how to choose without regret.","publishedAt":"2026-07-18T00:00:00.000Z","updatedAt":"2026-07-25T10:10:19.695Z","category":"DevOps"},{"title":"Best RAG Frameworks in 2026 — Compared","url":"https://www.devopsness.com/blog/best-rag-frameworks","description":"A practitioner comparison of the RAG frameworks worth using in 2026, from LlamaIndex and LangChain to Haystack, DSPy, and raw code.","publishedAt":"2026-07-17T00:00:00.000Z","updatedAt":"2026-07-24T07:18:49.537Z","category":"AI"},{"title":"Ollama vs vLLM — Which to Use for Serving LLMs","url":"https://www.devopsness.com/blog/ollama-vs-vllm","description":"Ollama gets a model running on your laptop in minutes; vLLM serves thousands of production requests. Here's when each one earns its place.","publishedAt":"2026-07-17T00:00:00.000Z","updatedAt":"2026-07-25T07:53:21.262Z","category":"AI"},{"title":"AI Gateway Comparison — Portkey, LiteLLM, Cloudflare, and More","url":"https://www.devopsness.com/blog/ai-gateway-comparison","description":"Once you call more than one LLM provider, a gateway saves you from reinventing routing, fallback, caching, and spend limits in every service.","publishedAt":"2026-07-17T00:00:00.000Z","updatedAt":"2026-07-26T01:05:28.401Z","category":"AI"},{"title":"Crossplane vs Terraform for Platform Teams","url":"https://www.devopsness.com/blog/crossplane-vs-terraform","description":"A practical comparison of Kubernetes-native continuous reconciliation against the classic CLI-driven, state-file IaC model for platform teams.","publishedAt":"2026-07-17T00:00:00.000Z","updatedAt":"2026-07-24T07:18:49.870Z","category":"DevOps"},{"title":"Terragrunt Explained — When You Actually Need It","url":"https://www.devopsness.com/blog/terragrunt-explained","description":"Terragrunt keeps large Terraform setups DRY and orchestrated, but small teams often pay its learning curve for little return.","publishedAt":"2026-07-17T00:00:00.000Z","updatedAt":"2026-07-24T21:03:39.059Z","category":"DevOps"},{"title":"Docker Error Troubleshooting — The Complete Guide","url":"https://www.devopsness.com/blog/docker-error-troubleshooting-guide","description":"Most Docker time is spent fighting the same handful of errors. This is the map: what each one means, the command that reveals the cause, and the fix.","publishedAt":"2026-07-16T00:00:00.000Z","updatedAt":"2026-07-24T07:18:41.987Z","category":"DevOps"},{"title":"Best CI/CD Platforms in 2026 — GitHub Actions, GitLab, Jenkins, and More","url":"https://www.devopsness.com/blog/best-cicd-platforms","description":"Every CI/CD platform claims to be fast and easy. The real differences are in pricing, self-hosting, and where each one falls apart at scale. This is the map.","publishedAt":"2026-07-16T00:00:00.000Z","updatedAt":"2026-07-25T18:31:30.367Z","category":"DevOps"},{"title":"Git Error Troubleshooting — The Complete Guide","url":"https://www.devopsness.com/blog/git-error-troubleshooting-guide","description":"Git's errors are scarier than the fixes. This is the map to the ones everyone hits: what each message means, the safe way out, and how to avoid losing work.","publishedAt":"2026-07-16T00:00:00.000Z","updatedAt":"2026-07-24T07:18:46.589Z","category":"DevOps"},{"title":"LLM API Pricing Compared — Cost per Million Tokens in 2026","url":"https://www.devopsness.com/blog/llm-api-pricing-comparison","description":"A practitioner's guide to how LLM API pricing works, how to estimate a workload's monthly bill, and the levers that actually cut it.","publishedAt":"2026-07-16T00:00:00.000Z","updatedAt":"2026-07-25T08:16:19.964Z","category":"AI"},{"title":"Best APM and Observability Tools in 2026 — Compared by Cost and Use Case","url":"https://www.devopsness.com/blog/best-apm-observability-tools","description":"The observability market is huge and the pricing is a minefield. This is the map to the tools that matter, what each is best at, and how to avoid a runaway bill.","publishedAt":"2026-07-16T00:00:00.000Z","updatedAt":"2026-07-24T07:54:24.516Z","category":"Cloud"},{"title":"Pulumi vs AWS CDK — Real-Code IaC Compared","url":"https://www.devopsness.com/blog/pulumi-vs-cdk","description":"Both Pulumi and AWS CDK let you define infrastructure in real programming languages, but they split hard on multi-cloud, state, and engine maturity.","publishedAt":"2026-07-16T00:00:00.000Z","updatedAt":"2026-07-25T08:00:14.431Z","category":"DevOps"},{"title":"Jenkins Pipeline Best Practices in 2026: Builds You Can Trust","url":"https://www.devopsness.com/blog/jenkins-pipeline-best-practices-2026-07-15","description":"A production-focused Jenkins guide: declarative pipelines, shared libraries, ephemeral agents on Kubernetes, scoped credentials, parallel stages, input approvals, post-block rollback and notifications, and Configuration as Code — with copy-paste examples.","publishedAt":"2026-07-15T12:00:00.000Z","updatedAt":"2026-07-24T07:55:45.795Z","category":"DevOps"},{"title":"Spacelift vs env0 vs Atlantis — IaC Automation Compared","url":"https://www.devopsness.com/blog/spacelift-vs-env0","description":"A practitioner comparison of Spacelift, env0, and Atlantis across hosting, policy, pricing, drift, and ephemeral environments to help you pick.","publishedAt":"2026-07-15T00:00:00.000Z","updatedAt":"2026-07-24T07:18:51.940Z","category":"DevOps"},{"title":"Drone vs Woodpecker CI — Lightweight Self-Hosted CI","url":"https://www.devopsness.com/blog/drone-vs-woodpecker","description":"Woodpecker forked Drone when the license changed. Here's how the two compare for small teams and homelabs that just want simple container-native CI.","publishedAt":"2026-07-15T00:00:00.000Z","updatedAt":"2026-07-25T16:24:05.962Z","category":"DevOps"},{"title":"Best LLM Observability Tools in 2026 — Langfuse, Helicone, Arize","url":"https://www.devopsness.com/blog/best-llm-observability-tools","description":"A practitioner's guide to tracing, cost tracking, and evaluating LLM apps in production with Langfuse, Helicone, Arize Phoenix, and LangSmith.","publishedAt":"2026-07-15T00:00:00.000Z","updatedAt":"2026-07-25T05:14:14.052Z","category":"AI"},{"title":"Cloud Cost Optimization — The Practical Guide for AWS, Azure, and GCP","url":"https://www.devopsness.com/blog/cloud-cost-optimization-guide","description":"Cloud bills grow quietly until someone asks why. This is the map for cutting spend without cutting reliability: where the money actually goes, the levers that work, and the tools worth paying for.","publishedAt":"2026-07-15T00:00:00.000Z","updatedAt":"2026-07-24T07:18:27.886Z","category":"Cloud"},{"title":"Git Detached HEAD — What It Is and How to Fix It","url":"https://www.devopsness.com/blog/fix-detached-head","description":"Git dropped you into \"detached HEAD\" and the commits you just made seem to have vanished. Here's what happened and how to get your work back.","publishedAt":"2026-07-15T00:00:00.000Z","updatedAt":"2026-07-24T07:18:42.833Z","category":"DevOps"},{"title":"Buildkite vs GitHub Actions — Hybrid CI Compared","url":"https://www.devopsness.com/blog/buildkite-vs-github-actions","description":"Buildkite runs the control plane and lets you own the compute; Actions keeps everything close to your repo. Here's how they actually differ once you scale.","publishedAt":"2026-07-15T00:00:00.000Z","updatedAt":"2026-07-24T07:18:35.292Z","category":"DevOps"},{"title":"Kubernetes Error Troubleshooting — The Complete Guide","url":"https://www.devopsness.com/blog/kubernetes-error-troubleshooting-guide","description":"Teams spend most of their Kubernetes time debugging, not building. This is the map to the errors that eat that time: what each one means, how to diagnose it fast, and the fix.","publishedAt":"2026-07-15T00:00:00.000Z","updatedAt":"2026-07-24T14:00:19.134Z","category":"DevOps"},{"title":"Remove a Large or Secret File From Git History","url":"https://www.devopsness.com/blog/remove-large-file-git-history","description":"Deleting a committed file only hides it from the latest commit. The blob still lives in history, and if it was a secret, it's already compromised.","publishedAt":"2026-07-14T00:00:00.000Z","updatedAt":"2026-07-25T08:16:19.621Z","category":"DevOps"},{"title":"Kubernetes Node NotReady — Diagnosis and Fix","url":"https://www.devopsness.com/blog/fix-nodenotready","description":"A node flips to NotReady and pods start disappearing. Here's the order we check things in, the usual culprits, and how to recover without making it worse.","publishedAt":"2026-07-14T00:00:00.000Z","updatedAt":"2026-07-24T07:18:30.115Z","category":"DevOps"},{"title":"Tekton vs Argo Workflows — Kubernetes-Native CI/CD","url":"https://www.devopsness.com/blog/tekton-vs-argo-workflows","description":"Both run pipelines as CRDs inside your cluster, but they were built for different jobs. Here's how Tekton and Argo Workflows actually differ in practice.","publishedAt":"2026-07-14T00:00:00.000Z","updatedAt":"2026-07-25T20:58:43.694Z","category":"DevOps"},{"title":"LangChain vs LlamaIndex — Which LLM Framework to Use","url":"https://www.devopsness.com/blog/langchain-vs-llamaindex","description":"LangChain orchestrates agents and integrations, LlamaIndex owns retrieval and RAG. Here's where they overlap, where they don't, and which to reach for.","publishedAt":"2026-07-14T00:00:00.000Z","updatedAt":"2026-07-24T07:18:50.509Z","category":"AI"},{"title":"Fixing \"Too Many Open Files\" in Kubernetes Containers","url":"https://www.devopsness.com/blog/fix-too-many-open-files-k8s","description":"A pod that logged fine for weeks starts throwing EMFILE at 3am. Here's how to tell a real file-descriptor leak from a limit that's just set too low.","publishedAt":"2026-07-14T00:00:00.000Z","updatedAt":"2026-07-24T07:18:31.825Z","category":"DevOps"},{"title":"How to Reduce Datadog Costs Without Losing Coverage","url":"https://www.devopsness.com/blog/how-to-reduce-datadog-costs","description":"Datadog bills climb quietly until finance forwards the invoice. Here's the playbook we run to cut spend hard while keeping every signal that matters.","publishedAt":"2026-07-14T00:00:00.000Z","updatedAt":"2026-07-24T07:18:39.551Z","category":"Cloud"},{"title":"Detecting and Rotating Leaked Cloud Credentials","url":"https://www.devopsness.com/blog/detecting-and-rotating-leaked-cloud-credentials","description":"Static keys leak. The question isn't if but how fast you notice and how clean your response runbook is when the pager goes off.","publishedAt":"2026-07-14T00:00:00.000Z","updatedAt":"2026-07-24T07:18:22.057Z","category":"Cloud"},{"title":"kubectl Commands for Debugging Any Pod","url":"https://www.devopsness.com/blog/kubectl-debugging-commands","description":"The ordered kubectl toolkit we reach for when a pod misbehaves, with the five commands we run first and what each one actually tells you.","publishedAt":"2026-07-14T00:00:00.000Z","updatedAt":"2026-07-24T07:18:32.735Z","category":"DevOps"},{"title":"Terraform Cloud Alternatives — Spacelift, env0, Atlantis, and More","url":"https://www.devopsness.com/blog/terraform-cloud-alternatives","description":"A practical look at Spacelift, env0, Atlantis, and Scalr for teams outgrowing HCP Terraform on price, policy, or OpenTofu support.","publishedAt":"2026-07-14T00:00:00.000Z","updatedAt":"2026-07-24T07:18:52.243Z","category":"DevOps"},{"title":"Production RAG Reliability — Making LLM Answers Trustworthy","url":"https://www.devopsness.com/blog/production-rag-reliability-trustworthy-llm-answers","description":"A demo RAG app is easy; one users trust is not. This is the map for reliable retrieval-augmented generation: grounding, evaluation, retrieval quality, guardrails, and safe rollout.","publishedAt":"2026-07-14T00:00:00.000Z","updatedAt":"2026-07-24T07:18:26.069Z","category":"AI"},{"title":"The Edge Computing Playbook — What to Run at the Edge (and What Not To)","url":"https://www.devopsness.com/blog/edge-computing-playbook-what-to-run-at-the-edge","description":"The edge is fast because it's constrained. This is the decision map for what belongs at the edge, what belongs at origin, and how compute, data, caching, and auth fit together.","publishedAt":"2026-07-14T00:00:00.000Z","updatedAt":"2026-07-25T16:35:22.160Z","category":"Cloud"},{"title":"Kubernetes Cost Tools — Kubecost vs OpenCost vs Cast AI","url":"https://www.devopsness.com/blog/kubernetes-cost-optimization-tools","description":"Your cloud bill says $80k. Your cluster says nothing about which team burned it. Here's how OpenCost, Kubecost, and Cast AI actually split that number.","publishedAt":"2026-07-14T00:00:00.000Z","updatedAt":"2026-07-24T07:18:33.072Z","category":"Cloud"},{"title":"Honeycomb vs Datadog — High-Cardinality Debugging Compared","url":"https://www.devopsness.com/blog/honeycomb-vs-datadog","description":"One tool is built to answer questions you didn't know you had. The other watches everything at once. Here is how they actually differ in practice.","publishedAt":"2026-07-14T00:00:00.000Z","updatedAt":"2026-07-24T07:18:39.241Z","category":"Cloud"},{"title":"Self-Hosted CI Runners — When They Save Money","url":"https://www.devopsness.com/blog/self-hosted-runners-cost","description":"Hosted runners bill by the minute, and that meter never stops. Here's the break-even math on running your own, plus the tradeoffs nobody warns you about.","publishedAt":"2026-07-13T00:00:00.000Z","updatedAt":"2026-07-24T07:18:41.201Z","category":"DevOps"},{"title":"Shadow Testing and Canary Releases for LLM Changes","url":"https://www.devopsness.com/blog/shadow-testing-and-canary-releases-for-llm-changes","description":"A prompt tweak or model bump can quietly wreck answers everywhere. Ship LLM changes the way you ship risky code: gate, shadow, canary, roll back.","publishedAt":"2026-07-13T00:00:00.000Z","updatedAt":"2026-07-24T07:18:26.894Z","category":"AI"},{"title":"GCP Committed Use vs Sustained Use Discounts","url":"https://www.devopsness.com/blog/gcp-committed-use-discounts","description":"GCP hands you one discount for free and sells you a deeper one. Here's how sustained and committed use actually stack, and how we size the commitment.","publishedAt":"2026-07-13T00:00:00.000Z","updatedAt":"2026-07-25T00:36:09.570Z","category":"Cloud"},{"title":"OpenTelemetry vs Vendor Agents — The Real Tradeoffs","url":"https://www.devopsness.com/blog/opentelemetry-vs-vendor-agents","description":"OTel promises no lock-in, vendor agents promise zero-config depth. Here is where each one actually earns its keep once you run it in production.","publishedAt":"2026-07-13T00:00:00.000Z","updatedAt":"2026-07-24T07:18:40.580Z","category":"Cloud"},{"title":"Catching AWS Cost Spikes Before the Invoice","url":"https://www.devopsness.com/blog/aws-cost-anomaly-detection","description":"The bill arrives three weeks late. By then the runaway logging pipeline has already burned $9,000. Here is how we catch spikes in hours, not weeks.","publishedAt":"2026-07-13T00:00:00.000Z","updatedAt":"2026-07-24T07:18:27.200Z","category":"Cloud"},{"title":"PersistentVolumeClaim Stuck Pending — How to Fix It","url":"https://www.devopsness.com/blog/fix-pvc-pending","description":"A PVC stuck in Pending means nothing on the cluster can hand it a volume. Here's how we read the events and get it bound fast.","publishedAt":"2026-07-13T00:00:00.000Z","updatedAt":"2026-07-25T08:36:44.117Z","category":"DevOps"},{"title":"GPU Cloud Comparison 2026 — RunPod, Lambda, CoreWeave, AWS","url":"https://www.devopsness.com/blog/gpu-cloud-comparison","description":"A practitioner's guide to picking a GPU cloud for training and inference, where hourly rates for the same H100 can differ by 3x.","publishedAt":"2026-07-13T00:00:00.000Z","updatedAt":"2026-07-25T12:24:48.454Z","category":"AI"},{"title":"Observability for Edge Functions — Logs, Traces, and Metrics","url":"https://www.devopsness.com/blog/observability-for-edge-functions-logs-traces-metrics","description":"Edge code runs in hundreds of PoPs, lives for milliseconds, and gives you no shell. Here's how we get logs, traces, and metrics out of it anyway.","publishedAt":"2026-07-13T00:00:00.000Z","updatedAt":"2026-07-24T07:18:24.885Z","category":"Cloud"},{"title":"SigNoz vs Datadog — The Open-Source APM Challenger","url":"https://www.devopsness.com/blog/signoz-vs-datadog","description":"Datadog does everything and bills you for all of it. SigNoz covers the core APM story on your own ClickHouse. Here's when the trade is worth it.","publishedAt":"2026-07-13T00:00:00.000Z","updatedAt":"2026-07-25T01:19:08.785Z","category":"Cloud"},{"title":"Fixing DNS Resolution Failures in Kubernetes","url":"https://www.devopsness.com/blog/fix-dns-resolution-k8s","description":"A pod can't reach a service by name, the app throws connection errors, and everyone blames the network. Usually it's DNS, and usually it's fixable.","publishedAt":"2026-07-13T00:00:00.000Z","updatedAt":"2026-07-25T00:22:31.357Z","category":"DevOps"},{"title":"Git Rebase vs Merge — When to Use Each","url":"https://www.devopsness.com/blog/git-rebase-vs-merge","description":"The rebase-vs-merge fight is mostly people talking past each other. Here's the rule we actually follow, and the one time it saved a release.","publishedAt":"2026-07-13T00:00:00.000Z","updatedAt":"2026-07-24T07:18:46.784Z","category":"DevOps"},{"title":"OIDC Federation Beyond GitHub — GitLab, Buildkite, and Generic Providers","url":"https://www.devopsness.com/blog/oidc-federation-beyond-github-gitlab-buildkite","description":"GitHub Actions OIDC gets all the attention, but GitLab, Buildkite, and CircleCI issue the same signed tokens. Here's how to trust them without opening a hole.","publishedAt":"2026-07-13T00:00:00.000Z","updatedAt":"2026-07-24T20:20:23.679Z","category":"DevOps"},{"title":"Ansible vs Terraform — Configuration vs Provisioning","url":"https://www.devopsness.com/blog/ansible-vs-terraform","description":"Terraform provisions infrastructure and Ansible configures machines, so pitting them against each other is the wrong question to ask.","publishedAt":"2026-07-13T00:00:00.000Z","updatedAt":"2026-07-24T07:18:48.121Z","category":"DevOps"},{"title":"Common Docker Compose Errors and How to Fix Them","url":"https://www.devopsness.com/blog/fix-docker-compose-errors","description":"The Compose failures that eat an afternoon are almost always the same six. Here's how to spot each one fast and the fix that actually sticks.","publishedAt":"2026-07-12T00:00:00.000Z","updatedAt":"2026-07-24T07:18:43.527Z","category":"DevOps"},{"title":"Fixing 502 and 504 Errors from Kubernetes Ingress","url":"https://www.devopsness.com/blog/fix-ingress-502-504","description":"A 502 from your ingress means no healthy backend to talk to. A 504 means the backend answered too slowly. Here's how to tell them apart and fix each.","publishedAt":"2026-07-12T00:00:00.000Z","updatedAt":"2026-07-24T07:18:29.919Z","category":"DevOps"},{"title":"Short-Lived Credentials — STS, Dynamic Secrets, and Why Static Keys Die","url":"https://www.devopsness.com/blog/short-lived-credentials-sts-dynamic-secrets","description":"Static keys leak and live forever. Short-lived credentials from STS and Vault expire on their own — here's the token-exchange machinery and the TTL math that make it work.","publishedAt":"2026-07-12T00:00:00.000Z","updatedAt":"2026-07-24T07:18:23.522Z","category":"Cloud"},{"title":"How to Cut Your AWS Bill by 40% — A Practical Checklist","url":"https://www.devopsness.com/blog/how-to-reduce-aws-bill","description":"A field-tested checklist for cutting an AWS bill, ordered by return on effort. Start with the free wins, end with the ones that need a meeting.","publishedAt":"2026-07-12T00:00:00.000Z","updatedAt":"2026-07-24T07:18:32.301Z","category":"Cloud"},{"title":".dockerignore Best Practices That Actually Matter","url":"https://www.devopsness.com/blog/dockerignore-best-practices","description":"A bloated build context slows every build, wrecks your cache, and quietly leaks secrets into images. Here's how to keep it lean.","publishedAt":"2026-07-12T00:00:00.000Z","updatedAt":"2026-07-24T07:18:42.188Z","category":"DevOps"},{"title":"Debugging RAG Retrieval — Why It Returns Garbage","url":"https://www.devopsness.com/blog/debugging-rag-retrieval-why-it-returns-garbage","description":"When RAG answers go sideways, the model usually isn't the problem. Here's the top-to-bottom checklist we run to find where retrieval actually breaks.","publishedAt":"2026-07-12T00:00:00.000Z","updatedAt":"2026-07-25T13:14:35.565Z","category":"AI"},{"title":"Debugging a Kubernetes Service That Won't Connect","url":"https://www.devopsness.com/blog/fix-service-not-reachable","description":"Your pods are running, your Service exists, and nothing can reach it. Here's the exact order we check things when a Kubernetes Service goes dark.","publishedAt":"2026-07-12T00:00:00.000Z","updatedAt":"2026-07-24T07:18:31.512Z","category":"DevOps"},{"title":"Best LLM APIs in 2026 — By Use Case","url":"https://www.devopsness.com/blog/best-llm-apis","description":"A practitioner's guide to picking the right LLM API for coding, long docs, cheap extraction, reasoning, vision, voice, and on-device work.","publishedAt":"2026-07-12T00:00:00.000Z","updatedAt":"2026-07-24T07:18:48.898Z","category":"AI"},{"title":"New Relic Alternatives Compared","url":"https://www.devopsness.com/blog/new-relic-alternatives","description":"New Relic's pricing swings and feature gaps push teams to shop around. Here's a field-tested look at seven alternatives, who each one fits, and how to move.","publishedAt":"2026-07-12T00:00:00.000Z","updatedAt":"2026-07-24T07:18:40.191Z","category":"Cloud"},{"title":"git revert vs reset vs restore — Which to Use","url":"https://www.devopsness.com/blog/git-revert-vs-reset","description":"Three Git commands that all \"undo\" things, and picking the wrong one on a shared branch is how you ruin a teammate's afternoon. Here's how to keep them straight.","publishedAt":"2026-07-12T00:00:00.000Z","updatedAt":"2026-07-25T01:11:58.507Z","category":"DevOps"},{"title":"GitHub Actions Pricing and Minute Optimization","url":"https://www.devopsness.com/blog/github-actions-pricing","description":"A team was burning 40,000 CI minutes a month and could not say why. Here is how GitHub Actions billing actually works and where the money leaks.","publishedAt":"2026-07-12T00:00:00.000Z","updatedAt":"2026-07-25T18:08:36.209Z","category":"DevOps"},{"title":"Terraform vs CloudFormation on AWS — Which to Use","url":"https://www.devopsness.com/blog/terraform-vs-cloudformation","description":"A practitioner's comparison of Terraform and CloudFormation on AWS covering state, drift, new-service lag, rollback, and where CDK fits.","publishedAt":"2026-07-12T00:00:00.000Z","updatedAt":"2026-07-24T07:18:52.441Z","category":"DevOps"},{"title":"Edge Auth — Validating JWTs Without Origin Round-Trips","url":"https://www.devopsness.com/blog/edge-auth-validating-jwts-without-origin-round-trips","description":"Verifying signed tokens at the edge with WebCrypto blocks bad traffic early and saves a full origin hop. Here's the pattern we ship, and the traps.","publishedAt":"2026-07-12T00:00:00.000Z","updatedAt":"2026-07-24T07:18:24.202Z","category":"Cloud"},{"title":"Running Production on Spot Instances Safely","url":"https://www.devopsness.com/blog/spot-instances-guide","description":"Spot cuts compute bills by 60-90%, but AWS can take the machine back in two minutes. Here's how we run real production on it without paging anyone.","publishedAt":"2026-07-12T00:00:00.000Z","updatedAt":"2026-07-24T07:18:34.278Z","category":"Cloud"},{"title":"Grafana vs Kibana — Which Dashboard Tool","url":"https://www.devopsness.com/blog/grafana-vs-kibana","description":"Grafana pulls metrics from anywhere, Kibana lives and dies with Elasticsearch. Here's how we pick between them without ending up running both by accident.","publishedAt":"2026-07-12T00:00:00.000Z","updatedAt":"2026-07-24T16:56:38.034Z","category":"Cloud"},{"title":"GitLab CI/CD Best Practices in 2026: Pipelines You Can Trust","url":"https://www.devopsness.com/blog/gitlab-cicd-best-practices-2026-07-11","description":"A production-focused GitLab CI/CD guide: include/extends templates, rules and workflow, needs DAGs, cache vs artifacts, protected environments, masked/protected variables and Vault, built-in security scanning, and review apps — with copy-paste examples.","publishedAt":"2026-07-11T12:00:00.000Z","updatedAt":"2026-07-24T09:59:32.209Z","category":"DevOps"},{"title":"Kubernetes Container Exit Codes Decoded","url":"https://www.devopsness.com/blog/kubernetes-exit-codes","description":"Every crash loop leaves a number behind. Learn to read exit codes straight from kubectl describe and know the fix before you open the logs.","publishedAt":"2026-07-11T00:00:00.000Z","updatedAt":"2026-07-24T07:18:33.454Z","category":"DevOps"},{"title":"Fixing Docker Build Cache — Slow Builds and Stale Layers","url":"https://www.devopsness.com/blog/fix-docker-build-cache","description":"Two failures wear the same face: builds that rebuild everything every time, and builds that hand you a stale image. Both trace back to how layer caching keys work.","publishedAt":"2026-07-11T00:00:00.000Z","updatedAt":"2026-07-24T07:18:43.194Z","category":"DevOps"},{"title":"mTLS for Service-to-Service Auth — Beyond API Keys","url":"https://www.devopsness.com/blog/mtls-service-to-service-auth-beyond-api-keys","description":"A shared API key between two internal services proves nothing about who is calling. mTLS makes every service present a cryptographic identity instead.","publishedAt":"2026-07-11T00:00:00.000Z","updatedAt":"2026-07-24T07:18:23.028Z","category":"Cloud"},{"title":"OpenAI vs Anthropic vs Gemini API — Cost and Quality Compared","url":"https://www.devopsness.com/blog/openai-vs-anthropic-vs-gemini-api","description":"A practitioner's guide to picking between the three frontier LLM APIs based on task, price, latency, and enterprise terms.","publishedAt":"2026-07-11T00:00:00.000Z","updatedAt":"2026-07-24T07:18:51.438Z","category":"AI"},{"title":"Datadog Pricing Explained (and How to Control It)","url":"https://www.devopsness.com/blog/datadog-pricing-explained","description":"Your Datadog bill didn't spike because you monitored more. It spiked because containers, custom metrics, and log volume all bill on axes you never think about.","publishedAt":"2026-07-11T00:00:00.000Z","updatedAt":"2026-07-24T07:18:36.232Z","category":"Cloud"},{"title":"GitLab CI vs Jenkins — Which for Enterprise","url":"https://www.devopsness.com/blog/gitlab-ci-vs-jenkins","description":"One bundles your whole toolchain, the other lets you build anything from parts. The right pick depends on how much glue you want to own.","publishedAt":"2026-07-11T00:00:00.000Z","updatedAt":"2026-07-24T07:18:38.613Z","category":"DevOps"},{"title":"Anycast and Geo-Routing — How Requests Reach the Nearest PoP","url":"https://www.devopsness.com/blog/anycast-and-geo-routing-nearest-pop","description":"A request leaving a laptop somehow lands on a server 20ms away. Here is what actually decides which point of presence answers.","publishedAt":"2026-07-11T00:00:00.000Z","updatedAt":"2026-07-25T19:01:12.051Z","category":"Cloud"},{"title":"Fixing CreateContainerConfigError in Kubernetes","url":"https://www.devopsness.com/blog/fix-createcontainerconfigerror","description":"A pod stuck in CreateContainerConfigError means kubelet can't build the container config, almost always a ConfigMap or Secret reference that doesn't line up.","publishedAt":"2026-07-11T00:00:00.000Z","updatedAt":"2026-07-24T07:18:28.612Z","category":"DevOps"},{"title":"Best FinOps and Cloud Cost Tools in 2026","url":"https://www.devopsness.com/blog/best-finops-tools","description":"A field guide to the FinOps tooling that actually earns its keep in 2026, from native dashboards to CloudZero and Cast AI, sorted by what you spend.","publishedAt":"2026-07-11T00:00:00.000Z","updatedAt":"2026-07-24T07:18:27.700Z","category":"Cloud"},{"title":"Cloud Egress Costs Explained (and How to Avoid Them)","url":"https://www.devopsness.com/blog/data-transfer-egress-costs","description":"Egress is the line item nobody sizes upfront and everyone regrets at month-end. Here's the taxonomy, the surprise bills, and what actually cuts it.","publishedAt":"2026-07-11T00:00:00.000Z","updatedAt":"2026-07-24T07:18:28.089Z","category":"Cloud"},{"title":"Fix \"fatal: not a git repository","url":"https://www.devopsness.com/blog/fix-git-not-a-repository","description":"Git says it can't find a repo where you're standing. Nine times out of ten it's the wrong directory, a missing .git, or an ownership check.","publishedAt":"2026-07-11T00:00:00.000Z","updatedAt":"2026-07-24T07:18:45.992Z","category":"DevOps"},{"title":"Fix \"Your Local Changes Would Be Overwritten","url":"https://www.devopsness.com/blog/fix-git-local-changes-overwritten","description":"Git refuses to switch branches or pull because uncommitted edits are in the way. Here's how to move them safely, and when it's fine to throw them out.","publishedAt":"2026-07-11T00:00:00.000Z","updatedAt":"2026-07-25T03:13:05.928Z","category":"DevOps"},{"title":"Terraform vs Pulumi — HCL vs Real Code","url":"https://www.devopsness.com/blog/terraform-vs-pulumi","description":"Terraform's declarative HCL and Pulumi's real programming languages solve the same problem in very different ways, and the right pick depends on your team.","publishedAt":"2026-07-11T00:00:00.000Z","updatedAt":"2026-07-24T07:18:52.947Z","category":"DevOps"},{"title":"8 Datadog Alternatives That Cut Your Bill","url":"https://www.devopsness.com/blog/datadog-alternatives","description":"Datadog's bill has a way of tripling the quarter you actually start using it. Here are eight alternatives we've run in production and what each one costs you.","publishedAt":"2026-07-11T00:00:00.000Z","updatedAt":"2026-07-24T07:18:35.909Z","category":"Cloud"},{"title":"Long Context vs RAG — When to Use Which","url":"https://www.devopsness.com/blog/long-context-vs-rag-when-to-use-which","description":"A million-token window doesn't retire your retrieval stack. Here's when to stuff the prompt, when to retrieve, and when to do both.","publishedAt":"2026-07-11T00:00:00.000Z","updatedAt":"2026-07-24T09:58:38.310Z","category":"AI"},{"title":"Fix Docker \"exec format error\" (Architecture Mismatch)","url":"https://www.devopsness.com/blog/fix-docker-exec-format-error","description":"The container starts, then dies with \"exec format error.\" Here's why the CPU architecture is wrong, how to confirm it, and how to build images that just run.","publishedAt":"2026-07-11T00:00:00.000Z","updatedAt":"2026-07-24T07:18:44.174Z","category":"DevOps"},{"title":"Fix Docker \"No Space Left on Device","url":"https://www.devopsness.com/blog/fix-docker-no-space-left","description":"Your build fails, your containers won't start, and df says the disk is full. Here's where Docker hides the gigabytes and how to get them back safely.","publishedAt":"2026-07-10T00:00:00.000Z","updatedAt":"2026-07-25T12:05:54.784Z","category":"DevOps"},{"title":"Kubernetes Workload Identity — Projected Tokens and OIDC to Cloud IAM","url":"https://www.devopsness.com/blog/kubernetes-workload-identity-projected-tokens-oidc","description":"How pods can talk to AWS, GCP, and Azure with no static keys — using audience-bound projected ServiceAccount tokens and the cluster OIDC issuer.","publishedAt":"2026-07-10T00:00:00.000Z","updatedAt":"2026-07-24T07:18:22.702Z","category":"DevOps"},{"title":"CircleCI vs GitHub Actions — Cost and Speed","url":"https://www.devopsness.com/blog/circleci-vs-github-actions","description":"We ran the same test suite on both platforms for a year. Here's where CircleCI earns its price, where GitHub Actions wins on simplicity, and what the bill actually looks like.","publishedAt":"2026-07-10T00:00:00.000Z","updatedAt":"2026-07-24T07:18:35.603Z","category":"DevOps"},{"title":"Fixing Evicted Pods and Node Pressure in Kubernetes","url":"https://www.devopsness.com/blog/fix-pod-evicted","description":"Evicted pods are the kubelet telling you a node ran out of something. Here's how to read the signal, stop the bleeding, and keep it from happening again.","publishedAt":"2026-07-10T00:00:00.000Z","updatedAt":"2026-07-24T07:18:30.640Z","category":"DevOps"},{"title":"Kubernetes FailedScheduling — Taints, Affinity, and Resources","url":"https://www.devopsness.com/blog/fix-failedscheduling","description":"A pod sits Pending and the scheduler quietly logs why it rejected every node. Learn to read that one line and fix the real cause instead of guessing.","publishedAt":"2026-07-10T00:00:00.000Z","updatedAt":"2026-07-24T07:18:29.268Z","category":"DevOps"},{"title":"Best Open-Source Observability Tools in 2026","url":"https://www.devopsness.com/blog/best-open-source-observability-tools","description":"A field guide to the OSS observability stack in 2026, sorted by pillar, with honest notes on where self-hosting pays off and where the ops burden bites.","publishedAt":"2026-07-10T00:00:00.000Z","updatedAt":"2026-07-25T01:02:26.390Z","category":"Cloud"},{"title":"Fix Git \"Updates Were Rejected\" on Push","url":"https://www.devopsness.com/blog/fix-git-push-rejected","description":"Your push bounces because the remote moved on without you. Here is how to catch up cleanly, when to rebase versus merge, and when a force-push is actually safe.","publishedAt":"2026-07-10T00:00:00.000Z","updatedAt":"2026-07-24T07:18:46.304Z","category":"DevOps"},{"title":"Terraform vs OpenTofu — Which to Choose After the License Change","url":"https://www.devopsness.com/blog/terraform-vs-opentofu","description":"HashiCorp relicensed Terraform and a community fork spun up overnight. Here's how OpenTofu actually differs and which one your team should run.","publishedAt":"2026-07-10T00:00:00.000Z","updatedAt":"2026-07-25T01:07:54.356Z","category":"DevOps"},{"title":"Cloudflare Durable Objects — Stateful Coordination at the Edge","url":"https://www.devopsness.com/blog/cloudflare-durable-objects-stateful-edge","description":"Edge functions run everywhere and remember nothing. Durable Objects give you one addressable, single-threaded instance with transactional storage — the missing source of truth.","publishedAt":"2026-07-10T00:00:00.000Z","updatedAt":"2026-07-24T07:18:24.009Z","category":"Cloud"},{"title":"Fix Docker Exit Code 137 (Container Killed / OOM)","url":"https://www.devopsness.com/blog/fix-docker-oom-137","description":"Exit 137 usually means the kernel shot your container for eating too much memory. Here's how to confirm the OOM kill and stop it happening again.","publishedAt":"2026-07-10T00:00:00.000Z","updatedAt":"2026-07-24T07:18:44.822Z","category":"DevOps"},{"title":"Reserved Instances vs Savings Plans vs Spot — Which and When","url":"https://www.devopsness.com/blog/reserved-instances-vs-savings-plans","description":"AWS gives you four ways to pay for compute and three of them cut the bill. Here is how to pick, and how to stack them without painting yourself into a corner.","publishedAt":"2026-07-10T00:00:00.000Z","updatedAt":"2026-07-25T03:25:12.806Z","category":"Cloud"},{"title":"Prompt Injection Defense for LLM Apps","url":"https://www.devopsness.com/blog/prompt-injection-defense-for-llm-apps","description":"Prompt injection is not a prompt bug, it is an architecture problem. Here is how we design LLM apps so a poisoned document cannot hijack them.","publishedAt":"2026-07-10T00:00:00.000Z","updatedAt":"2026-07-24T07:18:26.262Z","category":"AI"},{"title":"Prometheus vs Datadog — When Open Source Wins","url":"https://www.devopsness.com/blog/prometheus-vs-datadog","description":"The metrics stack you self-host is free software plus a real ops bill. Datadog hands you everything and mails you the invoice. Here's how we pick.","publishedAt":"2026-07-10T00:00:00.000Z","updatedAt":"2026-07-24T07:18:40.881Z","category":"Cloud"},{"title":"How to Fix OOMKilled (Exit Code 137) in Kubernetes","url":"https://www.devopsness.com/blog/fix-oomkilled","description":"A pod dies, restarts, dies again, and the events say OOMKilled. Here is what exit code 137 actually means and how to stop the loop for good.","publishedAt":"2026-07-09T00:00:00.000Z","updatedAt":"2026-07-25T03:08:56.962Z","category":"DevOps"},{"title":"Why Your Kubernetes Pod Is Stuck in Pending (and How to Fix It)","url":"https://www.devopsness.com/blog/fix-pod-pending","description":"A Pending pod means the scheduler couldn't place it or the node couldn't start it. Here's how to read the events and clear the eight causes we hit most.","publishedAt":"2026-07-09T00:00:00.000Z","updatedAt":"2026-07-24T07:18:30.861Z","category":"DevOps"},{"title":"Azure Workload Identity Federation Without Secrets","url":"https://www.devopsness.com/blog/azure-workload-identity-federation-without-secrets","description":"We ripped every client secret out of our CI pipelines by pointing Azure federated credentials at GitHub's OIDC issuer. Here's the exact setup and the claims that trip people up.","publishedAt":"2026-07-09T00:00:00.000Z","updatedAt":"2026-07-24T07:18:21.760Z","category":"Cloud"},{"title":"How to Undo the Last Git Commit (Every Case)","url":"https://www.devopsness.com/blog/git-undo-last-commit","description":"You committed too early, wrote a bad message, or included the wrong file. Here's the decision tree for undoing a Git commit safely, by what you actually want to keep.","publishedAt":"2026-07-09T00:00:00.000Z","updatedAt":"2026-07-25T15:26:47.202Z","category":"DevOps"},{"title":"New Relic vs Dynatrace — Pricing and Root-Cause Analysis","url":"https://www.devopsness.com/blog/new-relic-vs-dynatrace","description":"Both promise to find your slow query at 3am. One bills by data ingested, the other by host-hour. Here's how that shakes out in a real ops budget.","publishedAt":"2026-07-09T00:00:00.000Z","updatedAt":"2026-07-24T07:18:40.380Z","category":"Cloud"},{"title":"Jenkins vs GitHub Actions — Migrate or Stay","url":"https://www.devopsness.com/blog/jenkins-vs-github-actions","description":"We've run both in anger. Here's the honest breakdown of maintenance, cost, and flexibility, plus when Jenkins still earns its keep.","publishedAt":"2026-07-09T00:00:00.000Z","updatedAt":"2026-07-24T07:18:39.886Z","category":"DevOps"},{"title":"Datadog vs Grafana — Managed vs Self-Hosted Observability","url":"https://www.devopsness.com/blog/datadog-vs-grafana","description":"One vendor sends the invoice, the other sends the ops work. Here's how we pick between Datadog and the Grafana stack without regretting it later.","publishedAt":"2026-07-09T00:00:00.000Z","updatedAt":"2026-07-24T07:18:36.725Z","category":"Cloud"},{"title":"Fix Docker \"Port Is Already Allocated","url":"https://www.devopsness.com/blog/fix-docker-port-already-allocated","description":"You run docker run, and it refuses to bind port 8080. Something already owns that port. Here is how to find the holder and get your container up.","publishedAt":"2026-07-09T00:00:00.000Z","updatedAt":"2026-07-25T23:22:29.475Z","category":"DevOps"},{"title":"RAG Evaluation Metrics — Faithfulness and Context Precision","url":"https://www.devopsness.com/blog/rag-evaluation-metrics-faithfulness-and-context-precision","description":"A single answer-quality score hides where your RAG pipeline actually breaks. Split retrieval eval from generation eval and measure each one honestly.","publishedAt":"2026-07-09T00:00:00.000Z","updatedAt":"2026-07-25T06:21:26.599Z","category":"AI"},{"title":"S3 vs Azure Blob vs GCS — Object Storage Cost Comparison","url":"https://www.devopsness.com/blog/s3-vs-azure-blob-vs-gcs","description":"Three object stores, similar sticker prices, wildly different bills once retrieval and egress hit. Here is where the money actually goes.","publishedAt":"2026-07-09T00:00:00.000Z","updatedAt":"2026-07-24T07:18:34.081Z","category":"Cloud"},{"title":"Streaming SSR at the Edge — RSC and HTML Streaming","url":"https://www.devopsness.com/blog/streaming-ssr-at-the-edge-rsc-and-html-streaming","description":"Buffered SSR makes users wait for the slowest query before they see anything. Streaming from the edge flips that — send the shell now, fill the gaps as data lands.","publishedAt":"2026-07-09T00:00:00.000Z","updatedAt":"2026-07-24T07:18:25.205Z","category":"Cloud"},{"title":"Why Your Docker Container Exits Immediately (and How to Fix It)","url":"https://www.devopsness.com/blog/fix-docker-container-exits-immediately","description":"You run the container, check docker ps, and it's already gone. Nine times out of ten it's PID 1 doing its job. Here's how to read it.","publishedAt":"2026-07-09T00:00:00.000Z","updatedAt":"2026-07-25T21:14:37.122Z","category":"DevOps"},{"title":"GitHub Actions Best Practices in 2026: Workflows You Can Trust","url":"https://www.devopsness.com/blog/github-actions-best-practices-2026-07-08","description":"A production-focused GitHub Actions guide: reusable workflows, least-privilege permissions, keyless OIDC to the cloud, SHA-pinned actions, environments with approvals, concurrency-safe deploys, and CodeQL/Dependabot gates — with copy-paste examples.","publishedAt":"2026-07-08T12:00:00.000Z","updatedAt":"2026-07-24T08:03:02.336Z","category":"DevOps"},{"title":"GitHub Actions vs GitLab CI — Full Comparison","url":"https://www.devopsness.com/blog/github-actions-vs-gitlab-ci","description":"We've shipped production pipelines on both. Here's where GitHub Actions wins, where GitLab CI wins, and how to pick without regretting it in six months.","publishedAt":"2026-07-08T00:00:00.000Z","updatedAt":"2026-07-25T21:26:01.044Z","category":"DevOps"},{"title":"Fix \"Cannot Connect to the Docker Daemon","url":"https://www.devopsness.com/blog/fix-cannot-connect-docker-daemon","description":"The daemon error almost never means Docker is broken. Nine times out of ten it's a stopped service, a stale context, or a wrong env var. Here's the checklist.","publishedAt":"2026-07-08T00:00:00.000Z","updatedAt":"2026-07-24T07:18:42.504Z","category":"DevOps"},{"title":"Edge Runtime Limits — What You Can't Do at the Edge","url":"https://www.devopsness.com/blog/edge-runtime-limits-what-you-cant-do-at-the-edge","description":"Edge runtimes look like Node but aren't. Here's what actually breaks — CPU caps, no filesystem, no TCP sockets — and how we route around it.","publishedAt":"2026-07-08T00:00:00.000Z","updatedAt":"2026-07-24T07:18:24.692Z","category":"Cloud"},{"title":"How to Fix ImagePullBackOff and ErrImagePull","url":"https://www.devopsness.com/blog/fix-imagepullbackoff","description":"Your pod is stuck because the node can't pull the image. Here's how to read the events, find the real reason, and fix each one fast.","publishedAt":"2026-07-08T00:00:00.000Z","updatedAt":"2026-07-24T07:18:29.601Z","category":"DevOps"},{"title":"How to Fix CrashLoopBackOff in Kubernetes","url":"https://www.devopsness.com/blog/fix-crashloopbackoff","description":"CrashLoopBackOff means your container keeps dying on startup and Kubernetes keeps restarting it slower each time. Here's the diagnosis flow we actually use.","publishedAt":"2026-07-08T00:00:00.000Z","updatedAt":"2026-07-26T00:00:48.580Z","category":"DevOps"},{"title":"AWS vs Azure vs GCP Pricing in 2026 — Real Cost Comparison","url":"https://www.devopsness.com/blog/aws-vs-azure-vs-gcp-pricing","description":"The three big clouds are closer on list price than the sales decks suggest. Where they actually diverge is discounts, egress, and Windows licensing.","publishedAt":"2026-07-08T00:00:00.000Z","updatedAt":"2026-07-25T02:17:30.565Z","category":"Cloud"},{"title":"Hallucination Detection — Grounding and Citations for RAG","url":"https://www.devopsness.com/blog/hallucination-detection-grounding-and-citations","description":"A RAG system that invents facts erodes trust fast. Here is how we ground answers, force citations, and catch the fabrications before users do.","publishedAt":"2026-07-08T00:00:00.000Z","updatedAt":"2026-07-24T07:18:25.685Z","category":"AI"},{"title":"Datadog vs Dynatrace — Which APM for Enterprise Scale","url":"https://www.devopsness.com/blog/datadog-vs-dynatrace","description":"We ran both across a few hundred services. One wins on auto-instrumentation and root-cause, the other on breadth and time-to-first-dashboard. Here's the split.","publishedAt":"2026-07-08T00:00:00.000Z","updatedAt":"2026-07-24T07:18:36.535Z","category":"Cloud"},{"title":"How to Resolve Git Merge Conflicts Without Fear","url":"https://www.devopsness.com/blog/fix-git-merge-conflict","description":"A merge conflict isn't Git breaking. It's Git asking you a question it can't answer alone. Here's how to answer it calmly, every time.","publishedAt":"2026-07-08T00:00:00.000Z","updatedAt":"2026-07-25T23:12:45.519Z","category":"DevOps"},{"title":"Fix \"Permission Denied\" Connecting to the Docker Daemon","url":"https://www.devopsness.com/blog/fix-docker-permission-denied","description":"The daemon socket is owned by root, and your user isn't allowed to touch it. Here's the fix, and why the obvious one is a security smell.","publishedAt":"2026-07-08T00:00:00.000Z","updatedAt":"2026-07-24T11:10:26.886Z","category":"DevOps"},{"title":"Keyless Cloud Authentication — Ending Static Credentials Across AWS, GCP, and Azure","url":"https://www.devopsness.com/blog/keyless-cloud-authentication-ending-static-credentials","description":"Long-lived access keys are the root cause behind most cloud breaches. This is the complete map to keyless auth — how workload identity federation and OIDC replace static secrets everywhere, and where to start.","publishedAt":"2026-07-08T00:00:00.000Z","updatedAt":"2026-07-24T07:18:22.386Z","category":"Cloud"},{"title":"Datadog vs New Relic — Cost, Features, and When Each Wins","url":"https://www.devopsness.com/blog/datadog-vs-new-relic","description":"We've run both in production for years. Here's the honest split on pricing traps, tracing quality, and which one you actually want for your team size.","publishedAt":"2026-07-08T00:00:00.000Z","updatedAt":"2026-07-24T07:18:36.917Z","category":"Cloud"},{"title":"On-Call Without Burnout: Rotations, Runbooks, and Escalation","url":"https://www.devopsness.com/blog/on-call-without-burnout-rotations-runbooks","description":"Our best engineer quit citing on-call. We rebuilt the whole thing: saner rotations, runbooks that actually help at 3am, and escalation that doesn't punish asking for help.","publishedAt":"2026-07-07T00:00:00.000Z","updatedAt":"2026-07-24T07:18:16.898Z","category":"DevOps"},{"title":"Feature Flags for Safe Deploys: Decoupling Release From Deploy","url":"https://www.devopsness.com/blog/feature-flags-decoupling-release-from-deploy","description":"We used to ship code and turn it on in the same breath, so every deploy was a bet. Feature flags split those two events apart and made rollbacks a config toggle.","publishedAt":"2026-07-07T00:00:00.000Z","updatedAt":"2026-07-24T07:18:12.862Z","category":"DevOps"},{"title":"External Secrets Operator: One Secrets Workflow Across Clouds","url":"https://www.devopsness.com/blog/external-secrets-operator-across-clouds","description":"We ran secrets three different ways across AWS, GCP, and Vault. External Secrets Operator gave us one Kubernetes-native workflow. Here's the setup and the gotchas.","publishedAt":"2026-07-07T00:00:00.000Z","updatedAt":"2026-07-24T07:18:12.558Z","category":"Cloud"},{"title":"AWS Graviton Migration: What Broke and What We Saved","url":"https://www.devopsness.com/blog/aws-graviton-migration-what-broke-what-we-saved","description":"Moving our fleet from x86 to Graviton promised 20% savings. We got 31%, but only after fixing native dependencies, a broken base image, and one nasty perf regression.","publishedAt":"2026-07-07T00:00:00.000Z","updatedAt":"2026-07-24T07:18:09.871Z","category":"Cloud"},{"title":"Blameless Postmortems: The Template and Facilitation That Works","url":"https://www.devopsness.com/blog/blameless-postmortems-template-and-facilitation","description":"Our early postmortems quietly assigned blame and taught people to hide mistakes. Here's the template and the facilitation rules that finally made them honest and useful.","publishedAt":"2026-07-07T00:00:00.000Z","updatedAt":"2026-07-24T07:18:10.553Z","category":"DevOps"},{"title":"Error Budgets to Roadmap: Turning Reliability Into Prioritization","url":"https://www.devopsness.com/blog/error-budgets-to-roadmap-prioritization","description":"Reliability arguments used to be shouting matches between SRE and product. An error budget turned them into arithmetic. Here's how we made the number drive the roadmap.","publishedAt":"2026-07-06T00:00:00.000Z","updatedAt":"2026-07-24T07:18:12.368Z","category":"DevOps"},{"title":"Token Budgeting for Long-Context Prompts: What to Cut First","url":"https://www.devopsness.com/blog/token-budgeting-long-context-prompts","description":"A 180k-token context window is not a license to stuff everything in. Here's how we cut prompt size 60% without hurting answer quality, and what to trim first.","publishedAt":"2026-07-06T00:00:00.000Z","updatedAt":"2026-07-25T16:25:04.769Z","category":"AI"},{"title":"Four Signals That Matter: Choosing SLIs Users Actually Feel","url":"https://www.devopsness.com/blog/four-signals-choosing-slis-users-feel","description":"Most SLI dashboards track things nobody notices. Here's how we picked the handful of signals that map to real user pain, and dropped the vanity metrics.","publishedAt":"2026-07-06T00:00:00.000Z","updatedAt":"2026-07-24T07:18:13.351Z","category":"DevOps"},{"title":"Serverless Cold Starts: Measuring and Fixing Them on Lambda","url":"https://www.devopsness.com/blog/serverless-cold-starts-measuring-and-fixing-lambda","description":"A p99 that jumped to 3.4 seconds during traffic ramps turned out to be cold starts. Here's how we measured them properly and cut the tail, with real init timings.","publishedAt":"2026-07-06T00:00:00.000Z","updatedAt":"2026-07-24T07:18:18.471Z","category":"Cloud"},{"title":"Multi-Provider LLM Gateways: Routing, Fallback, and Cost Control","url":"https://www.devopsness.com/blog/multi-provider-llm-gateways-routing-fallback","description":"When our single LLM provider had a 40-minute outage, every AI feature went dark. A gateway with routing and fallback fixed that, and cut spend 30% as a bonus.","publishedAt":"2026-07-06T00:00:00.000Z","updatedAt":"2026-07-24T07:18:15.957Z","category":"AI"},{"title":"Choosing an Embedding Model: Dimensions, Cost, and MTEB Reality","url":"https://www.devopsness.com/blog/choosing-an-embedding-model-dimensions-cost-mteb","description":"The top model on the MTEB leaderboard made our search worse and our bill bigger. Here's how we actually picked an embedding model for a real RAG system.","publishedAt":"2026-07-05T00:00:00.000Z","updatedAt":"2026-07-24T07:18:11.045Z","category":"AI"},{"title":"Cloudflare R2 vs S3: Egress-Free Object Storage in Practice","url":"https://www.devopsness.com/blog/cloudflare-r2-vs-s3-egress-free-object-storage","description":"We moved 40 TB of user media off S3 and cut the bill by 70 percent, mostly by killing egress fees. Here's where R2 won and where we kept S3 anyway.","publishedAt":"2026-07-05T00:00:00.000Z","updatedAt":"2026-07-24T07:18:11.227Z","category":"Cloud"},{"title":"Multi-Region Failover with Route 53: Health Checks and Gotchas","url":"https://www.devopsness.com/blog/multi-region-failover-route-53-health-checks","description":"Our failover config looked perfect in the console and did nothing during a real outage. Here's the health-check design that actually flipped regions when it mattered.","publishedAt":"2026-07-05T00:00:00.000Z","updatedAt":"2026-07-24T07:18:16.265Z","category":"Cloud"},{"title":"Streaming LLM Responses: SSE, Backpressure, and Cancellation","url":"https://www.devopsness.com/blog/streaming-llm-responses-sse-backpressure","description":"Users hit stop, but our server kept paying for tokens for another 40 seconds. Here's how we wired real cancellation and backpressure into an SSE streaming endpoint.","publishedAt":"2026-07-05T00:00:00.000Z","updatedAt":"2026-07-26T00:57:29.266Z","category":"AI"},{"title":"GitHub Actions Reusable Workflows: DRY Pipelines at Org Scale","url":"https://www.devopsness.com/blog/github-actions-reusable-workflows-org-scale","description":"We had the same 180-line build workflow copy-pasted into 60 repos. Fixing one bug meant 60 PRs. Here's the reusable-workflow setup that made it one.","publishedAt":"2026-07-05T00:00:00.000Z","updatedAt":"2026-07-24T07:18:13.654Z","category":"DevOps"},{"title":"Kubernetes Ingress vs Gateway API: Migrating Without Downtime","url":"https://www.devopsness.com/blog/kubernetes-ingress-vs-gateway-api-migration","description":"We moved 40 services off the nginx Ingress controller onto Gateway API without a single dropped connection. Here's the routing overlap trick that made it boring.","publishedAt":"2026-07-04T00:00:00.000Z","updatedAt":"2026-07-24T07:18:14.756Z","category":"DevOps"},{"title":"NAT Gateway Costs: The Silent Line Item and How to Cut It","url":"https://www.devopsness.com/blog/nat-gateway-costs-cutting-the-silent-line-item","description":"A single NAT Gateway quietly billed us $2,900 in one month, mostly for data processing on traffic that never needed to leave the VPC. Here's how we found it and cut it.","publishedAt":"2026-07-04T00:00:00.000Z","updatedAt":"2026-07-24T07:18:16.450Z","category":"Cloud"},{"title":"Kustomize Overlays That Scale Across Environments","url":"https://www.devopsness.com/blog/kustomize-overlays-that-scale","description":"Our overlay tree grew to seven environments and started copy-pasting the same patch into each. Here's the component-based layout that stopped the drift.","publishedAt":"2026-07-04T00:00:00.000Z","updatedAt":"2026-07-24T07:18:14.954Z","category":"DevOps"},{"title":"Agent Memory: Short-Term, Long-Term, and When You Need Neither","url":"https://www.devopsness.com/blog/agent-memory-short-term-long-term","description":"Most agents that \"need memory\" actually need a smaller context window and a database. Here's how we cut a support agent's token bill by 60 percent by deleting memory.","publishedAt":"2026-07-04T00:00:00.000Z","updatedAt":"2026-07-24T07:18:08.953Z","category":"AI"},{"title":"Backstage Software Catalog: Getting Adoption Past the Demo","url":"https://www.devopsness.com/blog/backstage-software-catalog-adoption","description":"The Backstage demo always wows leadership. Then six months later the catalog has 400 stale entries and nobody trusts it. Here's what got ours to actually stick.","publishedAt":"2026-07-04T00:00:00.000Z","updatedAt":"2026-07-24T07:18:10.369Z","category":"Infrastructure"},{"title":"Guardrails for Production LLMs: Input and Output Filtering That Holds","url":"https://www.devopsness.com/blog/guardrails-for-production-llms-io-filtering","description":"A user got our support bot to recite its system prompt and then draft a refund it wasn't authorized to give. Two layers of guardrails, one on input, one on output, closed both holes.","publishedAt":"2026-07-03T00:00:00.000Z","updatedAt":"2026-07-25T18:56:51.830Z","category":"AI"},{"title":"Terraform Import at Scale: Bringing Legacy Infra Under Code","url":"https://www.devopsness.com/blog/terraform-import-at-scale-legacy-infra","description":"We inherited 200-odd AWS resources built by hand over four years, with no state file anywhere. Here's how import blocks and a generation workflow got them under Terraform without a rebuild.","publishedAt":"2026-07-03T00:00:00.000Z","updatedAt":"2026-07-24T07:18:19.692Z","category":"Infrastructure"},{"title":"Docker Compose in Production: When It Fits and When It Doesn't","url":"https://www.devopsness.com/blog/docker-compose-in-production-when-it-fits","description":"Everyone says Compose is for dev only. We ran it in production for two years on a single node and it was the right call, until the day it very much wasn't.","publishedAt":"2026-07-03T00:00:00.000Z","updatedAt":"2026-07-25T15:05:39.033Z","category":"DevOps"},{"title":"S3 Cost Traps: Storage Classes, Requests, and the Surprise Bill","url":"https://www.devopsness.com/blog/s3-cost-traps-storage-classes-requests","description":"Our S3 bill tripled in a month with no growth in stored data. The storage line was flat. The cost was in requests and a misconfigured lifecycle rule quietly shredding money.","publishedAt":"2026-07-03T00:00:00.000Z","updatedAt":"2026-07-24T07:18:17.967Z","category":"Cloud"},{"title":"SSH Hardening in 2026: Keys, Certificates, and Bastion Patterns","url":"https://www.devopsness.com/blog/ssh-hardening-2026-keys-certificates-bastion","description":"We had 140 engineers with 300 static public keys scattered across authorized_keys files nobody could audit. Moving to SSH certificates with short TTLs made access reviewable again.","publishedAt":"2026-07-03T00:00:00.000Z","updatedAt":"2026-07-24T07:18:18.771Z","category":"Linux"},{"title":"OIDC Federation for GitHub Actions to AWS: Killing Long-Lived Keys","url":"https://www.devopsness.com/blog/oidc-federation-github-actions-aws","description":"We rotated a leaked AWS access key that a workflow had committed to logs. Switching GitHub Actions to OIDC federation meant no static AWS keys exist to leak in the first place.","publishedAt":"2026-07-03T00:00:00.000Z","updatedAt":"2026-07-24T07:18:16.640Z","category":"Cloud"},{"title":"Linux TCP Tuning for High-Throughput Services","url":"https://www.devopsness.com/blog/linux-tcp-tuning-high-throughput-services","description":"Our proxy topped out at 40k connections while the CPU sat half-idle. The bottleneck was kernel defaults tuned for 2009, not the hardware.","publishedAt":"2026-07-02T00:00:00.000Z","updatedAt":"2026-07-24T07:18:15.262Z","category":"Linux"},{"title":"Reranking in RAG: When a Cross-Encoder Earns Its Latency","url":"https://www.devopsness.com/blog/reranking-in-rag-when-cross-encoder-earns-latency","description":"Our RAG answers kept citing the wrong paragraph even when the right one was retrieved. A cross-encoder reranker fixed relevance but added 180ms. Here's when that trade pays off.","publishedAt":"2026-07-02T00:00:00.000Z","updatedAt":"2026-07-24T07:18:17.787Z","category":"AI"},{"title":"Postgres Read Replicas: Routing Reads Without Stale-Data Bugs","url":"https://www.devopsness.com/blog/postgres-read-replicas-routing-reads","description":"Adding a read replica cut primary load 60%, then support tickets rolled in about users not seeing their own edits. Replication lag turned into a correctness bug we had to route around.","publishedAt":"2026-07-02T00:00:00.000Z","updatedAt":"2026-07-24T07:18:17.421Z","category":"Infrastructure"},{"title":"Distroless Docker Images: Smaller, Safer Production Containers","url":"https://www.devopsness.com/blog/distroless-docker-images-smaller-safer","description":"Our node image shipped 240 CVEs, most from OS packages we never called. Moving to distroless dropped the count to single digits and cut image size by 70%.","publishedAt":"2026-07-02T00:00:00.000Z","updatedAt":"2026-07-24T07:18:11.890Z","category":"DevOps"},{"title":"Zero-Trust Service-to-Service Auth with SPIFFE and SPIRE","url":"https://www.devopsness.com/blog/zero-trust-service-auth-spiffe-spire","description":"Static service tokens leaked into logs and never rotated. SPIFFE identities plus SPIRE-issued SVIDs gave us short-lived certs and killed the shared-secret sprawl.","publishedAt":"2026-07-02T00:00:00.000Z","updatedAt":"2026-07-24T07:18:21.570Z","category":"Cloud"},{"title":"Zero-Downtime Postgres Migrations: Expand-Contract in Practice","url":"https://www.devopsness.com/blog/zero-downtime-postgres-migrations-expand-contract","description":"A single ALTER TABLE took a lock and stalled every write for 40 seconds during peak traffic. Expand-contract is how we stopped shipping outages.","publishedAt":"2026-07-02T00:00:00.000Z","updatedAt":"2026-07-24T07:18:21.251Z","category":"Infrastructure"},{"title":"LLM Evals in CI: Catching Prompt Regressions Before They Ship","url":"https://www.devopsness.com/blog/llm-evals-in-ci-catching-prompt-regressions","description":"A prompt tweak that helped one case quietly broke twenty others. Here's the CI eval harness we built so that never ships silently again.","publishedAt":"2026-07-01T00:00:00.000Z","updatedAt":"2026-07-24T07:18:15.580Z","category":"AI"},{"title":"AWS IAM Roles Anywhere: Workloads Outside AWS Without Static Keys","url":"https://www.devopsness.com/blog/aws-iam-roles-anywhere-workloads-outside-aws","description":"We had long-lived AWS keys sitting in a datacenter we don't own. IAM Roles Anywhere let us delete every one of them. Here's the real setup.","publishedAt":"2026-07-01T00:00:00.000Z","updatedAt":"2026-07-24T07:18:10.060Z","category":"Cloud"},{"title":"Hunting Slow Queries with pg_stat_statements","url":"https://www.devopsness.com/blog/hunting-slow-queries-pg-stat-statements","description":"The dashboard said the database was fine. It wasn't. Here's how pg_stat_statements found the query eating 40% of our Postgres CPU.","publishedAt":"2026-07-01T00:00:00.000Z","updatedAt":"2026-07-24T07:18:14.267Z","category":"Infrastructure"},{"title":"Semantic Caching for LLM Apps: Cutting Cost on Repeated Queries","url":"https://www.devopsness.com/blog/semantic-caching-for-llm-apps","description":"Users kept asking the same questions in slightly different words, and we paid full price every time. Semantic caching cut our LLM bill by a third.","publishedAt":"2026-07-01T00:00:00.000Z","updatedAt":"2026-07-24T07:18:18.165Z","category":"AI"},{"title":"Multi-Arch Docker Builds with Buildx: One Image, Every Platform","url":"https://www.devopsness.com/blog/multi-arch-docker-builds-with-buildx","description":"Our M-series laptops built arm64, our CI built amd64, and prod pulled whichever tag won the race. Buildx and a manifest list ended the chaos.","publishedAt":"2026-07-01T00:00:00.000Z","updatedAt":"2026-07-25T09:05:52.794Z","category":"DevOps"},{"title":"Debugging Latency with eBPF: bpftrace One-Liners That Find It","url":"https://www.devopsness.com/blog/debugging-latency-with-ebpf-bpftrace","description":"When a service is slow and every dashboard looks green, bpftrace lets you watch the kernel directly. These one-liners found our tail latency.","publishedAt":"2026-07-01T00:00:00.000Z","updatedAt":"2026-07-24T08:10:48.750Z","category":"Linux"},{"title":"Hybrid Search for RAG: Combining BM25 and Vectors the Right Way","url":"https://www.devopsness.com/blog/hybrid-search-rag-bm25-and-vectors","description":"Pure vector search kept missing exact matches like error codes and CLI flags. Adding BM25 back and fusing the two lifted our retrieval recall by 11 points.","publishedAt":"2026-06-30T00:00:00.000Z","updatedAt":"2026-07-24T07:18:14.567Z","category":"AI"},{"title":"Time-Series Postgres: Declarative Partitioning in Practice","url":"https://www.devopsness.com/blog/time-series-postgres-declarative-partitioning","description":"A 900GB events table where every query scanned four years to read one day. Range partitioning by month cut our dashboard queries from 8s to under 200ms.","publishedAt":"2026-06-30T00:00:00.000Z","updatedAt":"2026-07-24T07:18:20.133Z","category":"Infrastructure"},{"title":"systemd Timers vs Cron: Migrating Scheduled Jobs the Right Way","url":"https://www.devopsness.com/blog/systemd-timers-vs-cron-migrating-jobs","description":"A cron job silently stopped running for three weeks and nobody knew until the backups were missing. systemd timers give you the logging and status cron never did.","publishedAt":"2026-06-30T00:00:00.000Z","updatedAt":"2026-07-24T07:18:19.393Z","category":"Linux"},{"title":"Flux vs Argo CD: Picking a GitOps Engine in 2026","url":"https://www.devopsness.com/blog/flux-vs-argo-cd-gitops-engine-2026","description":"After running both in production across a dozen clusters, here's where Flux and Argo CD actually differ and which one we'd reach for now.","publishedAt":"2026-06-30T00:00:00.000Z","updatedAt":"2026-07-24T07:46:09.871Z","category":"DevOps"},{"title":"Vercel Edge Middleware Patterns for Auth and A/B Testing","url":"https://www.devopsness.com/blog/vercel-edge-middleware-patterns-auth-ab-testing","description":"How we cut auth redirect latency to single-digit milliseconds and ran A/B tests without a flash of wrong content, using Vercel Edge Middleware.","publishedAt":"2026-06-30T00:00:00.000Z","updatedAt":"2026-07-25T14:39:00.123Z","category":"Cloud"},{"title":"Argo Rollouts: Canary Analysis That Auto-Aborts on Bad Metrics","url":"https://www.devopsness.com/blog/argo-rollouts-canary-analysis-auto-abort","description":"A bad deploy used to mean a pager at 2am and a manual rollback. Now Argo Rollouts watches the error rate and aborts the canary itself before anyone wakes up.","publishedAt":"2026-06-30T00:00:00.000Z","updatedAt":"2026-07-24T07:18:09.557Z","category":"DevOps"},{"title":"Argo CD ApplicationSets: Managing Many Clusters Without Copy-Paste","url":"https://www.devopsness.com/blog/argo-cd-applicationsets-many-clusters","description":"Twenty-three clusters, one app, and a folder of near-identical Application YAMLs that drifted constantly. ApplicationSets killed the copy-paste and the drift.","publishedAt":"2026-06-29T00:00:00.000Z","updatedAt":"2026-07-24T07:18:09.259Z","category":"DevOps"},{"title":"Postgres Index Bloat: Detecting and Fixing It Before It Hurts","url":"https://www.devopsness.com/blog/postgres-index-bloat-detecting-and-fixing","description":"A 40GB index on a 6GB table was the first sign. Queries were fine until they weren't. Here's how we found the bloat and cleared it with zero downtime.","publishedAt":"2026-06-29T00:00:00.000Z","updatedAt":"2026-07-24T07:18:17.236Z","category":"Infrastructure"},{"title":"Cloudflare Workers vs AWS Lambda@Edge: Where Each Wins","url":"https://www.devopsness.com/blog/cloudflare-workers-vs-lambda-at-edge","description":"We moved a rewrite-heavy request path off Lambda@Edge to Workers and cut p95 from 340ms to 41ms. Here's when that swap pays off and when it doesn't.","publishedAt":"2026-06-29T00:00:00.000Z","updatedAt":"2026-07-24T07:18:11.408Z","category":"Cloud"},{"title":"Turso vs Cloudflare D1: Choosing an Edge SQLite Database","url":"https://www.devopsness.com/blog/turso-vs-cloudflare-d1-edge-sqlite","description":"Both put SQLite near your users, but they solve replication and write latency very differently. We ran the same schema on both for a month and picked one.","publishedAt":"2026-06-29T00:00:00.000Z","updatedAt":"2026-07-25T00:40:28.811Z","category":"Cloud"},{"title":"RAG Chunking Strategies: Fixed, Semantic, and Recursive Compared","url":"https://www.devopsness.com/blog/rag-chunking-strategies-fixed-semantic-recursive","description":"Our support bot kept citing half a sentence and missing the answer that sat two lines below. The culprit wasn't the model, it was how we split the docs.","publishedAt":"2026-06-29T00:00:00.000Z","updatedAt":"2026-07-25T04:05:34.474Z","category":"AI"},{"title":"cgroup v2 Limits: What Actually Constrains Your Containers","url":"https://www.devopsness.com/blog/cgroup-v2-limits-what-constrains-containers","description":"A container with a 2-core limit was pegged at 100% CPU yet running slow. The throttling counter told the real story, and it wasn't the number we set.","publishedAt":"2026-06-29T00:00:00.000Z","updatedAt":"2026-07-25T11:57:09.369Z","category":"Linux"},{"title":"Cloud IAM Least-Privilege Without Breaking Everything","url":"https://www.devopsness.com/blog/cloud-iam-least-privilege-without-breakage","description":"Least privilege fails when it's a one-time audit that locks things down until something breaks, then gets reverted. The iterative, log-driven approach that tightens permissions safely — and the policies we stopped writing by hand.","publishedAt":"2026-06-28T00:00:00.000Z","updatedAt":"2026-07-24T07:18:05.652Z","category":"Cloud"}]}