<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[operational-sympathy - Medium]]></title>
        <description><![CDATA[This publication discusses topics on operational sympathy as applicable to software architecture, design, implementation and operations. - Medium]]></description>
        <link>https://medium.com/operational-sympathy?source=rss----8e7fbff1207e---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>operational-sympathy - Medium</title>
            <link>https://medium.com/operational-sympathy?source=rss----8e7fbff1207e---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 20 May 2026 19:34:27 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/operational-sympathy" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[What Artemis II Recovery Taught Me About Changes in Production]]></title>
            <link>https://medium.com/operational-sympathy/what-artemis-ii-recovery-taught-me-about-changes-in-production-a52a6a147e78?source=rss----8e7fbff1207e---4</link>
            <guid isPermaLink="false">https://medium.com/p/a52a6a147e78</guid>
            <category><![CDATA[sre-practice]]></category>
            <category><![CDATA[site-reliability-engineer]]></category>
            <category><![CDATA[production-system]]></category>
            <dc:creator><![CDATA[Suranga Nisiwasala]]></dc:creator>
            <pubDate>Fri, 17 Apr 2026 04:41:56 GMT</pubDate>
            <atom:updated>2026-04-17T04:41:57.227Z</atom:updated>
            <content:encoded><![CDATA[<p><em>The Pacific Ocean is a great place to run your SRE playbook.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*v_MP_-VLjhZBEfFcbyqTsQ.png" /></figure><p>Last Saturday I watched NASA’s Artemis II splashdown live — four astronauts returning from a 10-day mission around the Moon, splashing down in the Pacific Ocean off the coast of San Diego.</p><p>I wasn’t watching it as an SRE. I was just watching it like everyone else.</p><p>But from the moment the parachutes deployed, something kept pulling at me. A rhythm. A sequence. Every step waited for the previous one to complete. Nobody rushed. Nobody skipped. And yet none of it felt slow — it felt <em>precise</em>.</p><p>Then came the moment that made everything click. Four helicopters landed on the flight deck. Rotors still spinning. One rotor stopped. Then another. Then another. Then the last. Only after every rotor had fully stopped did the astronauts begin to step off.</p><p>And I thought: <em>that’s exactly how we do production changes.</em></p><p>I went back and watched the key moments again, looking for more of what I’d noticed. I saw it everywhere — in exactly the same order we run a production maintenance window.</p><p>NASA wasn’t just “landing astronauts” — they were executing a zero-failure, high-risk production release. Here’s what I took from it.</p><h3>1. Shipping With a Known Issue Is Sometimes the Right Call</h3><p>Before re-entry, everyone knew: Orion’s heat shield had documented design flaws from the uncrewed Artemis I mission. NASA didn’t ground the mission. Instead, they modified the re-entry trajectory to reduce exposure time to extreme temperatures — cutting the highest-heat phase from 20 minutes to 13.5 minutes.</p><p>This is not recklessness. This is calculated risk mitigation.</p><p>In production, we face this constantly. A release has a known non-critical bug. A dependency has a memory leak under heavy load. The system isn’t perfect, but the window is open, the rollback is tested, and the blast radius is understood.</p><p><strong>You don’t always wait for perfection. You reduce the exposure surface, document the known risk, and proceed with eyes wide open. What you never do is pretend the flaw doesn’t exist.</strong></p><h3>2. Prepare Around the Risk — Everything in Place Before the Critical Phase</h3><p>The crew hadn’t been waiting before re-entry. They’d been preparing. Procedures reviewed line by line. Equipment stowed. Suits checked for leaks. Weather briefed. Recovery force confirmed.</p><p>Meanwhile, the USS John P. Murtha, the recovery ship had left port days before splashdown. The recovery team was already on site and waiting. Nobody scrambled when Orion hit the water. The response capability was pre-staged.</p><p>In SRE, this is your maintenance window brief. That means:</p><ul><li>Runbook reviewed and validated before the change window opens</li><li>Rollback steps tested, not just written</li><li>On-call engineer confirmed available — not just “reachable”</li><li>Monitoring dashboards open and baselined before the first command runs</li></ul><p><strong>The change doesn’t start when you run the first command. It starts when you begin preparing for what happens if something goes wrong.</strong></p><h3>3. Each Stage Creates the Conditions for the Next</h3><p>Orion wasn’t slowed by one big parachute. Small drogue chutes deployed first to stabilise the capsule and bleed off speed. Only after they had done their job were the three main parachutes released, slowing the capsule to 20 mph at splashdown.</p><p>Why not open the big ones from the start? Because at that speed, they would have torn apart. The drogues don’t complete the job — they create the conditions under which the next step is survivable.</p><p>In production, you don’t take down a chunk of your fleet at once. You drain one node — removing it from the load balancer, letting in-flight requests complete, bringing it to a quiet state. Apply the change, confirm it’s healthy, move to the next.</p><p><strong>Each stage isn’t a precaution layered on top. It’s what makes the next stage possible at all.</strong></p><h3>4. Check for Fumes First — In Production, That’s Your Baseline</h3><p>Before anyone approached the Orion capsule, recovery teams swept with air quality sensors — checking specifically for hydrazine propellant and ammonia coolant from the reaction control system. These were known hazards from the capsule’s design. They weren’t doing a routine scan hoping everything was fine — they were verifying a specific, documented risk before anyone got close.</p><p>If they had skipped that check and a diver got sick, they’d have no way to know whether the fumes were already leaking or whether approaching the capsule disturbed something. The check isn’t just about protecting the divers — it’s about knowing whether the capsule was already leaking before anyone touched it. That’s attribution.</p><p>In production, this is why you run your test suite and review your observability dashboards before the change window opens. Not to look for problems — but to know what normal looks like. If something goes wrong after the change, you need to answer one question with confidence: was this caused by the change, or was it already there?</p><p><strong>You can only answer that question if you captured a clean baseline first. A change made without a baseline is a change you can’t fully explain afterward.</strong></p><h3>5. The Medics Went In First. The Astronauts Came Out Second.</h3><p>When the hatch opened, medical officers entered the capsule first to assess the astronauts. The crew only began exiting after the medical team had evaluated them and cleared each person.</p><p>They didn’t pop the hatch and wave everyone out. They sent in observers with expertise, got a status report, and then began the extraction.</p><p>In production, your observability team — or your synthetic testing suite — is that medical team. The change has been applied. But the maintenance window isn’t over yet. Before you cut traffic to the new version, before you close the maintenance window, before you hand back to users:</p><ul><li>Run your smoke tests</li><li>Check your synthetic transactions</li><li>Get a human eye on the key dashboards</li></ul><p><strong>You open the hatch only after someone with expertise has looked inside and confirmed it’s safe.</strong></p><h3>6. All Helicopters Land. Rotors Stop One by One. Then Offboarding Begins.</h3><p>This was the detail that stopped me completely.</p><p>After each hoist, the helicopter didn’t immediately fly to the ship. It moved to a holding position and waited. Only once all four astronauts were collected did both helicopters fly to the ship together. All four landed on the flight deck — rotors still running. Then, one by one, each rotor stopped. Only after every helicopter had landed and every rotor had fully stopped did the crew begin to step off.</p><p>They didn’t start extracting astronaut #1 the moment the first chopper touched down. They waited for the full system to reach a stable state first.</p><p>This is distributed systems consensus applied to physical recovery operations.</p><p>In a rolling deployment, this is the mistake we see constantly: the first replica is healthy, so the team relaxes. Traffic starts shifting. Someone declares it a success while three other replicas are still deploying.</p><p>Partial commitment is the most dangerous state in any system. Your rollout isn’t healthy when the first pod is healthy. It’s healthy when all pods are healthy, traffic has fully shifted, and your error rate has held steady for a meaningful observation window.</p><p><strong>Wait for all rotors to stop before anyone steps off.</strong></p><h3>7. Even Experienced Astronauts Follow the Checklist</h3><p>Christina Koch has spent nearly a year in space. Victor Glover is a decorated Navy test pilot. Reid Wiseman served as Chief of the NASA Astronaut Office. Jeremy Hansen is a Royal Canadian Air Force fighter pilot. These are not people who need to be told how a recovery operation works.</p><p>And yet — they sat in the capsule and waited. They moved when told. Were hoisted one by one. Waited for every rotor to stop before stepping off. Not one said “I’ve done this before, I’ll go first.”</p><p>This is the defining characteristic of elite operators: experience doesn’t make you skip the process. It’s what makes you understand why the process exists.</p><p>In SRE, your most senior engineers should be your most rigorous about the runbook. Not because they need to be told what to do — but because they’ve seen what happens when steps are skipped. The junior engineer skips the drain check because they don’t know what can go wrong. The senior engineer does it because they do.</p><p><strong>Experience doesn’t make you skip the process. It’s what makes you understand why the process exists.</strong></p><h3>8. The Learning Phase Started Before the Crew Left the Ship</h3><p>About 90 minutes after splashdown, the crew were aboard the USS John P. Murtha undergoing medical checks. NASA held a post-mission press conference the same evening. Engineers had already begun inspecting the heat shield. Onboard data retrieval was being planned. The mission wasn’t over — the learning phase had started immediately.</p><p>In production: run your retrospective while context is accurate — what wasn’t in the runbook, what assumption was wrong, what held up under pressure. Don’t wait until next week when the adrenaline has faded and the details have blurred.</p><p><strong>Every change window is a test flight that produces data. Capture it while it’s fresh.</strong></p><h3>What I Actually Watched</h3><p>Stability over speed — that’s the message NASA just showed us. And it’s exactly how production changes should be run.</p><p>What I was feeling watching that recovery — before I could articulate it — was the comfort of watching a system that had genuinely internalised operational discipline. Not a checklist followed because someone said to. A culture where the sequence, the waiting, the one-at-a-time extraction were simply <em>how things are done</em> — no explanation needed, no enforcement required.</p><p>The principles map directly to how we run production changes:</p><ul><li>Ship with known risks only when the mitigation is understood and the exposure is reduced</li><li>Pre-stage your recovery capability — nobody should scramble when it matters</li><li>Each stage creates the conditions for the next — never skip ahead</li><li>Check for fumes first — capture your baseline before the change begins</li><li>Wait for full system stability before declaring the rollout done</li><li>Verify system health before exposing users</li><li>Your most experienced engineers should be your most process-disciplined</li><li>Capture the learnings immediately — every change window is a test flight</li></ul><p>The Artemis II crew is home. All four walked off that ship unaided, waving at the cameras.</p><p>That’s what a well-executed production change looks like.</p><p><em>SRE Technical Lead and CNCF Kubestronaut at WSO2. I pay close attention to process, stability over speed, and keeping production systems simple enough to actually operate — production lessons show up in the most unexpected places, apparently including a NASA recovery operation on a quiet Saturday morning.</em></p><p><em>Did you catch different SRE lessons watching the splashdown? I’d love to hear them in the comments.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a52a6a147e78" width="1" height="1" alt=""><hr><p><a href="https://medium.com/operational-sympathy/what-artemis-ii-recovery-taught-me-about-changes-in-production-a52a6a147e78">What Artemis II Recovery Taught Me About Changes in Production</a> was originally published in <a href="https://medium.com/operational-sympathy">operational-sympathy</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Beyond Blameless Postmortems: How We Turn Production Failures into Design Improvements]]></title>
            <link>https://medium.com/operational-sympathy/beyond-blameless-postmortems-how-we-turn-production-failures-into-design-improvements-7f9a93a07c65?source=rss----8e7fbff1207e---4</link>
            <guid isPermaLink="false">https://medium.com/p/7f9a93a07c65</guid>
            <category><![CDATA[rca]]></category>
            <category><![CDATA[operation-sympathy]]></category>
            <category><![CDATA[customer-success]]></category>
            <category><![CDATA[root-cause-analysis]]></category>
            <dc:creator><![CDATA[Dilshan Fardil]]></dc:creator>
            <pubDate>Mon, 02 Mar 2026 05:23:15 GMT</pubDate>
            <atom:updated>2026-03-02T05:23:14.185Z</atom:updated>
            <content:encoded><![CDATA[<p><em>What our internal RCA process revealed about building operationally sympathetic systems</em></p><p>After our tenth production incident in Q3, we sat down with the postmortem reports spread across the table. Ten different incidents. Ten different immediate causes. But as we looked closer, something uncomfortable became clear: seven of them shared the same root cause category. We weren’t learning. We were just fighting the same fire in different rooms.</p><p>That’s when we realized our RCA process wasn’t actually working. We were documenting failures, sure. Writing action items, absolutely. But we weren’t changing how we <em>designed</em> systems. We weren’t building operational sympathy into our architecture.</p><p>This is the story of how we transformed our RCA process from a paperwork exercise into the foundation of operationally sympathetic design at WSO2.</p><h3>What Is RCA (Root Cause Analysis)?</h3><p>Before we dive into what we learned, let’s establish what an RCA actually and what it should do.</p><p>An RCA is a structured process you run whenever you have a customer impacting event. Not just a minor glitch. A serious incident where something went wrong and customers felt it. Downtime. Data loss. Performance degradation. Service unavailability.</p><p>The goal isn’t just to identify what broke. It’s to understand why it broke and most importantly how to ensure it never happens again.</p><p>If your RCA doesn’t change how you build systems, it’s just documentation theater.</p><h3><strong>The Problem: RCAs That Don’t Change Behavior</strong></h3><p>Here’s the uncomfortable truth about our early RCAs: they were theater. Professional, thorough documentation of our failures that changed absolutely nothing.</p><p>The pattern was predictable: Incident happens. War room. Fix it. Write it up. File it away. Months later? Different service, different team, <strong>same root cause</strong>. Nobody connected the dots.</p><p>Our action items were Band-Aids: “Restart the service,” “Increase memory,” “Add a retry.” We treated symptoms, not causes.</p><p><strong>Then came the moment that changed everything.</strong></p><p>Frustrated after yet another “new” incident that felt oddly familiar, we decided to categorize our RCAs differently. Instead of reading them chronologically, we grouped them by pattern. What we saw was eye-opening:</p><p><strong>Most were observability gaps.</strong> We couldn’t see what was failing. Flying blind every time.</p><p><strong>Many were resource exhaustion.</strong> Thread pools maxed. Connections drained. Memory leaking. We kept running out because we weren’t tracking.</p><p><strong>Several were timeout chaos.</strong> External services timing out. Our services retrying forever. Cascading failures.</p><p><strong>Some were deployment disasters.</strong> Bad code to production. No gradual rollout. No rollback. When deploys went wrong, they went <em>spectacularly</em> wrong.</p><p>We weren’t having unique incidents. We were having the same categories of disasters on repeat, just wearing different costumes. The same patterns kept emerging, over and over.</p><p><strong>Something had to change.</strong></p><h3><strong>The Seven Steps of Effective RCA</strong></h3><p>We rebuilt our RCA process around seven steps. But more importantly, we changed <em>how</em> we approached each step with operational sympathy in mind.</p><p><strong>Step 1: Identify the Problem (Not Just the Symptom)</strong></p><p>The symptom is what users experienced. The problem is <em>why</em> the system behaved that way. Don’t stop at “the service was slow” or “the database went offline.” Dig deeper: What cascade of events led to this failure? What design assumption broke down?</p><p>Get to the actual problem. Don’t stop at the symptom.</p><p><strong>Step 2: Collect Data (Your Decisions Must Be Evidence-Based)</strong></p><p>This is where observability debt hits hardest. If you didn’t instrument the right things, you can’t collect the right data. You’re forced to guess.</p><p><strong>What we learned:</strong> The data you wish you had during the RCA is exactly what you should have instrumented before the incident. Every gap in our data collection became an action item: “Add this metric to prevent future blind spots.”</p><p>We started tracking data gaps discovered during RCAs. When we found ourselves saying “we wish we had logged this,” that became immediate feedback for our observability strategy.</p><p><strong>Step 3: Ask Why (Make Causal Connections)</strong></p><p>Asking “why” once isn’t enough. You need to ask it multiple times. This is the “Five Whys” technique, and it’s transformative.</p><p><strong>A Simplified Example:</strong></p><p>Why did the service fail? → Resource exhausted<br>Why did the resource exhaust? → External dependency became slow <br>Why did we not handle slow dependencies? → Missing defensive patterns Why were defensive patterns missing? → Not in our design standards <br>Why not in standards? → We never documented failure-mode thinking</p><p>Now we’ve reached the real root cause: a gap in how we approach system design. The fix isn’t just addressing this one incident it’s updating how we design <em>all</em> integrations going forward.</p><p><strong>This is operational sympathy in action:</strong> understanding that incidents are almost never single failures. They’re cascades. Find the cascade triggers.</p><p><strong>Step 4: Identify Corrections (What Will You Fix?)</strong></p><p>Here&#39;s where we changed our approach dramatically. We now identify corrections at <strong>three levels</strong>:</p><ul><li><strong>Level 1 - Immediate Fix:</strong> What stops the bleeding right now?</li><li><strong>Level 2 - Prevent This Specific Incident:</strong> What prevents this exact scenario?</li><li><strong>Level 3 - Prevent This Category of Incidents:</strong> What prevents all incidents in this class?</li></ul><p>Level 3 is where operational sympathy lives. It&#39;s where you change your design patterns, not just fix bugs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*N_LNn_5ZV4VtmbfqexJ7GA.png" /></figure><p><strong>Step 5: Find the Gaps (Monitoring &amp; Logging Defects)</strong></p><p>Every RCA should answer: <strong>What didn&#39;t we see that we should have?</strong></p><p>When we discover these gaps, each becomes an action item. Each becomes an addition to our monitoring standards.</p><p><strong>Critical insight:</strong> Monitoring and logging go hand in hand. You can&#39;t monitor what you don&#39;t log. You can&#39;t debug what you don&#39;t monitor. If you found gaps in the RCA, fix them before the next deployment.</p><p><strong>Step 6: Implement the Solution (Not Just the Quick Fix)</strong></p><p>This is where many RCAs die. Great analysis. Clear action items. Nothing changes. We need to make implementation mandatory and trackable.</p><ul><li>Every action item has an owner and a deadline</li><li>Level 1 fixes: implemented immediately</li><li>Level 2 fixes: in the next sprint</li><li>Level 3 fixes: architectural changes tracked as initiatives</li><li>We track completion rates and review them regularly</li></ul><p><strong>If you don&#39;t implement the changes, why did you do the RCA?</strong></p><p><strong>Step 7: Communication (The Hardest Step)</strong></p><p>This step is emphasised in our process because it&#39;s where we fail most often. Not technically emotionally.</p><p>It&#39;s hard to admit mistakes. It&#39;s hard to tell customers &quot;we failed you, and here&#39;s why.&quot; But this communication is crucial for two reasons:</p><ol><li><strong>It rebuilds customer trust.</strong> Transparency about what went wrong and how you&#39;re preventing it shows you take incidents seriously.</li><li><strong>It creates internal accountability.</strong> When you have to explain the incident externally, teams take the fixes more seriously.</li></ol><p><strong>Our communication template:</strong></p><ul><li>What happened (timeline)</li><li>What the impact was (be specific)</li><li>What the root cause was (not just the symptom)</li><li>What we&#39;re doing to prevent it (all three levels)</li><li>How we&#39;re verifying it won&#39;t happen again</li></ul><p>Don&#39;t write two sentences. Write the real story. Restore trust through honesty and detail.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KqtNfWLMt6br2SgR41lbyg.png" /></figure><h3>Use Our RCA Template</h3><p>Azeez has released a comprehensive RCA template that we now use at WSO2. It’s structured, thorough, and forces you to think about operational sympathy at every step.</p><p>Get the template here: <a href="https://medium.com/operational-sympathy/root-cause-analysis-report-template-released-de1add6345f8">https://medium.com/operational-sympathy/root-cause-analysis-report-template-released-de1add6345f8</a></p><p>And also Azeez talk about the process and the thinking behind how to preparing a RCA in here : <a href="https://medium.com/operational-sympathy/the-curious-case-of-the-leaking-land-rover-38e28758e6f5">https://medium.com/operational-sympathy/the-curious-case-of-the-leaking-land-rover-38e28758e6f5</a></p><p>Don’t reinvent the wheel. Use a proven template. Focus your energy on learning from the incident, not formatting the report.</p><h3>IMPORTANT : What Rigorous RCA Practice Taught Us</h3><p>After committing to rigorous RCA practice, here’s what changed:</p><p><strong>Measurable Improvements:</strong></p><ul><li>Mean Time To Resolution dropped dramatically</li><li>Repeat incidents (same root cause) became rare</li><li>RCA action item completion rate improved significantly</li><li>More incidents caught in staging before reaching production</li></ul><p><strong>Behavioural Changes:</strong></p><ul><li>Teams now ask “What would the RCA say?” during design</li><li>Code reviews explicitly check operational sympathy dimensions</li><li>New services are born with monitoring, not bolted on later</li><li>On-call engineers feel more confident — they have the tools to diagnose issues</li></ul><p><strong>Cultural Shifts:</strong></p><ul><li>Blameless culture is real people admit mistakes without fear</li><li>RCAs are learning opportunities, not punishment</li><li>We celebrate good RCAs that drive meaningful change</li></ul><p>The shift from “fixing incidents” to “preventing categories of incidents” was the turning point.</p><h3>Start With One RCA</h3><p>You don’t need to overhaul your entire incident response process tomorrow. Start small:</p><ol><li><strong>Pick your last incident.</strong> Even a minor one. Run the seven-step RCA on it.</li><li><strong>Ask the Five Whys.</strong> Don’t stop at the surface. Get to the real root cause.</li><li><strong>Identify all three levels of corrections.</strong> Immediate, preventive, and categorical.</li><li><strong>Find the observability gaps.</strong> What didn’t you see that you should have? Add those metrics.</li><li><strong>Actually implement the fixes.</strong> Track them. Make someone accountable.</li></ol><p>Do this once well. Then make it your standard. Before you know it, you’re not fighting the same fires. You’re preventing them.</p><h3>The Best Incident Is the One That Teaches You to Prevent Ten More</h3><p>RCAs aren’t paperwork. They’re your feedback loop. They’re how production teaches you to build better systems.</p><p>Every incident is painful. Every customer impact hurts. But if you learn from it really learn, systematically, through rigorous RCA then that pain has meaning. It makes you better. It makes your systems more operationally sympathetic.</p><p>The goal isn’t zero incidents. That’s impossible. The goal is:</p><ul><li>Detect faster (better observability)</li><li>Resolve faster (better operability)</li><li>Never repeat (better design)</li></ul><p>RCA gets you there. But only if you treat it as a design tool, not a documentation exercise.</p><p>So the next time something breaks, don’t just fix it. Learn from it. Systematically. Rigorously. And use that learning to build systems that fail less, recover faster, and operate with sympathy for the people who have to keep them running.</p><h3><strong><em>The first step of solving a problem is recognising there is one.</em></strong></h3><h3><strong><em>The next step is making sure it never happens again.</em></strong></h3><p><em>Lessons from production at WSO2, where we’ve learned that great RCAs prevent future incidents.</em></p><p><em>Read more about operational sympathy: </em><a href="https://medium.com/@afkham-azeez/operational-sympathy-8a9c5dc26b5a"><em>https://medium.com/@afkham-azeez/operational-sympathy-8a9c5dc26b5a</em></a></p><p><em>Get the RCA template: </em><a href="https://medium.com/operational-sympathy/root-cause-analysis-report-template-released-de1add6345f8"><em>https://medium.com/operational-sympathy/root-cause-analysis-report-template-released-de1add6345f8</em></a></p><p><em>Use the operational sympathy scorecard: </em><a href="https://docs.google.com/spreadsheets/d/1jryXy-aNQDoDgjMC8T2D5grdgP5bxQr-DwKJkB2hNfE/edit"><em>https://docs.google.com/spreadsheets/d/1jryXy-aNQDoDgjMC8T2D5grdgP5bxQr-DwKJkB2hNfE/edit</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7f9a93a07c65" width="1" height="1" alt=""><hr><p><a href="https://medium.com/operational-sympathy/beyond-blameless-postmortems-how-we-turn-production-failures-into-design-improvements-7f9a93a07c65">Beyond Blameless Postmortems: How We Turn Production Failures into Design Improvements</a> was originally published in <a href="https://medium.com/operational-sympathy">operational-sympathy</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Cloud that Grows, NOT bills that Explode]]></title>
            <link>https://medium.com/operational-sympathy/cloud-that-grows-not-bills-that-explode-1c9fd17f65a6?source=rss----8e7fbff1207e---4</link>
            <guid isPermaLink="false">https://medium.com/p/1c9fd17f65a6</guid>
            <category><![CDATA[sre]]></category>
            <category><![CDATA[cloud-cost]]></category>
            <category><![CDATA[cloud]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[operational-sympathy]]></category>
            <dc:creator><![CDATA[Wickram Bagawathinathan]]></dc:creator>
            <pubDate>Mon, 02 Mar 2026 05:21:05 GMT</pubDate>
            <atom:updated>2026-03-02T05:21:08.951Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Cloud that Grows, NOT bills that Explode" src="https://cdn-images-1.medium.com/max/900/1*0EjohIEwgqZGmrD-XOzAuA.png" /><figcaption>Generated with <a href="https://claude.ai/">claude.ai</a></figcaption></figure><p>When we talk about building systems in the cloud, our eyes light up at scalability, resilience, performance, and all those shiny new services. But cost? That’s the quiet guest nobody notices… until the first “surprise” bill drops like a plot twist in a thriller.</p><p>Treating cloud cost as an afterthought is like realizing halfway through your dream house that you have no idea how much cement costs!!! Yikes… 😜</p><p>What if, instead, cost had its own seat at the architecture table from day one? Suddenly, scaling up doesn’t feel like gambling with your wallet: it’s strategy, not chaos.</p><h3>Cost awareness by design</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/900/1*NbLtqS5uTaTNSQ8VmJqMZQ.png" /><figcaption>Generated with <a href="https://claude.ai/">claude.ai</a></figcaption></figure><p>In a cloud system, small inefficiencies don’t stay small for long. Hence, making architectural and implementation decisions with a clear understanding of how resource usage burns money. Every database read, every background job, every autoscaling rule: they all have a price tag attached. Cloud bills don’t explode randomly. They usually explode because of assumptions, mostly.</p><p><strong><em>“It’s much cheaper to redesign a diagram than to refactor a live system.”</em></strong></p><h4><strong>Architecture shapes cloud bill</strong></h4><p>Two systems can solve the same problem and have wildly different cost profiles.</p><ul><li>A microservices architecture with multiple active services might look elegant, but passive services still cost money.</li><li>An autoscaling group without proper limits can scale beautifully… and the bill beautifully too.</li><li>A logging system that retains everything forever may seem safe… until storage costs creep up month after month.</li></ul><p>Architectural decisions should determine:</p><ul><li>How compute scales?</li><li>How does storage grow?</li><li>How does data flow between services grow or work?</li><li>How often are expensive operations triggered?</li><li>How many DB calls are triggered to get a simple API subscription list?</li></ul><p>Without guardrails, scaling becomes a liability instead of a strength. A traffic spike shouldn’t feel like a financial emergency.</p><p>Good cost-aware design asks:</p><ul><li>What happens at 10x traffic?</li><li>What happens if a queue backs up?</li><li>What happens if someone misconfigures a default?</li><li>What happens if the system generates millions of log lines in a single day?</li></ul><h3>Defaults are dangerous</h3><p>Many cloud services are powerful, and their defaults are designed for flexibility, not frugality, like:</p><ul><li>Autoscaling without upper limits.</li><li>Provisioned databases sized “just to be safe”.</li><li>High-performance storage tiers are used by default.</li><li>Excessive interactive log retention.</li></ul><p>None of these are wrong… But without intentional choices, they quietly accumulate cost. So what could be intentional?</p><ul><li>Setting sensible scaling boundaries.</li><li>Choosing appropriate instance sizes.</li><li>Implementing lifecycle rules for storage.</li><li>Monitoring usage from day one.</li></ul><p>The goal isn’t to minimize cost at all costs: it’s to align spending with value.</p><h3>Native cloud services vs cloud-agnostic solutions</h3><p>There’s an ongoing debate in architecture discussions: should we use native cloud services or build cloud-agnostic systems?</p><p>Cloud-native services (managed databases, serverless compute, managed messaging systems) often:</p><ul><li>Reduce operational overhead.</li><li>Improve reliability.</li><li>Scale automatically.</li><li>Potentially optimize costs through usage-based pricing.</li></ul><p>But they can increase vendor lock-in.</p><p>Cloud-agnostic solutions (like self-managed containers, portable databases, or abstraction layers) offer flexibility, but often at the cost of:</p><ul><li>Higher operational complexity.</li><li>Always-on (active) infrastructure.</li><li>Hidden management costs.</li></ul><p>The real question isn’t ideology… It’s economics and context.</p><p>Sometimes native services are cheaper in the long run because they eliminate operational overhead. Other times, a portable solution might prevent expensive migrations later. Cost awareness means evaluating all the possible solutions, not just technically, but economically too.</p><h3>A cost approximation</h3><p>One of the most underrated engineering exercises is cost modeling. Before finalizing architecture, ask:</p><ul><li>What will this cost at the expected traffic?</li><li>What will it cost at 10x growth?</li><li>What’s the worst-case scenario?</li><li>Which components dominate the bill?</li></ul><p>A cost approximation exercise:</p><ul><li>Forces clarity about traffic assumptions.</li><li>Highlights expensive data paths.</li><li>Encourages right-sizing decisions early.</li><li>Identifies risks before production.</li></ul><p>Even a simple spreadsheet can uncover insights you didn’t see coming. I’ve put together a “simple” cost-engineering template you can use as a starting point or reference: <a href="https://docs.google.com/spreadsheets/d/1tY68zJdd7UNV2F2o0U7M2eZJI6e0vFspjvxDTqSpXzY/edit?usp=sharing">Mini_Cloud_Cost_Engineering_Framework</a></p><h3>Observability for cost, not just performance</h3><p>We instrument systems for latency and error rates, but do we instrument for cost drivers? Because when costs become observable, they become manageable.</p><p>Consider tracking things like:</p><ul><li>DB requests per expensive API call.</li><li>Storage growth trends.</li><li>Compute hours by service.</li><li>Cost per tenant or feature.</li></ul><h3>Economic discipline</h3><p>At its core, cost awareness is about responsibility. Cloud makes it incredibly easy to provision resources. It also makes it incredibly easy to waste them.</p><p>Cost awareness doesn’t slow innovation; it makes it sustainable. Because the goal isn’t just to build something that works, it’s to build something that works and keeps working without turning into a financial surprise.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1c9fd17f65a6" width="1" height="1" alt=""><hr><p><a href="https://medium.com/operational-sympathy/cloud-that-grows-not-bills-that-explode-1c9fd17f65a6">Cloud that Grows, NOT bills that Explode</a> was originally published in <a href="https://medium.com/operational-sympathy">operational-sympathy</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Root Cause Analysis — Report template released]]></title>
            <link>https://medium.com/operational-sympathy/root-cause-analysis-report-template-released-de1add6345f8?source=rss----8e7fbff1207e---4</link>
            <guid isPermaLink="false">https://medium.com/p/de1add6345f8</guid>
            <category><![CDATA[sre]]></category>
            <category><![CDATA[rca]]></category>
            <category><![CDATA[operational-sympathy]]></category>
            <category><![CDATA[cloud]]></category>
            <dc:creator><![CDATA[Afkham Azeez]]></dc:creator>
            <pubDate>Thu, 19 Feb 2026 06:46:32 GMT</pubDate>
            <atom:updated>2026-02-19T06:46:33.530Z</atom:updated>
            <content:encoded><![CDATA[<h3>Root Cause Analysis — Report template released</h3><p>I have been <a href="https://afkham-azeez.medium.com/the-curious-case-of-the-leaking-land-rover-38e28758e6f5">talking</a> and <a href="https://afkham-azeez.medium.com/turning-wrenches-and-diagnosing-systems-28b63ec5ddbf">writing</a> about RCA for a while now trying to get everyone in general, and my teams in particular to carry out proper and high quality root cause analysis. One of the questions people have asked me about was how the analysis and findings should be documented. Based on the work we have been doing in the past and the gaps I’ve identified, I’ve created a 1.0 version of an RCA template which I’m releasing under the Apache Software Licence (ASL) 2.0.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fdocs.google.com%2Fdocument%2Fd%2F1w3TLoGAF_46xEYVQLooDvNVA-sidUhM4FqQvESRhBb8%2Fpreview%3Fembedded%3Dtrue&amp;display_name=Google+Docs&amp;url=https%3A%2F%2Fdocs.google.com%2Fdocument%2Fd%2F1w3TLoGAF_46xEYVQLooDvNVA-sidUhM4FqQvESRhBb8%2Fedit%3Ftab%3Dt.0&amp;image=https%3A%2F%2Flh7-us.googleusercontent.com%2Fdocs%2FAHkbwyKeytgTbsTrYveF9BpElK6krzhqp5lpU9muZQ4hoOTOxHMF97PYXubgkfDzRae7J3ePwcY30YXtdbXE26aWyyblo7P4zKyUK39g_OjjdPhu9OCWaCBS%3Dw1200-h630-p&amp;type=text%2Fhtml&amp;scroll=auto&amp;schema=google" width="700" height="530" frameborder="0" scrolling="no"><a href="https://medium.com/media/d91e1521555bbeaad8b3156aae420375/href">https://medium.com/media/d91e1521555bbeaad8b3156aae420375/href</a></iframe><p>You are free to download, make copies and modify this as you see fit. You could also comment on the Google doc itself if you have suggestions.</p><p>The template is self explanatory. Feedback welcome.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=de1add6345f8" width="1" height="1" alt=""><hr><p><a href="https://medium.com/operational-sympathy/root-cause-analysis-report-template-released-de1add6345f8">Root Cause Analysis — Report template released</a> was originally published in <a href="https://medium.com/operational-sympathy">operational-sympathy</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Curious Case of the Leaking Land Rover]]></title>
            <link>https://medium.com/operational-sympathy/the-curious-case-of-the-leaking-land-rover-38e28758e6f5?source=rss----8e7fbff1207e---4</link>
            <guid isPermaLink="false">https://medium.com/p/38e28758e6f5</guid>
            <category><![CDATA[sre]]></category>
            <category><![CDATA[5-whys]]></category>
            <category><![CDATA[operational-sympathy]]></category>
            <category><![CDATA[rca]]></category>
            <category><![CDATA[cloud]]></category>
            <dc:creator><![CDATA[Afkham Azeez]]></dc:creator>
            <pubDate>Thu, 19 Feb 2026 06:45:31 GMT</pubDate>
            <atom:updated>2026-02-19T06:45:32.564Z</atom:updated>
            <content:encoded><![CDATA[<h3>The Art of Root Cause Analysis: Solving Problems at Their Source</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VdRLUQWgj8IZdMjg2AjtdQ.png" /></figure><blockquote><em>We recently concluded our inaugural Customer Success kickoff session for the year 2025 themed “Pioneering Excellence”, where I conducted a session with the same title as this article. In my role heading the SRE team at WSO2, I’ve created guidelines for my team on conducting Root Cause Analysis sessions as well as have participated in many RCA review sessions. In our line of work, outages and incidents are part and parcel of life. However, we strive to learn from every such occurrence and ensure that we take every action possible to prevent recurrence. After all, we are in the business of making customers successful, and repeat incidents can only have negative consequences. Hence, every incident related to the deployments my team manages, which include WSO2 </em><a href="https://wso2.com/choreo/"><em>Choreo</em></a><em>, WSO2 </em><a href="https://wso2.com/asgardeo/"><em>Asgardeo</em></a><em>, managed and private clouds that we manage on behalf of our customers, requires a post incident resolution RCA. The inspiration behind this session was based on my learnings and observations as a participant of such sessions. I believe that documenting it here would be helpful for others as well.</em></blockquote><h3>Tl;dr</h3><p>Organizations aim for smooth operations and reliability, but incidents still happen, disrupting services and affecting customer trust; Root Cause Analysis (RCA) is a powerful tool that enables teams to identify the underlying causes of these issues and implement effective, long-lasting solutions. This blog explores the fundamentals of RCA, the principles of blameless analysis, and methodologies such as 5-Whys and Fishbone analysis, demonstrating how to identify actionable solutions that address the roots of the problem.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZFfFFr4VhFq7RQnCnNU14Q.png" /><figcaption>It’s a feature, not a bug!</figcaption></figure><blockquote>A car owner regularly finds oil patches in his driveway, and low engine oil levels. His mechanic repeatedly tops up the oil and replaces the oil filter gasket. Additionally, the mechanic also cleans the engine to remove visible oil residue, giving the impression that the issue is resolved, but the issue persists and the owner is frustrated. This or something similar has happened to many of us, isn’t it? Finally he decides to take his car to a different mechanic, who takes a step back and takes his time to analyze the problem and uncovers that the source of the leak was a cracked valve cover gasket. Once that is replaced, the leak gets permanently fixed. The owner is relieved, but he had needlessly spent time, money and suffered disappointment due to the first mechanic treating the symptoms instead of spending a bit more time to find the root cause. The owner would never go back to that mechanic.</blockquote><h3>The Why Behind Every Problem</h3><p>Root Cause Analysis is a systematic process to uncover the true source of a problem or incident. By addressing root causes, teams prevent recurrence and build robust systems. Unlike quick fixes that address symptoms, RCA drives meaningful change by targeting the underlying problems.</p><p>Engaging in Root Cause Analysis (RCA) offers numerous tangible advantages that significantly benefit organizations. By identifying and addressing underlying issues, RCA helps minimize repeated outages, effectively reducing downtime and ensuring smoother operations. It also enhances processes and reliability by optimizing workflows and systems, leading to improved efficiency and stability. Furthermore, RCA fosters a culture of continuous improvement, promoting accountability and encouraging teams to embrace proactive problem-solving. This holistic approach not only resolves current issues but also strengthens the foundation for long-term success.</p><p>RCA aims to achieve the following critical objectives:</p><p><strong>Identify the True Source of the Problem</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*b6k52aW_geQy8adetGWgFQ.png" /><figcaption>You may only see the symptoms, but the problem could run much deeper!</figcaption></figure><p>Determining the specific underlying causes instead of addressing symptoms alone is crucial. Many a time, people end up applying plasters to counter the symptoms without investing time in understanding why the symptoms manifested in the first place. Needless to mention that these symptoms will raise their ugly heads from time to time unless the reasons for those symptoms are not addressed.</p><p><strong>Implement Effective Corrective Actions</strong></p><p>Developing actionable and lasting solutions that address the root causes which fix the root causes identified during the RCA is one of the fundamental objectives.</p><p><strong>Prevent Similar Incidents in the Future</strong></p><p>Introducing process improvements to eliminate the risk of recurrence is another important objective.</p><h3>Fix It at the Top!</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*limy4Zrx79jbDz5k" /></figure><blockquote>Living in Sri Lanka, we know that to eliminate corruption, it must be tackled at the top. However, what happens in reality is that the big fish go scot-free while the small fry get caught, leading to the situation we are in today.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*y7ndi4FI47iqdKV-I12gwA.png" /></figure><p>Getting back to RCA, we have observed that once you start plotting a graph of the root causes, many incidents ultimately lead to a handful of ultimate causes as shown in the illustration above. Fixing the problems closer to the top will ensure the elimination of problems and incidents further down the hierarchy. For example, incidents A, B and C all are due to a partial deployment outage. Further analysis uncovered a misconfiguration which occurred due to lack of awareness in the SRE team as well as poor documentation, which ultimately point to operational process issues &amp; product management issues. This indicates that there could be other problems that would stem from those two roots, and hence to avoid future problems, we should scrutinize and update these processes.</p><h3>Conducting an RCA</h3><p>Conducting an effective RCA requires a methodical approach. Here are the fundamental steps in detail:</p><ol><li><strong>Define the Problem Clearly</strong>: Frame the issue with a specific and concise statement to guide the analysis. Clearly articulating the problem is as good as solving half the problem.</li><li><strong>Focus on Root Causes, Not Symptoms</strong>: Look beyond immediate effects to discover the deeper systemic issues.</li><li><strong>Gather Data and Evidence</strong>: Collect logs, metrics, timelines and all relevant data to establish a factual foundation for the analysis.</li><li><strong>Involve Relevant Stakeholders</strong>: Include people from different roles to ensure diverse perspectives.</li><li><strong>Use Structured Tools and Techniques</strong>: Leverage methods like Fishbone Diagrams and 5-Whys for a systematic exploration of causes.</li><li><strong>Develop Practical Solutions</strong>: Focus on realistic and actionable remedies that can be effectively implemented. Ivory tower solutions will not yield anticipated results.</li><li><strong>Focus on Blameless RCA</strong>: Encourage open communication and analyze processes instead of blaming individuals.</li><li><strong>Document and Share Findings</strong>: Compile and disseminate results to ensure organizational learning and transparency.</li><li><strong>Implement and Verify Corrective Actions</strong>: Execute and monitor solutions to validate their effectiveness.</li><li><strong>Promote Continuous Improvement</strong>: Use RCA outcomes to refine practices and foster a culture of learning.</li></ol><h3>Blameless RCA: Focus on systems and processes, not individuals</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LuoJOUYY2dApo4lQCrP4Dw.png" /><figcaption>බඳුන් සෝදන අයගේ අතින් තමා පිඟන් කැඩෙන්නේ! (Those who wash the dishes are the ones most likely to break a plate!)</figcaption></figure><p>What would be the best method of avoid making mistakes? Not doing anything would ensure that you don’t commit mistakes. Humanity wouldn’t progress if everyone thought like that. Most people wouldn’t deliberately make mistakes and hence it is better to give individuals the benefit of the doubt.</p><p>Blameless RCA fosters an environment of psychological safety, where individuals feel secure sharing mistakes and insights. Instead of asking, “Who caused the problem?” teams focus on “What allowed this problem to happen?” This approach encourages collaboration, honesty, and innovation.</p><h4>How to Conduct a Blameless RCA:</h4><ul><li><strong>Establish Psychological Safety</strong>: Cultivate a culture where team members can openly discuss issues without fear of blame or retribution.</li><li><strong>Focus on Systems and Processes</strong>: Examine workflows, tools, and systemic factors contributing to the problem instead of attributing fault to individuals.</li><li><strong>Use Neutral Language</strong>: Frame discussions constructively, such as “The configuration check was missed” instead of “The engineer failed to check the configuration.”</li><li><strong>Rely on Data</strong>: Base analysis on objective evidence like logs, metrics, and timelines rather than assumptions and biases.</li></ul><h3>Methodologies</h3><p>Two popular tools for RCA are Fishbone Analysis and the 5-Whys technique. Let’s explore how they work.</p><h4>5-Whys Analysis</h4><figure><img alt="5?" src="https://cdn-images-1.medium.com/max/1024/0*beBiKPZwvXc84KM-" /></figure><p>The 5-Whys method is an iterative questioning technique used to drill down to the root cause. Here’s an example:</p><ol><li><strong>Why did the system go down?</strong> — A configuration file was missing.</li><li><strong>Why was the configuration file missing?</strong> — It wasn’t included in the deployment process.</li><li><strong>Why wasn’t it included?</strong> — The checklist didn’t cover this file.</li><li><strong>Why didn’t the checklist cover it?</strong> — The checklist was outdated.</li><li><strong>Why was the checklist outdated?</strong> — No process existed for regular updates.</li></ol><p>By repeatedly asking “Why?” teams can uncover deeper systemic issues that might otherwise be overlooked. Even though this is called the 5-whys method, it is not mandatory to ask the question strictly 5 times only. As required, the depth could be more than or less than 5.</p><h4>Fishbone Analysis</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*c2FAmfwEzVRsg2h3MwXZcg.png" /><figcaption>My version of fishbone analysis which combines 5-whys with Ishikawa diagrams</figcaption></figure><p>The Fishbone Diagram, also known as the Ishikawa Diagram, is a visual tool that maps out cause-and-effect relationships. The diagram consists of:</p><ul><li><strong>The Head</strong>: Represents the defined problem or issue.</li><li><strong>The Bones</strong>: Major categories of causes, such as People, Process, Equipment, Materials, Environment, and Management. This encourages a multi-dimensional analysis of the problem.</li><li><strong>The Sub-Causes</strong>: Specific contributing factors branching out from the main categories. At each of these “bones”, we would conduct a 5-whys analysis or at least ask the question “why” as many times as appropriate.</li></ul><p>By systematically breaking down causes, teams can comprehensively explore all potential contributors to the problem.</p><h3>Hypothetical Scenario: WSO2 Gateway Timeout Issue</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*YAXu4efc3WYGU67L" /></figure><p>Let’s apply the above methodologies to a hypothetical scenario involving a WSO2 cloud deployment to get a better understanding.</p><blockquote><strong>Problem Statement</strong></blockquote><blockquote>Multiple users report gateway timeout errors after a recent update. These errors are impacting API calls and causing disruptions.</blockquote><h4>Initial Investigation:</h4><p>Following the incident run book, the SRE team reverted recent changes to mitigate the impact temporarily.</p><p><strong>Stakeholders:</strong> feature developers from the product team, product leads, SRE members who handled the incident, SRE leads, relevant CS leads.</p><h4>5-Why Analysis:</h4><ul><li><strong>Why</strong> did the gateway timeout occur? The product change resulted in a mandatory configuration parameter to be set. Not setting this results in a change in behavior of the product.</li><li><strong>Why</strong> was this not detected by the product team? The product team tested it with the parameter properly set. <strong>Why</strong>? The product team always tests with fresh product builds with the latest config files and don’t test with older config files.</li><li><strong>Why</strong> wasn’t this mandatory configuration change communicated to the SRE team? The product team forgot to update the documentation &amp; related change log. <strong>Why</strong>? The feature release checklist doesn’t mandate checking whether docs have to be updated.</li><li><strong>Why</strong> wasn’t this parameter introduced so that it has a sensible default so that existing systems will not be impacted? The impact was overlooked during the design phase of the feature. <strong>Why</strong> was that? Impact on existing deployments is not considered as part of the feature design phase.</li><li>Process: <strong>Why</strong> didn’t SRE detect this issue until users reported it? The monitors were missing. <strong>Why</strong>? Along with the new feature deployment, the monitor was disabled and they forgot to enable it. <strong>Why</strong>? There is no process to keep track of temporarily disabled monitors.</li></ul><h4>Fishbone Analysis:</h4><ol><li><strong>People</strong>: Lack of awareness about configuration changes.</li><li><strong>Process</strong>: No checklist for updating configurations.</li><li><strong>Equipment</strong>: Missing monitors for new deployments.</li><li><strong>Materials</strong>: Outdated reference documentation.</li><li><strong>Environment</strong>: High system load during the update.</li><li><strong>Management</strong>: Lack of oversight on deployment procedures.</li></ol><h4>Root Causes:</h4><ul><li>Lack of a standardized process for updating and validating configurations.</li><li>No process to track temporarily disabled monitors.</li></ul><h4>Action Items:</h4><ul><li>Introduce sensible defaults for new configurations.</li><li>Test with older configuration files during development.</li><li>Mandate documentation updates in release checklists.</li><li>Implement a system to track temporarily disabled monitors.</li></ul><h3>Post-RCA Actions</h3><p>Effective RCA doesn’t end with identifying causes. It’s critical to:</p><ul><li><strong>Implement Recommendations</strong>: Ensure timely execution of corrective actions and monitor their success.</li><li><strong>Update Processes</strong>: Revise and standardize workflows to eliminate the recurrence of similar issues.</li><li><strong>Monitor Progress</strong>: Establish metrics and KPIs to assess the effectiveness of solutions over time.</li><li><strong>Share Lessons Learned</strong>: Document findings comprehensively and share them across teams to promote organizational learning.</li></ul><h3>Common Pitfalls to Avoid</h3><ul><li><strong>Inadequate Stakeholder Involvement</strong>: Failing to include all relevant parties can lead to incomplete analyses.</li><li><strong>Vague Problem Statements</strong>: Ambiguous definitions of the issue hinder the identification of root causes.</li><li><strong>Superficial Analysis</strong>: Avoiding deeper exploration due to time constraints or fear of blame results in recurring problems.</li><li><strong>Overlooking Systemic Changes</strong>: Addressing only immediate issues without improving underlying processes leads to recurring incidents.</li></ul><h3>Key Takeaways</h3><ol><li>Fix the root, not just the symptom.</li><li>Focus on systems, not individuals.</li><li>Learn, improve, and prevent future issues.</li></ol><p>Root Cause Analysis is more than just a problem-solving tool; it’s a mindset. By systematically identifying and addressing root causes, organizations can build resilient systems, foster collaboration, and drive continuous improvement. Remember, every problem is an opportunity to learn and grow.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=38e28758e6f5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/operational-sympathy/the-curious-case-of-the-leaking-land-rover-38e28758e6f5">The Curious Case of the Leaking Land Rover</a> was originally published in <a href="https://medium.com/operational-sympathy">operational-sympathy</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Cloud Mechanics: The Cost of Customer Involvement in Managed Cloud Services]]></title>
            <link>https://medium.com/operational-sympathy/cloud-mechanics-the-cost-of-customer-involvement-in-managed-cloud-services-f36b7ec90703?source=rss----8e7fbff1207e---4</link>
            <guid isPermaLink="false">https://medium.com/p/f36b7ec90703</guid>
            <category><![CDATA[mechanics]]></category>
            <category><![CDATA[sre]]></category>
            <category><![CDATA[managed-services]]></category>
            <category><![CDATA[cloud]]></category>
            <category><![CDATA[operational-sympathy]]></category>
            <dc:creator><![CDATA[Afkham Azeez]]></dc:creator>
            <pubDate>Thu, 19 Feb 2026 06:44:57 GMT</pubDate>
            <atom:updated>2026-02-19T06:44:59.233Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9QVUVxrkzxDF0di4v2gV3w.png" /></figure><p>As someone fascinated by all things mechanics, I find inspiration in the humor of the sign displayed above from a mechanic’s shop. I must admit, I’ve been guilty of similar behavior in my role as a customer, and I wouldn’t blame the mechanic for wanting to charge me extra. In my role leading the SRE team, I often encounter situations where I wish we had a similar pricing board for our managed cloud services.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Uj6BccuexzJ1pjOgYI9o_w.jpeg" /></figure><p>Don’t get me wrong. I myself enjoy tinkering with machines and sometimes mess up, and have to request the service of a career mechanic, at which point I end up spending more — to rectify some of the damages I may have done, in addition to rectifying the original problem.</p><p>So, what parallels can be drawn between customer interference in a mechanic’s work and the involvement of customer teams in how we install, manage, and operate managed clouds? In what ways does increased customer involvement drive up our costs?</p><p>As a business, it’s highly cost-effective for us to run deployments using standardized installation and monitoring scripts that adhere to well-defined, tried-and-tested processes. In other words, utilizing ‘cookie-cutter’ deployments allows us to take full advantage of established models and leverage the team’s deep familiarity with the tools, workflows, and methodologies. This streamlined approach not only reduces complexity but also enables us to achieve economies of scale, which translates into tangible benefits for our customers. By minimizing variations and complications, we can lower operational costs, ensure faster response times, and improve overall adherence to SLAs, ultimately providing a more efficient and cost-effective service.</p><p>Unfortunately, this streamlined approach isn’t always feasible. Many customers come with their own internal operations or cloud teams, along with specific standards, preferred technologies, governance frameworks, and security policies that they impose on our operations team. These internal requirements may be well-suited to the customer’s broader IT environment but often complicate the deployment and management of our managed cloud services. As a result, the ‘cookie-cutter’ solution that offers simplicity and efficiency must be set aside, and instead, we are required to make sometimes significant customizations to meet these specific demands.</p><p>These customizations can involve adopting entirely different governance policies, reconfiguring network setups, altering monitoring tools and strategies, and making changes at the process level to comply with customer-defined standards. This adds layers of complexity that deviate from our tried-and-tested methods, which are optimized for best practices, compliance, performance, cost efficiency, and scalability. The more deviations there are from our standard processes, the harder it becomes to leverage economies of scale, driving up both the time and cost involved in maintaining these environments.</p><p>Moreover, a key challenge arises when our team is given limited access to manage and operate the systems. Many customers want to retain a degree of control over their infrastructure, limiting our ability to make real-time decisions or automate certain processes. In such cases, the terms of operation are dictated by the customer’s teams, which can severely restrict our ability to respond quickly to incidents, roll out updates fast, continuous improvement, or optimize performance. This restricted access also reduces the agility that our teams rely on to efficiently manage cloud infrastructure and maintain uptime.</p><p>To further complicate matters, the customer’s internal teams sometimes make changes to the deployment environment without notifying us in advance. These uncoordinated changes, whether it’s tweaking configurations or updating systems, can lead to unforeseen issues, system downtime, or performance degradation. When problems occur, it can take significantly longer to diagnose and resolve the root cause, especially when we have to backtrack through unauthorized changes. This type of scenario not only increases downtime but also requires us to dedicate extra resources for troubleshooting, which in turn inflates costs for the customer.</p><p>On top of these operational hurdles, the increased communication overhead between our team and the customer’s internal teams adds another layer of complexity. Constant back-and-forth discussions, meetings to align processes, and additional approvals slow down the overall speed at which we can execute tasks. Each decision, change, or issue requires more steps for validation, which not only prolongs implementation timelines but also diverts resources away from more critical tasks. This coordination overhead translates directly into higher operational costs, as more man-hours are spent on managing communication, mitigating risks, and rectifying issues, rather than focusing on the core service.</p><p>Conflicts between our team and the customer’s operations teams often arise when there are differing priorities, technical approaches, or misaligned expectations. These disagreements can lead to significant delays as both teams try to resolve issues, navigate organizational politics, and reach compromises. The back-and-forth process consumes time, money, and energy that could be better spent on continuous improvement, R&amp;D or optimizing the cloud environment. Prolonged conflicts can also take a mental and human toll on the teams involved, causing frustration, burnout, and diminished morale. This not only impacts the quality of work but also strains relationships, making collaboration even more difficult moving forward.</p><p>All of these factors combined — customized requirements, restricted access, customer-induced changes, and communication bottlenecks — drive up costs considerably. What could have been a smooth, cost-effective, and high-performance deployment becomes bogged down by inefficiencies. While we are fully capable of adapting to these custom demands, the associated costs, both in time and resources, increase for everyone involved. For the customer, this translates into higher service costs, longer response times, and potentially less effective cloud infrastructure management, as the added complexity detracts from our ability to deliver an optimal solution.</p><p>Just like the mechanic’s banner that escalates rates based on the customer’s level of involvement, the same principle holds true in our managed cloud services. When customers allow us to operate with minimal interference, using standardized processes and well-defined models, we can deliver efficient, cost-effective solutions. However, when they step in — whether by imposing custom requirements, limiting our access, or making changes without coordination — the complexity rises, much like when a customer “helps” the mechanic.</p><p>As with the mechanic who charges more for having to undo or navigate around a customer’s input, the more involvement and customizations required by the customer’s team, the higher the costs. The additional communication, troubleshooting, and reconfiguration eat away at the efficiency that would otherwise lead to lower costs, faster response times, and better outcomes.</p><p>Ultimately, the key to achieving the best results, both for us and our customers, is trust. Just as a mechanic delivers the best service when left to do their job, we provide the most efficient and cost-effective cloud management when we can apply our expertise with minimal constraints. When customers give us the freedom to operate smoothly, everyone benefits — through lower costs, streamlined operations, and optimal performance.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f36b7ec90703" width="1" height="1" alt=""><hr><p><a href="https://medium.com/operational-sympathy/cloud-mechanics-the-cost-of-customer-involvement-in-managed-cloud-services-f36b7ec90703">Cloud Mechanics: The Cost of Customer Involvement in Managed Cloud Services</a> was originally published in <a href="https://medium.com/operational-sympathy">operational-sympathy</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Incident Fatigue: The Hidden Reliability Risk in SRE Teams]]></title>
            <link>https://medium.com/operational-sympathy/incident-fatigue-the-hidden-reliability-risk-in-sre-teams-af8e20e8bd93?source=rss----8e7fbff1207e---4</link>
            <guid isPermaLink="false">https://medium.com/p/af8e20e8bd93</guid>
            <category><![CDATA[operational-sympathy]]></category>
            <category><![CDATA[incident-fatigue]]></category>
            <category><![CDATA[sre]]></category>
            <category><![CDATA[incident-response]]></category>
            <dc:creator><![CDATA[Wickram Bagawathinathan]]></dc:creator>
            <pubDate>Wed, 18 Feb 2026 09:31:58 GMT</pubDate>
            <atom:updated>2026-02-18T09:32:00.414Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Most outages, at least for me: don’t start with “Ohh the system is down!!!”. They actually start with “Ughhhh, no… not another one, please…”" src="https://cdn-images-1.medium.com/max/1024/1*NFu4VSED_7OQ9GhFVEhE0Q.png" /><figcaption>Generated with ChatGPT</figcaption></figure><p>If you’ve ever been on call, you already know it… Let’s be very honest, folks…</p><p>Most outages, at least for me: don’t start with <em>“</em><strong><em>Ohh the system is down!!!</em></strong><em>”</em>. They actually start with “<strong><em>Ughhhh, no… not another one, please…</em></strong>”</p><p>Your phone buzzes at 02:17 AM, when you try to land on the moon 😋.<br>You squint at the alert. It looks familiar, very familiar indeed. And your brain urghs, <em>“</em><strong><em>didn’t we fix this thing last week???</em></strong><em>”</em></p><p>Welcome to <strong>“<em>Incident Fatigue</em>”</strong>,<strong> </strong>one of the most ignored reliability risks in SRE teams!!!</p><p>Let me first breakdown what is incident fatigue, maybe in plain English:</p><p>Incident fatigue happens when engineers deal with <strong>too</strong> many alerts, <strong>too</strong> many incidents, and <strong>too</strong> much pressure, for <strong>too</strong> long without meaningful improvement. <em>“</em><strong><em>Oh yeah, even that too many ‘too’ irritates me now!!!</em></strong><em>”</em></p><p>Well… It’s not about being “<strong><em>weak</em></strong>” or “<strong><em>bad at stress</em></strong>”.</p><p>This’s exactly what happens when: alerts keep firing, incidents keep repeating and mostly “<strong><em>nothing</em></strong>” really changes.</p><p>Eventually, even the best engineers stop reacting with urgency: not because they don’t care but because their brains are tired of seeing and attending the repetitive alerts. And I believe, <strong>tired brains make bad decisions in urgency!!!</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XkW6lxUTfE09EaZCXH7JlA.png" /><figcaption>Generated with ChatGPT</figcaption></figure><p>Let’s see whether you have seen this already…</p><p>Imagine this:</p><ul><li>Your monitoring system fires ~300 alerts per day. Let’s assume high memory and CPU alerts for a particular deployment.</li><li><strong>99%</strong> of them are not actually impacting a business use case or users untill you get that <strong>1%</strong> when the system is completely down.</li><li>The same outage happens every month or so. Even the customer is aware and whenever there’s an outage customer asks to restart the VM.</li><li>Postmortems exist… but the action items quietly die. How?</li></ul><p>At first:</p><ul><li>Alerts attended very quickly.</li><li>Incidents are handled with care.</li><li>Everyone wants to fix this issue “<strong><em>properly</em></strong>”.</li></ul><p>After sometime later:</p><ul><li>Same alerts are muted.</li><li>Incidents are acknowledged but not <strong>immediately</strong>.</li><li>Now we know fixes are temporary.</li><li>And when on-call is assigned, we know what to expect.</li></ul><p>Is this an engineer fault or failure? Not actually, this is a <strong>systerm design</strong> problem.</p><p><strong>Now let’s understand how incident fatigue becomes a reliability issue rather human issue?</strong></p><p>Here’s the uncomfortable truth to swallow:</p><p>A fatigue SRE team is a part of your production system!!! If your system requires tired humans to “<strong><em>save</em></strong>” it repeatedly, then the system itself is fragile.</p><ul><li>MTTA increases (alert sit unattended or resolved without actually attending).</li><li>MTTR increases (decisions take longer).</li><li>Human errors increase.</li><li>Small issues turn into major outages.</li></ul><p>Still, your dashboards may look green… Untill the day they don’t.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CZV0YlclCJXW8Ja0YAdEgw.png" /><figcaption>Generated with ChatGPT</figcaption></figure><h4>The Silent Partner of Incident Fatigue: Psychological Safety</h4><p>It gets worse when <strong>psychological safety</strong> is missing in your SRE team. What exactly is that?</p><p>Psychological safety in simple term is: When your SRE team thinks <em>“</em><strong><em>We can speak up without getting blamed</em></strong><em>”</em> during any incidents. This matters a lot when it comes to resolving the issue!!!</p><h4>What lack of safety looks like?</h4><ul><li>Engineers, specially juniors <strong>hesitate</strong> to suggest ideas.</li><li>People avoid escalating things that bothers them.</li><li>Engineers stay quiet even when something feels wrong, and all your sync calls are silent.</li><li>Postmortems turn into <em>“</em><strong><em>who broke it?</em></strong><em>”. </em>Your lead says, <em>“</em><strong><em>let me find the person responsible for the change that caused the issue</em></strong><em>”</em>.</li></ul><h4>What to expect as the outcome?</h4><ul><li>Problems escalate and always require seniors intervention as they are answerable.</li><li>Signals are missed as the stress goes up.</li><li>Learning and motivation goes down as your team feels unsafe.</li></ul><blockquote>Ironically, teams that blame individuals end up with <strong>more incidents</strong>, not fewer.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ADXFsfvJaRY6GGFgIIeX0w.png" /><figcaption>Generated with ChatGPT</figcaption></figure><h4>The Postmortem Trap</h4><p>Most teams <strong><em>say</em></strong> they do blameless postmortems. Let’s test that now</p><p>Answer the question — no cheating.</p><p>👉 Do people still hesitate to admit mistakes?<br>If <strong>yes</strong>, it’s not blameless. It’s just a document with rich words.</p><p>A good postmortem asks:</p><ul><li>What signals did we miss?</li><li>Why did the system allow this failure?</li><li>What made the “<strong><em>wrong</em></strong>” action seem reasonable at the time?</li></ul><p>A bad one asks:</p><ul><li>Who created the change request?</li><li>Why didn’t they test enough?</li><li>Why the test case was missed?</li><li>Why wasn’t this caught?</li></ul><p>Now, think which one reduces future incidents? A <strong>good</strong> one or a <strong>bad</strong> one?</p><h4>Team Resilience: The Metric that Nobody Graphs</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*__oF8Hj3DNsNt9wfjB2Uiw.png" /></figure><p>We, SREs love metrics: Latency, Error rate, Availability, Etcetera, Etcetera.</p><p>But almost no one graphs team resilience. Yet, it’s one of the best predictors of future outages.</p><p>Signs your team is losing <strong>resilience:</strong></p><ul><li>Same incidents repeating.</li><li>People try to escape from on-call rotations.</li><li>Engineers hesitant to deploy changes.</li><li><strong>“<em>Hero engineers</em>”</strong> always fixing things.</li><li>High turnover in Ops roles or sometimes, low performance as a team.</li></ul><p>If people are burning out, <strong>reliability debt is accumulating</strong>.</p><h4>What SRE Teams Should Focus?</h4><ol><li>Treat alerts like Production code:<br>- Alerts must be actionable.<br>- Alerts must represent user pain.<br>- Alerts are regularly reviewed and updated.<br><strong><em>If an alert wakes someone up, it better deserve it.</em></strong></li><li>Fix classes of problems, not symptoms:<br>- Instead of “<strong><em>Restart the pod when memory spikes</em></strong>” ask “<strong><em>Why does memory spike every Monday?</em></strong>”.<br><strong><em>Permanent fixes reduce both incidents and fatigue.</em></strong></li><li>Protect psychological safety on purpose:<br>- Anyone can call out concerns.<br>- Incident commanders rotate.<br>- Leads admit mistakes publicly.<br>- Postmortems are about learning, not judging.<br><strong><em>Safer teams respond faster. Frozen if unsafe.</em></strong></li><li>Track human sustainability:<br>- Alerts per engineer.<br>- Incidents per on-call shift.<br>- After-hours pages.<br>- PTO after incidents.<br><strong><em>Again… not to judge people, but to protect them.</em></strong></li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MtF3HaYRPAVOBWCKpJgy1A.png" /><figcaption>Generated with ChatGPT</figcaption></figure><h3>Final food for your thoughts…</h3><p><strong>Will incident fatigue announce itself?<br></strong>Does it sneaks in quietly?</p><p><strong>What could be the scariest part?<br></strong>Is it the best people have already started looking elsewhere?</p><blockquote><strong>If you want reliable systems, build reliable teams first.</strong></blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=af8e20e8bd93" width="1" height="1" alt=""><hr><p><a href="https://medium.com/operational-sympathy/incident-fatigue-the-hidden-reliability-risk-in-sre-teams-af8e20e8bd93">Incident Fatigue: The Hidden Reliability Risk in SRE Teams</a> was originally published in <a href="https://medium.com/operational-sympathy">operational-sympathy</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The $180,000 Log Line: Hard Earned Lessons in Production Observability]]></title>
            <link>https://medium.com/operational-sympathy/the-180-000-log-line-hard-earned-lessons-in-production-observability-ec1774e43001?source=rss----8e7fbff1207e---4</link>
            <guid isPermaLink="false">https://medium.com/p/ec1774e43001</guid>
            <category><![CDATA[observability]]></category>
            <category><![CDATA[operational-sympathy]]></category>
            <category><![CDATA[logging-and-monitoring]]></category>
            <dc:creator><![CDATA[Dilshan Fardil]]></dc:creator>
            <pubDate>Wed, 18 Feb 2026 09:17:16 GMT</pubDate>
            <atom:updated>2026-02-18T09:17:16.553Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Hard-earned lessons from the front lines: why one missing log statement can cost $180K and how simple decisions prevent production nightmares</em></p><p><strong>Late night.</strong> Somewhere, an engineer’s phone lights up. The pager. They know before they even look, it’s bad.</p><p>They stumble to their laptop, heart racing. The dashboard loads. Payment processing is down. Customers can’t complete transactions. The revenue counter is frozen. Every minute costs thousands of dollars.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4N0WlWSXCkrATmpL6WO6Qg.png" /></figure><p>They check the metrics. CPU: 40%. Memory: normal. No error logs. The system looks… <em>fine</em>.</p><p>Except nothing is fine. Nothing works. And they have no idea why.</p><p>Eight hours later, after emergency war rooms, executive escalations, and five engineers pulled from their weekends, they find it. All worker threads every single one stuck waiting on a slow external API call. Thread pool exhausted. Not by high load. Not by a bug.<strong> Just… waiting.</strong></p><p>The fix takes 5 minutes. The incident took 8 hours. Cost: $180,000 in lost revenue. Three enterprise customers escalating to executives. A team that spent their weekend fighting a fire.</p><p>All because someone decided <em>“We’ll add thread pool monitoring later.”</em></p><p><strong>No need for fancy things, One Single log line. One simple metric. That’s all it would have taken.</strong></p><h3>This Isn’t Hypothetical</h3><p>At WSO2, we’ve been in the trenches supporting production systems for years. We’ve seen these scenarios play out again and again sometimes in systems we operate, often in systems our customers run. We’ve been on those late night calls. We’ve watched how a missing log statement turns a 20-minute fix into an 8-hour nightmare.</p><p>My colleague Afkham Azeez recently wrote about <strong>operational sympathy</strong> designing systems with explicit awareness of how they’ll behave and fail in production. It’s brilliant - <a href="https://medium.com/@afkham-azeez/operational-sympathy-8a9c5dc26b5a">Read it here</a></p><p>Today, I want to talk about one specific piece of that: <strong>observability</strong>. Not the theory. Not the tools. The <em>human decisions</em> we make every day that determine whether the next production incident is a 20-minute hiccup or an 8-hour catastrophe.</p><h3>The Debt That Hides Until Production</h3><p>Technical debt slows down development. Everyone sees it. Everyone complains about it.</p><p>Observability debt? Silent. Invisible. Until production, until customers are affected, until dawn when someone is blind and desperate.</p><p>We’ve seen it accumulate every time teams say:</p><ul><li><em>“It works on my machine”. B</em>ut do you know how it fails under real load?</li><li><em>“We’ll add logging if we need it”. H</em>ow will you know you need it when you’re blind ?</li><li><em>“The ops team handles monitoring”. C</em>an they monitor business logic they don’t understand?</li><li><em>“We’ll circle back after this sprint”. W</em>ill anyone remember what to instrument later?</li></ul><p>Each decision feels small. Each sprint has urgent features. Each shortcut seems reasonable. Until production. Until customers. Until executives.</p><h3>The Real Cost Isn’t Just Money</h3><p>Yes, we’ve seen incidents cost $180,000 in lost revenue during thread pool exhaustion. $15,000 in SLA credits when database queries slow down. $230,000 in abandoned carts when payment systems cascade. These are real numbers from real production incidents.</p><p>But the spreadsheet doesn’t capture:</p><p><strong>The engineer who couldn’t sleep for a week</strong> after being on-call during a major outage. The one who kept replaying it: “What if I’d added that one metric? What if I’d thought to check thread states?”</p><p><strong>The customer who escalated to the CEO</strong> because their Black Friday sales were processing at 13% success rate. The relationship that took a year to build and one incident to damage.</p><p><strong>The team that spent three weeks</strong> chasing a memory leak, over-provisioning infrastructure, trying random fixes when one cache size metric would have pointed straight to the problem on day one.</p><p><strong>The product launch delayed</strong> because the team was fighting production fires instead of building features.</p><h3>This is the real cost. The human cost. The trust cost. The opportunity cost. <strong>And it all traces back to simple decisions made months earlier.</strong></h3><h3>Few Patterns That We See Repeatedly</h3><p>Let me share four patterns we’ve observed across many production systems. Not pointing fingers just sharing what we’ve learned from the front lines. The human impact. The simple decision that would have changed everything.</p><h3>The Thread Pool That Looked Fine</h3><p>HTTP 503s everywhere. Service completely unresponsive. But dashboards show CPU at 40%, memory normal. From standard metrics, everything looks healthy.</p><p><strong>The investigation:</strong> Hours of waiting for reproductions, manual thread dump captures. Multiple engineers pulled in.</p><p><strong>The root cause:</strong> All threads blocked waiting on a slow external service. Not working. Not crashed. Just waiting.</p><p><strong>What one log would have saved:</strong> Thread pool utilization + thread state. Would have shown “95% threads waiting” in the first 2 minutes.</p><p><strong>The pattern:</strong> Threads can be “busy” without consuming CPU. If you only monitor CPU, you’re blind to blocking operations.</p><h3>The Query Nobody Could Find</h3><p>Response time: 200ms → 8 seconds. Random restarts, network checks, database restarts. Hours of guessing.</p><p><strong>Root cause:</strong> One poorly-optimized query in a recent deployment causing table locks.</p><p><strong>What one metric would have saved:</strong> Query execution time by type. Would have pointed directly to the culprit.</p><h3>The Cascade That Spread</h3><p>Payment success rate: 99.9% → 87%. But only certain payment methods. Manual testing of each provider. Database examination.</p><p><strong>Root cause:</strong> One payment provider timing out, causing retries that exhausted thread pools for ALL providers.</p><p><strong>What one log would have saved:</strong> Timeout tracking per integration. Would have isolated the failing provider immediately.</p><h3>The Hidden Memory Leak</h3><p>Pods dying every 6 hours. Memory climbing. Profiling. Heap dumps. Over-provisioning. Weeks of attempts.</p><p><strong>Root cause:</strong> Unbounded cache storing session data indefinitely.</p><p><strong>What one metric would have saved:</strong> Cache size monitoring. Would have shown unbounded growth from day one.</p><p><strong>See the pattern?</strong></p><p>Incidents that took hours or weeks. Fixes that took minutes. All preventable with simple, deliberate observability decisions made during development.</p><h3>A Simple Framework with Five Questions Before You Ship</h3><p>You don’t need a PhD in observability. You don’t need expensive tools. You need to pause and ask five questions before you ship:</p><ol><li><strong>If this breaks, will I know WHY ? </strong>Not just that it’s broken why. What log or metric will tell me the root cause?</li><li><strong>If this is slow, what will tell me WHERE? </strong>Database? External API? Lock contention? Thread pool exhaustion? Can I pinpoint it?</li><li><strong>If this uses resources, am I tracking them ? </strong>Thread pools, connection pools, caches, queues if it can fill up or run out, monitor it.</li><li><strong>If this calls external services, am I logging failures ? </strong>Timeouts, retries, circuit breaker states. Not just “external call failed” which one and how.</li><li><strong>Can I trace one user’s request end-to-end? </strong>Correlation IDs. Request IDs. Something that connects the dots across services.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VMPtASH52W5mASdoU4587w.png" /></figure><h3><strong>Two minutes of thinking. Could save weeks of pain.</strong></h3><h3>The Operational Sympathy Scorecard</h3><p>In his operational sympathy post, Azeez shared a scorecard we now use at WSO2 for assessing production readiness. It’s brilliant in its simplicity:</p><p>Nine dimensions of operational readiness, weighted by importance. Each scored 0–5. Takes 15 minutes. <strong>Built-In Observability</strong> is one of the highest-weighted (15%) right alongside failure handling and recovery.</p><p>The question for observability: <em>“Are meaningful metrics, logs, traces, and actionable alerts designed into the system?”</em></p><p>See the full scorecard here: <a href="https://docs.google.com/spreadsheets/d/1jryXy-aNQDoDgjMC8T2D5grdgP5bxQr-DwKJkB2hNfE/edit">https://docs.google.com/spreadsheets/d/1jryXy-aNQDoDgjMC8T2D5grdgP5bxQr-DwKJkB2hNfE/edit</a></p><p>Using this assessment before major releases forces uncomfortable conversations. But uncomfortable in code review is way better than uncomfortable at midnight in production.</p><h3>To My Fellow Engineers. This Is Changeable</h3><p>I know the pressure you’re under. Product wants features yesterday. The sprint is packed. “Just one more thing” feels like too much.</p><p>But here’s what we’ve learned from years in production:</p><p>That log line you skip today? That metric you defer? That’s not saving time. That’s borrowing from your future self. And your future self will pay it back at late night, with interest, in front of executives, while customers are affected.</p><p>We’ve been there. Staring at dashboards that tell us nothing. Trying random fixes. Waiting for thread dumps. Explaining to executives why we don’t know what’s wrong. Supporting customers through painful incidents.</p><p>Nobody wants to be in that position. And you don’t have to be.</p><p><strong>This is changeable.</strong></p><p>Not by heroic effort. Not by expensive tools. By simple, deliberate choices. By asking “what will I wish I had logged?” By spending 2 extra minutes thinking before you ship.</p><p>Those 2 minutes? They buy back hours. They buy back weekends. They buy back your sleep. They buy back customer trust.</p><h3>Start Today. Start Small.</h3><p>Don’t try to fix everything at once. Pick one thing:</p><ul><li><strong>This week:</strong> Add one resource metric to your busiest service. Thread pool. Connection pool. Cache size. Pick one.</li><li><strong>Next code review:</strong> Ask “if this breaks, can we diagnose it?” If the answer is no, add what’s missing.</li><li><strong>Before your next release:</strong> Run through the operational sympathy scorecard. Score yourself honestly. Pick your lowest-scoring area. Fix that first.</li></ul><p>Small steps. Deliberate choices. Compound returns.</p><h3>The Engineer Who Thanks You Won’t Be You</h3><p>When you add that log line, that metric, that trace you won’t get a thank you. It won’t show up in sprint demos. Product won’t celebrate it.</p><p>But somewhere, sometime, an engineer you’ve never met will be on-call. Something will break. They’ll open the dashboard. And they’ll see exactly what they need.</p><p>They’ll fix it in 20 minutes instead of 8 hours. They’ll go back to sleep. Their weekend won’t be ruined. Customers won’t be affected. Executives won’t get escalation emails.</p><p>They won’t know your name. They won’t know it was you who added that metric during development.</p><p>But they’ll be grateful anyway.</p><h3>Be the engineer who designs for the crisis before it happens. Think about the incident when you’re writing the code not after it’s burning in production. <strong>Because the next engineer on-call might be you.</strong></h3><p><em>Read more about operational sympathy: </em><a href="https://medium.com/@afkham-azeez/operational-sympathy-8a9c5dc26b5a"><em>https://medium.com/@afkham-azeez/operational-sympathy-8a9c5dc26b5a</em></a></p><p><em>Use the scorecard: </em><a href="https://docs.google.com/spreadsheets/d/1jryXy-aNQDoDgjMC8T2D5grdgP5bxQr-DwKJkB2hNfE/edit"><em>https://docs.google.com/spreadsheets/d/1jryXy-aNQDoDgjMC8T2D5grdgP5bxQr-DwKJkB2hNfE/edit</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ec1774e43001" width="1" height="1" alt=""><hr><p><a href="https://medium.com/operational-sympathy/the-180-000-log-line-hard-earned-lessons-in-production-observability-ec1774e43001">The $180,000 Log Line: Hard Earned Lessons in Production Observability</a> was originally published in <a href="https://medium.com/operational-sympathy">operational-sympathy</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Welcome!]]></title>
            <link>https://medium.com/operational-sympathy/welcome-1e3bec6e7787?source=rss----8e7fbff1207e---4</link>
            <guid isPermaLink="false">https://medium.com/p/1e3bec6e7787</guid>
            <category><![CDATA[sre]]></category>
            <category><![CDATA[software-architecture]]></category>
            <category><![CDATA[operational-sympathy]]></category>
            <dc:creator><![CDATA[Afkham Azeez]]></dc:creator>
            <pubDate>Wed, 18 Feb 2026 08:12:20 GMT</pubDate>
            <atom:updated>2026-02-18T08:12:20.740Z</atom:updated>
            <content:encoded><![CDATA[<p>Welcome to the Operational Sympathy publication. We are a team of writers who are passionate about the subject and will share our thoughts and concepts. The blog on <a href="https://afkham-azeez.medium.com/operational-sympathy-8a9c5dc26b5a">Operational Sympathy</a> introduced the concept and you can read more about it there.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*63NAr0SjHMG5SzeILeurlA.png" /></figure><h3>Definition</h3><blockquote>Operational Sympathy is a mindset and practice where software architects, designers, and developers intentionally design how their systems behave in production under load, during failures, and under security threats by planning failure modes, graceful degradation, built-in observability, and clear operational run books that enable early detection and fast recovery.</blockquote><p>The thinking would be, if you the developer were the person to be woken at 2 AM by an alert, what would you do to make your life easy so that the incident could be resolved with the least effort and shortest possible time.</p><p>If you are a software architect, developer, SRE or devops person, please subscribe to this publication to get notified about articles on this area.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1e3bec6e7787" width="1" height="1" alt=""><hr><p><a href="https://medium.com/operational-sympathy/welcome-1e3bec6e7787">Welcome!</a> was originally published in <a href="https://medium.com/operational-sympathy">operational-sympathy</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>