<!DOCTYPE html><html lang="en"> <head><meta charset="utf-8"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><meta name="viewport" content="width=device-width"><meta name="generator" content="Astro v5.17.2"><title>telliott.me</title><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/katex.min.css" crossorigin="anonymous"><link rel="alternate" type="application/rss+xml" title="telliott.me | Blog RSS Feed" href="/rss.xml"><script>
    !function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="init capture register register_once register_for_session unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group identify setPersonProperties setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags resetGroups onFeatureFlags addFeatureFlagsHandler onSessionId getSurveys getActiveMatchingSurveys renderSurvey canRenderSurvey getNextSurveyStep".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
    posthog.init('phc_cJY1yrLb16VWhnGhVyIOPq1L4Aycm5XyxvfQ6Z7h6kQ', {
        api_host: 'https://us.i.posthog.com',
        defaults: '2026-01-30'
    })
</script><style>.social-links[data-astro-cid-pux6a34n]{display:inline;border-left:1px solid #ccc;padding-left:1rem}#themeToggle[data-astro-cid-oemx5le4]{border:0;background:none}.sun[data-astro-cid-oemx5le4]{fill:#000}.moon[data-astro-cid-oemx5le4],.dark .sun[data-astro-cid-oemx5le4]{fill:transparent}.dark .moon[data-astro-cid-oemx5le4]{fill:#fff}nav[data-astro-cid-3ef6ksr2]{display:grid;grid-template-columns:1fr auto 1fr;align-items:center}.nav-center[data-astro-cid-3ef6ksr2]{justify-self:center}.site-title[data-astro-cid-3ef6ksr2]{font-weight:700;font-size:1.25rem;text-decoration:none;color:inherit}.theme-toggle[data-astro-cid-3ef6ksr2]{justify-self:end}html{background-color:#f1f5f9;font-family:sans-serif}body{margin:0 auto;width:100%;line-height:1.5}header{width:100%;margin-left:0;margin-right:0;padding-right:1rem;padding-left:1rem;margin-bottom:2rem;border-bottom:1px solid #ccc;position:relative}.page-content{max-width:800px;margin:0 auto}*{box-sizing:border-box}h1{margin:1rem 0;font-size:2.5rem}footer{display:flex;gap:1rem;margin-top:2rem}.social-link{padding:.5rem 1rem;color:#fff;background-color:#4c1d95;text-decoration:none}html.dark{background-color:#1a1a1a;color:#fff}.dark .menu{background-color:#555;color:#fff}.dark .nav-links a:hover,.dark .nav-links a:focus{background-color:#444;color:#fff}.dark .nav-links{background-color:#1a1a1a;border-bottom-color:#555}.dark .nav-links a{color:#fff}.dark a{color:#ff9776}.dark .rss-link{color:#ff9776;border-color:#ff9776}.dark .rss-link:hover{background-color:#ff9776;color:#1a1a1a}.rss-link{display:inline-flex;align-items:center;gap:.5rem;color:#f60;text-decoration:none;font-weight:500;padding:.5rem 1rem;border:1px solid #ff6600;border-radius:4px;transition:all .2s ease}.rss-link:hover{background-color:#f60;color:#fff}.menu{background-color:#444;border:none;color:#fff;font-size:1.2rem;font-weight:700;padding:5px 10px}.nav-links{width:100%;display:none;margin:0;position:absolute;top:100%;left:0;background-color:#f1f5f9;z-index:10;border-bottom:1px solid #ccc}.nav-links a{display:block;text-align:center;padding:10px 0;text-decoration:none;font-size:1.2rem;font-weight:700;color:#0d0950}.nav-links a:hover,.nav-links a:focus{background-color:#d1d5db}:has(.menu[aria-expanded=true]) .nav-links{display:unset}@media screen and (min-width:636px){.nav-links{display:block;position:static;width:auto;background:none;z-index:auto}.nav-links a{display:inline-block;padding:15px 20px}.menu{display:none}}
.about-container[data-astro-cid-j7pv25f6]{max-width:800px;margin:0 auto;display:flex;flex-direction:column;gap:1.5rem}h1[data-astro-cid-j7pv25f6]{color:#333;font-size:2.5rem;margin-bottom:2rem}h2[data-astro-cid-j7pv25f6]{color:#444;font-size:1.8rem;margin-top:2rem;margin-bottom:1rem}.content[data-astro-cid-j7pv25f6]{background:#fff;padding:2rem;margin-bottom:1.5rem;border-radius:8px;box-shadow:0 2px 4px #0000001a}.content[data-astro-cid-j7pv25f6] h2[data-astro-cid-j7pv25f6]{margin-top:0}.content-inner[data-astro-cid-j7pv25f6]{display:flex;flex-direction:column-reverse;align-items:center;gap:1.5rem}.text[data-astro-cid-j7pv25f6]{flex:1}.profile-pic-wrapper[data-astro-cid-j7pv25f6]{flex-shrink:0;width:180px;height:180px;border-radius:50%;overflow:hidden}@media screen and (min-width:636px){.content-inner[data-astro-cid-j7pv25f6]{flex-direction:row;align-items:flex-start;gap:2rem}.profile-pic-wrapper[data-astro-cid-j7pv25f6]{width:220px;height:220px}}.profile-pic[data-astro-cid-j7pv25f6]{width:100%;height:100%;object-fit:cover;display:block}p[data-astro-cid-j7pv25f6]{line-height:1.6;color:#666;margin-bottom:1rem}ul[data-astro-cid-j7pv25f6]{list-style-type:none;padding:0}li[data-astro-cid-j7pv25f6]{padding:.5rem 0;color:#666}li[data-astro-cid-j7pv25f6]:before{content:"•";color:#333;display:inline-block;width:1em;margin-left:-1em}
</style></head> <body> <header data-astro-cid-3ef6ksr2> <nav data-astro-cid-3ef6ksr2> <a href="/" class="site-title" data-astro-cid-3ef6ksr2>telliott.me</a> <div class="nav-center" data-astro-cid-3ef6ksr2> <button aria-expanded="false" aria-controls="main-menu" class="menu">
Menu
</button> <div id="main-menu" class="nav-links" data-astro-cid-pux6a34n> <a href="/" data-astro-cid-pux6a34n>Blog</a> <a href="/podcasts/" data-astro-cid-pux6a34n>Podcasts</a> <a href="/talks/" data-astro-cid-pux6a34n>Talks</a> <div class="social-links" data-astro-cid-pux6a34n> <a href="https://github.com/theothertomelliott" data-astro-cid-pux6a34n>GitHub</a> <a href="https://bsky.app/profile/telliott.me" data-astro-cid-pux6a34n>Bluesky</a> <a href="https://www.linkedin.com/in/telliott1984/" data-astro-cid-pux6a34n>LinkedIn</a> </div> </div>  </div> <div class="theme-toggle" data-astro-cid-3ef6ksr2> <button id="themeToggle" aria-label="Toggle theme" data-astro-cid-oemx5le4> <svg aria-hidden="true" width="30px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" data-astro-cid-oemx5le4> <path class="sun" fill-rule="evenodd" d="M12 17.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11zm0 1.5a7 7 0 1 0 0-14 7 7 0 0 0 0 14zm12-7a.8.8 0 0 1-.8.8h-2.4a.8.8 0 0 1 0-1.6h2.4a.8.8 0 0 1 .8.8zM4 12a.8.8 0 0 1-.8.8H.8a.8.8 0 0 1 0-1.6h2.5a.8.8 0 0 1 .8.8zm16.5-8.5a.8.8 0 0 1 0 1l-1.8 1.8a.8.8 0 0 1-1-1l1.7-1.8a.8.8 0 0 1 1 0zM6.3 17.7a.8.8 0 0 1 0 1l-1.7 1.8a.8.8 0 1 1-1-1l1.7-1.8a.8.8 0 0 1 1 0zM12 0a.8.8 0 0 1 .8.8v2.5a.8.8 0 0 1-1.6 0V.8A.8.8 0 0 1 12 0zm0 20a.8.8 0 0 1 .8.8v2.4a.8.8 0 0 1-1.6 0v-2.4a.8.8 0 0 1 .8-.8zM3.5 3.5a.8.8 0 0 1 1 0l1.8 1.8a.8.8 0 1 1-1 1L3.5 4.6a.8.8 0 0 1 0-1zm14.2 14.2a.8.8 0 0 1 1 0l1.8 1.7a.8.8 0 0 1-1 1l-1.8-1.7a.8.8 0 0 1 0-1z" data-astro-cid-oemx5le4></path> <path class="moon" fill-rule="evenodd" d="M16.5 6A10.5 10.5 0 0 1 4.7 16.4 8.5 8.5 0 1 0 16.4 4.7l.1 1.3zm-1.7-2a9 9 0 0 1 .2 2 9 9 0 0 1-11 8.8 9.4 9.4 0 0 1-.8-.3c-.4 0-.8.3-.7.7a10 10 0 0 0 .3.8 10 10 0 0 0 9.2 6 10 10 0 0 0 4-19.2 9.7 9.7 0 0 0-.9-.3c-.3-.1-.7.3-.6.7a9 9 0 0 1 .3.8z" data-astro-cid-oemx5le4></path> </svg> </button>  <script>
  const theme = (() => {
    const localStorageTheme = localStorage?.getItem("theme") ?? '';
    if (['dark', 'light'].includes(localStorageTheme)) {
      return localStorageTheme;
    }
    if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
      return 'dark';
    }
      return 'light';
  })();

  if (theme === 'light') {
    document.documentElement.classList.remove('dark');
  } else {
    document.documentElement.classList.add('dark');
  }

  window.localStorage.setItem('theme', theme);

  const handleToggleClick = () => {
    const element = document.documentElement;
    element.classList.toggle("dark");

    const isDark = element.classList.contains("dark");
    localStorage.setItem("theme", isDark ? "dark" : "light");
  }

  document.getElementById("themeToggle")?.addEventListener("click", handleToggleClick);
</script> </div> </nav> </header>  <div class="page-content">  <div class="about-container" data-astro-cid-j7pv25f6> <div class="content" data-astro-cid-j7pv25f6> <div class="content-inner" data-astro-cid-j7pv25f6> <div class="text" data-astro-cid-j7pv25f6> <p data-astro-cid-j7pv25f6>
Great to meet you! I'm Tom Elliott, a software developer and sometime public speaker based in New York.
</p> <p data-astro-cid-j7pv25f6>
Since joining the industry in 2007, I've had the good fortune to work in a number of different areas,
                including enterprise VDI, VPN clients, mobile apps and SaaS applications.
</p> <p data-astro-cid-j7pv25f6>
In recent years, I've found my niche and passion in DevOps. My writings in this area since 2024 can be found below.
</p> </div> <div class="profile-pic-wrapper" data-astro-cid-j7pv25f6> <img src="/profile-pic.jpg" alt="Tom Elliott" class="profile-pic" width="220" height="220" data-astro-cid-j7pv25f6> </div> </div> <a href="/rss.xml" class="rss-link" data-astro-cid-j7pv25f6>
Subscribe via RSS
</a> </div> </div> <div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>April 2026</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/pipelines-the-forgotten-slo/">Pipelines: The Forgotten SLO</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>March 2026</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/why-merge-queues/">Why merge queues?</a></li><li><a href="/posts/how-friendly-are-your-rate-limits/">How friendly are your rate limits?</a></li><li><a href="/posts/tech-interviewing-will-always-be-broken/">Tech interviewing will always be broken</a></li><li><a href="/posts/how-much-code-should-you-review/">How much code *should* you review?</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>February 2026</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/approving-deployments-with-github-actions/">Approving deployments with GitHub Actions</a></li><li><a href="/posts/rehousing-my-blog/">Rehousing my blog</a></li><li><a href="/posts/is-github-getting-less-reliable/">Is GitHub getting less reliable?</a></li><li><a href="/posts/plur1bus-accidental-ai-allegory/">Plur1bus: accidental AI allegory</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>January 2026</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/yes-you-should-still-learn-to-code/">Yes, you should still learn to code</a></li><li><a href="/posts/we-wont-need-ci-in-5-years/">We won&#39;t need CI in 5 years</a></li><li><a href="/posts/can-git-back-a-rest-api-part-5-conclusions/">Can Git back a REST API? (part 5 - conclusions!)</a></li><li><a href="/posts/can-git-back-a-rest-api-part-4-stability/">Can Git back a REST API? (part 4 - stability)</a></li><li><a href="/posts/winding-down-ocuroot/">Winding Down Ocuroot</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>December 2025</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/looking-below-the-surface-of-git/">Looking below the surface of Git - what the heck is a tree?</a></li><li><a href="/posts/can-git-back-a-rest-api-part-3-concurrency/">Can Git back a REST API? (part 3 - concurrency)</a></li><li><a href="/posts/can-git-back-a-rest-api-part-2-git/">Can Git back a REST API? (Part 2 - git protocols)</a></li><li><a href="/posts/can-git-back-a-rest-api-part-1-the/">Can Git back a REST API? (Part 1 - the naive approach)</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>November 2025</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/iac-bootstrap-problem/">Navigating the IaC Bootstrap Problem</a></li><li><a href="/posts/whats-with-all-these-cloud-outages/">What&#39;s with all these cloud outages?</a></li><li><a href="/posts/things-i-learned-about-git/">Three things I&#39;ve learned about Git while building a CI/CD tool</a></li><li><a href="/posts/a-shallow-introduction-to-queueing/">A Shallow Introduction to Queueing Theory</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>October 2025</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/big-terraform-modules/">How Big Terraform Modules Slow You Down</a></li><li><a href="/posts/demystifying-the-postmortem-from/">Demystifying the postmortem from Monday&#39;s AWS outage</a></li><li><a href="/posts/how-parallelizing-your-builds-can/">How parallelizing your builds can slow them down</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>September 2025</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/coding-on-the-subway-with-ona-formerly/">Coding on the subway with Ona (formerly GitPod)</a></li><li><a href="/posts/my-struggles-with-gatekeeper-errors/">My struggles with Gatekeeper errors and Homebrew - and a solution!</a></li><li><a href="/posts/rebuilding-ocuroot-com/">Rebuilding ocuroot.com with Go and Ocuroot!</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>August 2025</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/a-minimal-static-site-with-cloudflare/">A minimal static site with Cloudflare Workers</a></li><li><a href="/posts/why-i-use-tilt-but-not-local-kubernetes/">Why I use Tilt, but not local Kubernetes</a></li><li><a href="/posts/3-things-i-recently-learned-about/">3 things I recently learned about bash</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>July 2025</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/debugging-ci-workflows-fake-ci-server/">Debugging CI Workflows with a Fake CI Server</a></li><li><a href="/posts/experimenting-with-floxs-new-build/">Experimenting with Flox&#39;s new build and publish</a></li><li><a href="/posts/back-to-basics-e2e-tests-in-bash/">Back to basics: why I&#39;m writing end to end tests in bash</a></li><li><a href="/posts/a-year-of-the-friday-deploy/">A Year of the Friday Deploy!</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>June 2025</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/best-practices-arent-always-best/">&quot;Best practices&quot; aren&#39;t always best for you</a></li><li><a href="/posts/ai-cant-handle-your-legacy-codebase/">AI can&#39;t handle your legacy codebase? This might be why.</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>May 2025</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/revisiting-jenkins-after-over-a-decade/">Revisiting Jenkins after over a decade</a></li><li><a href="/posts/forget-no-code-im-going-all-code/">Forget no code, I&#39;m going *all* code</a></li><li><a href="/posts/why-would-i-need-more-environments/">Why would I need more production environments, anyway?</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>April 2025</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/when-incident-heroics-are-too-heroic/">When incident heroics are too heroic: the &quot;bigger problems&quot; limit</a></li><li><a href="/posts/how-much-does-domain-knowledge-matter/">How much does domain knowledge matter when using AI tools?</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>March 2025</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/zero-access-debugging/">Zero-access debugging</a></li><li><a href="/posts/local-testing-missing-piece/">Local testing: the missing piece for rapid development cycles in CI/CD</a></li><li><a href="/posts/my-6-months-with-the-goth-stack-building/">My 6 months with the GoTH stack: building front-ends with Go, HTML and a little duct tape</a></li><li><a href="/posts/the-importance-of-a-good-commit-message/">The importance of a good commit message</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>February 2025</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/in-defence-of-deployment-freezes/">In defence of deployment freezes</a></li><li><a href="/posts/cicd-pipelines-when-to-ask-human/">CI/CD pipelines: when to ask human permission</a></li><li><a href="/posts/how-you-yes-you-can-deploy-to-production/">How you, yes you, can deploy to production hundreds of times a day</a></li><li><a href="/posts/note-to-future-self-use-trunk-based/">Note to future self: use trunk-based development</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>January 2025</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/why-im-not-using-feature-flagsyet/">Why I&#39;m not using feature flags...yet</a></li><li><a href="/posts/the-importance-of-locale-knowledge/">The Importance of Locale Knowledge: Or my story of breaking software in Turkey</a></li><li><a href="/posts/less-is-more-with-opentelemetry-spans/">Less is more with OpenTelemetry spans</a></li><li><a href="/posts/its-never-too-early-to-use-distributed/">It&#39;s never too early to use distributed tracing</a></li><li><a href="/posts/how-many-environments-do-you-need/">How many environments do you need?</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>December 2024</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/the-importance-of-secrets-in-cicd/">The Importance of Secrets in CI/CD</a></li><li><a href="/posts/measuring-freshness-with-synthetics/">Measuring Freshness with Synthetics</a></li><li><a href="/posts/four-concepts-in-every-cicd-pipeline/">Four concepts you see in every CI/CD pipeline</a></li><li><a href="/posts/build-a-website-with-an-ai-assistant/">Build a website with an AI assistant in 10 minutes!</a></li><li><a href="/posts/you-cant-get-mono-from-using-a-monorepo/">You can&#39;t get mono from using a monorepo</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>November 2024</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/load-testing-prepare-for-the-growth/">Load testing: Prepare for the growth you dream of!</a></li><li><a href="/posts/the-horrors-of-flaky-tests/">How to handle flaky tests</a></li><li><a href="/posts/how-to-fix-domain-restricted-sharing/">How to fix Domain Restricted Sharing errors for Google Cloud Run</a></li><li><a href="/posts/devops-sre-platform-engineering-is/">DevOps, SRE, Platform Engineering: is there a name that covers them all? Let&#39;s discuss!</a></li><li><a href="/posts/building-an-internal-support-team/">Building an internal support team that your engineers will love</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>October 2024</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/why-i-prefer-running-internal-support/">Why I prefer running internal support in Slack</a></li><li><a href="/posts/the-pitfalls-of-cost-saving-projects/">The pitfalls of cost saving projects</a></li><li><a href="/posts/is-your-blameless-culture-really/">Is your &quot;blameless&quot; culture really blameless?</a></li><li><a href="/posts/ai-is-transforming-devops-will-you/">AI is transforming DevOps: Will you be ready?</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>September 2024</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/why-you-shouldnt-call-your-platform/">Why you shouldn&#39;t call your Platform Engineers the &quot;Platform Team&quot;</a></li><li><a href="/posts/can-you-use-github-actions-for-monitoring/">Can you use GitHub Actions for Monitoring?</a></li><li><a href="/posts/my-quest-for-per-environment-terraform/">My quest for per-environment Terraform state</a></li><li><a href="/posts/shifting-left-not-just-for-security/">Shifting left: not just for security!</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>August 2024</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/climbing-the-testing-pyramid-from/">Climbing the testing pyramid: from unit to acceptance</a></li><li><a href="/posts/chasing-zero-downtime-with-rolling/">Chasing Zero Downtime with Rolling Deployments</a></li><li><a href="/posts/database-migrations-when-rollback/">Database migrations: When rollback isn&#39;t an option</a></li><li><a href="/posts/undoing-bad-changes-revert-redeploy/">Undoing bad changes: Revert, Redeploy, Rollback</a></li><li><a href="/posts/release-with-reduced-risk-canary/">Release with Reduced Risk: Canary and Blue-Green Strategies</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>July 2024</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/reflections-on-the-crowdstrike-outage/">Reflections on the Crowdstrike Outage</a></li><li><a href="/posts/ci-and-cd-are-the-same-thing-right/">CI and CD are the same thing? Right?</a></li><li><a href="/posts/why-test-manually-our-ci-pipelines/">Why Test Manually? Our CI Pipelines do the testing</a></li><li><a href="/posts/break-glass-in-case-of-emergency/">Break Glass in Case of Emergency</a></li> </ul> </div><div data-astro-cid-j7pv25f6> <h3 data-astro-cid-j7pv25f6>June 2024</h3> <ul data-astro-cid-j7pv25f6> <li><a href="/posts/a-12-year-journey-with-cicd/">A 12 Year Journey with CI/CD</a></li> </ul> </div> </div>  <script type="module">const e=document.querySelector(".menu");e?.addEventListener("click",()=>{const t=e.getAttribute("aria-expanded")==="true";e.setAttribute("aria-expanded",`${!t}`)});</script> </body> </html> 