<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Causely</title>
    <description>The latest articles on Forem by Causely (@causely).</description>
    <link>https://forem.com/causely</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F8814%2Fbe76ae78-1f52-4c97-92aa-cdfec5be4fdd.png</url>
      <title>Forem: Causely</title>
      <link>https://forem.com/causely</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/causely"/>
    <language>en</language>
    <item>
      <title>How to Turn Slow Queries into Actionable Reliability Metrics with OpenTelemetry</title>
      <dc:creator>Severin Neumann</dc:creator>
      <pubDate>Wed, 04 Feb 2026 10:11:00 +0000</pubDate>
      <link>https://forem.com/causely/how-to-turn-slow-queries-into-actionable-reliability-metrics-with-opentelemetry-4blj</link>
      <guid>https://forem.com/causely/how-to-turn-slow-queries-into-actionable-reliability-metrics-with-opentelemetry-4blj</guid>
      <description>&lt;p&gt;Slow SQL queries degrade user experience, cause cascading failures, and turn simple operations into production incidents. The traditional fix? Collect more telemetry. But more telemetry means more things to look at, not necessarily more understanding.&lt;/p&gt;

&lt;p&gt;Instead of treating traces as a data stream we might analyze someday, we should be opinionated about what matters at the moment of decision. As we argued in &lt;a href="https://www.causely.ai/blog/the-signal-in-the-storm?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;&lt;em&gt;The Signal in the Storm&lt;/em&gt;&lt;/a&gt;, raw telemetry only becomes useful when we extract meaningful patterns.&lt;/p&gt;

&lt;p&gt;In this guide, you’ll build a repeatable workflow that turns OpenTelemetry database spans into span-derived metrics you can dashboard and alert on—so you can identify what’s slow, what matters most, and what just regressed.&lt;/p&gt;

&lt;p&gt;We’ll make this concrete with slow SQL queries, serving two use cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Optimization&lt;/strong&gt; : Which queries yield the most value if made faster, weighted by traffic?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incident response&lt;/strong&gt; : Which queries are behaving abnormally &lt;em&gt;right now&lt;/em&gt;?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’ll build a &lt;a href="https://github.com/causely-oss/slow-query-lab?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;lab&lt;/a&gt; where your app emits &lt;a href="https://opentelemetry.io/?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;OpenTelemetry&lt;/a&gt; traces, and we distill those into actionable metrics, starting with simple slow query detection, then adding traffic-weighted impact, and finally anomaly detection.&lt;/p&gt;

&lt;p&gt;Want to skip the theory? Jump to the Lab. But the context helps you understand what you’re building.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes a Query Slow?
&lt;/h2&gt;

&lt;p&gt;“Slow” isn’t a single problem. It’s a symptom with fundamentally different causes. A 50ms query might be fine for a reporting dashboard but catastrophic for checkout. As &lt;a href="https://www.oreilly.com/library/view/high-performance-mysql/9781449332471/?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;&lt;em&gt;High Performance MySQL&lt;/em&gt;&lt;/a&gt; emphasizes, understanding why a query is slow determines how to fix it. Here are the most common problems that may cause slow queries:&lt;/p&gt;

&lt;h3&gt;
  
  
  Excessive Work
&lt;/h3&gt;

&lt;p&gt;The database does more than necessary—typically full table scans due to missing or unusable indexes. Without an index on &lt;code&gt;customer_id&lt;/code&gt;, a simple &lt;code&gt;SELECT * FROM orders WHERE customer_id = $1&lt;/code&gt; grows from 20ms at 10K rows to minutes at 10M rows. The query didn’t change; the data volume did. See &lt;a href="https://use-the-index-luke.com/?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;&lt;em&gt;Use The Index, Luke!&lt;/em&gt;&lt;/a&gt; for the fundamentals.&lt;/p&gt;

&lt;p&gt;Aggregations and joins compound this. Even indexed queries can explode when the planner misjudges cardinality and chooses the wrong join strategy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resource Contention
&lt;/h3&gt;

&lt;p&gt;Perfectly optimized queries can be slow when waiting for resources. Lock contention blocks queries until other transactions release rows. Connection pool exhaustion adds latency before the query even starts. A query spending 95% of its time waiting for locks won’t be fixed by query optimization—it needs transaction redesign.&lt;/p&gt;

&lt;h3&gt;
  
  
  Environmental Pressure
&lt;/h3&gt;

&lt;p&gt;CPU saturation, I/O bottlenecks, and memory pressure can slow any query. The same SQL with the same plan performs completely differently under resource contention.&lt;/p&gt;

&lt;h3&gt;
  
  
  Plan Regressions
&lt;/h3&gt;

&lt;p&gt;Performance degrades when execution plans change—even with identical queries and data. Parameter-sensitive plans optimize for one set of values but fail for others. Stale statistics after bulk loads cause the planner to choose terrible strategies. The &lt;a href="https://www.postgresql.org/docs/current/performance-tips.html?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;PostgreSQL Performance Tips&lt;/a&gt; documentation covers how to catch these regressions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pathological Patterns
&lt;/h3&gt;

&lt;p&gt;Some slowness doesn’t appear in slow query logs. The N+1 problem executes 100 fast queries (2ms each) sequentially, adding 200ms latency plus network overhead. No individual query is “slow,” but the pattern is catastrophic.&lt;/p&gt;

&lt;h2&gt;
  
  
  The classic workflow: DB-native tooling + manual triage
&lt;/h2&gt;

&lt;p&gt;Databases ship with excellent diagnostic tools: slow query logs, query stores like PostgreSQL’s &lt;a href="https://www.postgresql.org/docs/current/pgstatstatements.html?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;&lt;code&gt;pg_stat_statements&lt;/code&gt;&lt;/a&gt;, and plan inspection with &lt;code&gt;EXPLAIN&lt;/code&gt;. These tell you what’s expensive inside the database.&lt;/p&gt;

&lt;p&gt;What they don’t provide is context. Which service triggered the slow query? Is it user-facing or background work? Does it correlate with the latency spike you’re investigating? You’re left with a list of slow queries and no signal about which ones matter most.&lt;/p&gt;

&lt;p&gt;Typically, someone bridges this gap manually: a developer notices a slow endpoint, brings the query to a DBA, and they optimize it together. This works, but that manual linking is exactly what we can automate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bringing Context to Slow Queries
&lt;/h2&gt;

&lt;p&gt;Database tools tell you what is slow, but not why it matters. When you find a slow query in your logs, you’re missing critical context: Which service triggered it? Is it user-facing or background work? Does it correlate with the latency spike you’re investigating?&lt;/p&gt;

&lt;p&gt;Distributed traces provide this context. Each database span is embedded in a request context—it knows which service, endpoint, and user triggered it.&lt;/p&gt;

&lt;p&gt;Instead of correlating database logs and traces after the fact, we analyze slow queries directly from traces with all the application context built in.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Building Blocks
&lt;/h2&gt;

&lt;p&gt;Now that we understand the philosophy and the value of context-rich traces, let’s look at the building blocks we’ll use to implement slow query analysis.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Observability Stack
&lt;/h3&gt;

&lt;p&gt;For our lab, we use the &lt;a href="https://opentelemetry.io/docs/collector/?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;OpenTelemetry Collector&lt;/a&gt; paired with &lt;a href="https://github.com/grafana/docker-otel-lgtm?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;docker-otel-lgtm&lt;/a&gt;—a pre-packaged stack from Grafana that bundles Loki, Grafana, Tempo, and Mimir in a single container. This gives us a complete observability environment with minimal setup.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Application
&lt;/h3&gt;

&lt;p&gt;Our sample application is a simple Go-based “Album API” that serves music album data from PostgreSQL. It’s intentionally designed to produce the kind of intermittent slow queries that are common in production. They services use &lt;a href="https://github.com/XSAM/otelsql?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;otelsql&lt;/a&gt; to instrument database calls, emitting spans with the &lt;a href="https://opentelemetry.io/docs/specs/semconv/database/?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;stable OpenTelemetry database semantic conventions&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Dashboards
&lt;/h3&gt;

&lt;p&gt;We’ll build three dashboards, each adding a layer of insight:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A simple view of the queries by duration&lt;/li&gt;
&lt;li&gt;Queries weighted by traffic to surface optimization opportunities&lt;/li&gt;
&lt;li&gt;Anomaly detection to identify queries deviating from their normal behavior&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Lab Setup
&lt;/h2&gt;

&lt;p&gt;Let’s put the theory into practice. We’ll clone a &lt;a href="https://github.com/causely-oss/slow-query-lab?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;sample application&lt;/a&gt;, start the observability stack, and explore three progressively more sophisticated approaches to slow query analysis. All you need is &lt;a href="https://www.docker.com/?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; installed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Clone and Run
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/causely-oss/slow-query-lab
cd slow-query-lab
docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once running, open Grafana at &lt;a href="http://localhost:3001/?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;http://localhost:3001&lt;/a&gt;—that’s where we’ll explore our dashboards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Queries by Duration
&lt;/h2&gt;

&lt;p&gt;The first dashboard takes the most direct approach: query Tempo for database spans and aggregate them to find queries that take the longest time. This is what you’d naturally build when you first start exploring traces for slow query analysis.&lt;/p&gt;

&lt;h3&gt;
  
  
  What It Shows
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Slow SQL - By Duration&lt;/strong&gt; dashboard queries traces directly using TraceQL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{ span.db.system != "" } | select(span.db.query.text, span.db.statement)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This finds all spans with database attributes, then uses Grafana transformations to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Group by&lt;/strong&gt; root operation (API endpoint) and SQL statement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aggregate&lt;/strong&gt; duration into mean, max, and count&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sort by&lt;/strong&gt; average duration (slowest first)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result is a table showing your slowest queries, which endpoints triggered them, and how often they occur.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F17d2ukqw1j0kmt4vz8ox.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F17d2ukqw1j0kmt4vz8ox.png" alt="How to Turn Slow Queries into Actionable Reliability Metrics with OpenTelemetry" width="800" height="214"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Slowest queries by root operation&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  What’s Good About This
&lt;/h3&gt;

&lt;p&gt;This approach gives you immediate visibility into queries with full application context:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can see exactly which SQL statements are taking the most time&lt;/li&gt;
&lt;li&gt;You know which API endpoints trigger them&lt;/li&gt;
&lt;li&gt;You have the count to understand frequency&lt;/li&gt;
&lt;li&gt;You can click through to individual traces for debugging&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s a first improvement over raw database logs because you’re already seeing the application context that makes slow queries actionable.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Limitation
&lt;/h3&gt;

&lt;p&gt;Here’s the problem: sorting by average duration doesn’t tell you which queries matter most.&lt;/p&gt;

&lt;p&gt;Consider two queries:&lt;/p&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Query&lt;/th&gt;
&lt;th&gt;Avg Duration&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Complex report&lt;/td&gt;
&lt;td&gt;2.3s&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search&lt;/td&gt;
&lt;td&gt;150ms&lt;/td&gt;
&lt;td&gt;10,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;p&gt;The complex report is “slower” by average duration, so it appears first. But the search query, despite being faster on average, runs 2,000 times more often. Its aggregate impact on your users is far greater.&lt;/p&gt;

&lt;p&gt;This dashboard tells you what’s slow, but not what’s &lt;em&gt;impactful&lt;/em&gt;. For that, we need to consider traffic volume.&lt;/p&gt;
&lt;h2&gt;
  
  
  Traffic-Weighted Impact Analysis
&lt;/h2&gt;

&lt;p&gt;The second dashboard addresses this limitation by introducing an &lt;strong&gt;impact score&lt;/strong&gt; : the product of average duration and call count.&lt;/p&gt;
&lt;h3&gt;
  
  
  What It Shows
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Slow SQL - Traffic Weighted&lt;/strong&gt; dashboard uses the same TraceQL query but adds a calculated field:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Impact = Avg Duration × Count
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This simple formula captures a key insight: a moderately slow query that runs thousands of times has more total impact than a very slow query that runs rarely. The dashboard sorts by impact score, surfacing the queries that matter most to your users.&lt;/p&gt;

&lt;p&gt;The dashboard also adds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Service breakdown&lt;/strong&gt; : See which service triggered each query&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency distribution&lt;/strong&gt; : Visualize duration over time, not just averages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Top queries by impact&lt;/strong&gt; : A quick view of where to focus optimization efforts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnt2mkr8fmwq1msgf8d7y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnt2mkr8fmwq1msgf8d7y.png" alt="How to Turn Slow Queries into Actionable Reliability Metrics with OpenTelemetry" width="800" height="212"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Highest impact queries by root operation&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  What’s Good About This
&lt;/h3&gt;

&lt;p&gt;Traffic-weighted impact gives you a much better prioritization signal for optimization work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High-volume, moderately-slow queries surface above rare-but-slow ones&lt;/li&gt;
&lt;li&gt;You can justify optimization work with concrete impact numbers&lt;/li&gt;
&lt;li&gt;The service and endpoint context helps you route issues to the right team&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When someone asks “which slow queries should we optimize first?”, this dashboard gives you a defensible answer. It’s exactly what you need for planning performance improvements.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Limitation
&lt;/h3&gt;

&lt;p&gt;But this dashboard is for optimization, not incident response. Even with traffic-weighted impact, it can’t answer a critical question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“What has changed?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Suppose your search query has an impact score of 150,000. Is that normal? Is it higher than yesterday? Higher than last week? The dashboard shows you a snapshot of current state, but it has no concept of baseline.&lt;/p&gt;

&lt;p&gt;This matters enormously during incidents. When latency spikes, you don’t just want to know “search queries are slow”—you want to know “search queries are slower than normal”. You need to distinguish between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A query that’s always been slow (known behavior, maybe acceptable)&lt;/li&gt;
&lt;li&gt;A query that just became slow (new problem, needs investigation)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without a baseline, every slow query looks the same. You’re left manually comparing current values to your memory of what’s “normal,” or digging through historical data to establish context.&lt;/p&gt;

&lt;p&gt;This is the gap that the third dashboard addresses.&lt;/p&gt;
&lt;h2&gt;
  
  
  Symptom Detection with Anomaly Baselines
&lt;/h2&gt;

&lt;p&gt;Because of these limitations, the third dashboard changes our approach: instead of just querying traces, we distill metrics from spans and then apply anomaly detection to identify deviations from normal behavior.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Setup
&lt;/h3&gt;

&lt;p&gt;For this dashboard, we add the &lt;code&gt;spanmetrics&lt;/code&gt; connector to the OpenTelemetry Collector. Here’s the relevant part of the collector configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;connectors:
  spanmetrics:
    dimensions:
      - name: db.system
        default: "unknown"
      - name: db.query.text
      - name: db.statement
      - name: db.name
        default: "unknown"
    exemplars:
      enabled: true

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [transform, batch]
      exporters: [spanmetrics, otlphttp/lgtm]

    metrics:
      receivers: [spanmetrics]
      processors: [batch]
      exporters: [otlphttp/lgtm]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;spanmetrics&lt;/code&gt; connector examines every database span and generates histogram metrics for query latency, labeled by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;service_name&lt;/code&gt;: Which service made the query&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;db_system&lt;/code&gt;: Database type (postgresql)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;db_query_text&lt;/code&gt; or &lt;code&gt;db_statement&lt;/code&gt;: The SQL query&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;db_name&lt;/code&gt;: Database name&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These metrics are stored in Mimir (the Prometheus-compatible backend in docker-otel-lgtm), where we can apply PromQL-based anomaly detection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anomaly Detection with Adaptive Baselines
&lt;/h3&gt;

&lt;p&gt;The sample app includes Prometheus recording rules from Grafana’s &lt;a href="https://github.com/grafana/promql-anomaly-detection?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;PromQL Anomaly Detection&lt;/a&gt; framework. These rules calculate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Baseline&lt;/strong&gt; : A smoothed average of historical values (what’s “normal”)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upper band&lt;/strong&gt; : Baseline + N standard deviations (upper threshold)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lower band&lt;/strong&gt; : Baseline - N standard deviations (lower threshold)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When current values exceed the bands, we have an anomaly—a clear signal that something has changed.&lt;/p&gt;

&lt;h3&gt;
  
  
  What It Shows
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Slow SQL - Anomaly Detection&lt;/strong&gt; dashboard displays:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Current latency&lt;/strong&gt; plotted against the adaptive baseline bands&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anomaly indicators&lt;/strong&gt; when latency exceeds normal bounds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-query breakdown&lt;/strong&gt; so you can see which specific queries are anomalous&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The key insight is the visual comparison: instead of just showing “p95 latency is 450ms”, it shows “p95 latency is 450ms, which is above the expected range of 200-350ms.”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwd3ya7iegcnsb9pmqwow.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwd3ya7iegcnsb9pmqwow.png" alt="How to Turn Slow Queries into Actionable Reliability Metrics with OpenTelemetry" width="800" height="256"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Query latency with anomaly bands&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why This Is Better
&lt;/h3&gt;

&lt;p&gt;This dashboard answers the question the previous one couldn’t: “What has changed?”&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A query that’s always slow (450ms baseline) won’t trigger anomalies when it runs at 450ms&lt;/li&gt;
&lt;li&gt;A query that’s normally fast (50ms baseline) will trigger anomalies if it suddenly runs at 200ms&lt;/li&gt;
&lt;li&gt;You get automatic context for what’s “normal” without maintaining manual thresholds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The anomaly detection acts as a symptom detector. It tells you: “This query is behaving differently than it usually does.” That’s a high-signal insight you can act on immediately.&lt;/p&gt;

&lt;h3&gt;
  
  
  From Metrics to Symptoms
&lt;/h3&gt;

&lt;p&gt;Notice what we’ve achieved with this architecture:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Raw telemetry&lt;/strong&gt; (traces) flows from the application&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distillation&lt;/strong&gt; (spanmetrics connector) extracts metrics from those traces&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anomaly detection&lt;/strong&gt; (Prometheus rules) identifies deviations from baseline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Symptoms&lt;/strong&gt; (anomalous queries) surface for investigation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We went from thousands of trace spans to a handful of anomaly signals that tell you exactly where to look.&lt;/p&gt;

&lt;h2&gt;
  
  
  Taking This to Production
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Metric Cardinality
&lt;/h3&gt;

&lt;p&gt;Raw SQL in metric labels will explode your metrics backend—&lt;code&gt;SELECT * FROM orders WHERE customer_id = 12345&lt;/code&gt; becomes a separate series per customer. Use prepared statements (so instrumentation captures templates, not literals), normalize query text, or use &lt;code&gt;aggregation_cardinality_limit&lt;/code&gt; in the spanmetrics connector.&lt;/p&gt;

&lt;h3&gt;
  
  
  Privacy
&lt;/h3&gt;

&lt;p&gt;SQL may contain sensitive data. The Collector is the ideal place to redact: drop or transform sensitive attributes before shipping downstream. This aligns with distillation: sanitize at the edge, not centrally.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anomaly Detection Baseline
&lt;/h3&gt;

&lt;p&gt;Adaptive rules need 24-48 hours of data to establish baselines. Start with wider bands and tighten as confidence grows.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Remaining Gap: From Symptoms to Root Causes
&lt;/h2&gt;

&lt;p&gt;Even with anomaly detection, you’re still looking at symptoms. In real-world incident scenarios, especially in large environments, slow queries are just one of many symptoms that pop up at once. You’re not only trying to understand the cause of this one; you’re triaging a flood of alerts and correlating many symptoms to find the real root cause.&lt;/p&gt;

&lt;p&gt;When the dashboard shows “search query latency spiked,” you know something changed. But you don’t know &lt;em&gt;why&lt;/em&gt; it changed. The root cause might be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A missing index after a schema migration&lt;/li&gt;
&lt;li&gt;Query plan regression due to stale statistics&lt;/li&gt;
&lt;li&gt;Lock contention from a concurrent batch job&lt;/li&gt;
&lt;li&gt;Resource pressure from a noisy neighbor on the database host&lt;/li&gt;
&lt;li&gt;Upstream service degradation causing retry storms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Connecting the symptom (“search query is slow”) to the root cause (“index was dropped during last night’s migration”) requires causal reasoning—understanding the relationships between system components and tracing the chain of causation from effect back to cause.&lt;/p&gt;

&lt;p&gt;You can absolutely do this reasoning yourself. Look at deployment timestamps, check for schema changes, investigate resource metrics, correlate with other symptoms. Good engineers do this every day.&lt;/p&gt;

&lt;p&gt;But it’s manual, time-consuming, and doesn’t scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  Going Beyond Symptoms with Causely
&lt;/h3&gt;

&lt;p&gt;This is where Causely comes in: Causely extracts slow queries (and other symptoms) as distilled insights out of the box—the same pattern we implemented manually. But it goes further:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.causely.ai/getting-started/how-causely-works/?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;&lt;strong&gt;Causal model&lt;/strong&gt;&lt;/a&gt;: Slow queries are connected into a model of your system’s dependencies. You can see what they &lt;em&gt;impact&lt;/em&gt; (which endpoints, which users) and what &lt;em&gt;causes&lt;/em&gt; them (resource constraints, upstream failures, configuration changes).&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.causely.ai/in-action/root-causes/?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;&lt;strong&gt;Root cause identification&lt;/strong&gt;&lt;/a&gt;: Instead of showing you a list of symptoms to investigate, Causely traces causation chains to identify the underlying root cause. “Search queries are slow &lt;em&gt;because&lt;/em&gt; the index was dropped.”&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.causely.ai/in-action/ask-causely/?ref=causely-blog.ghost.io#analyzing-slow-sql-queries" rel="noopener noreferrer"&gt;&lt;strong&gt;Actionable recommendations&lt;/strong&gt;&lt;/a&gt;: AskCausely helps you get to “what should we change?”—whether that’s adding an index, reverting a deployment, or addressing the upstream pressure that made the query slow in the first place.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pattern we built in this post—distill, detect anomalies, surface symptoms—is the foundation. Causely is the natural next step: turning symptoms into root causes at scale.&lt;/p&gt;

&lt;p&gt;Want to see how Causely connects your slow queries to their root causes? &lt;a href="https://www.causely.ai/try?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;Try it yourself&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fudatbb35lga41agzbhmf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fudatbb35lga41agzbhmf.png" alt="How to Turn Slow Queries into Actionable Reliability Metrics with OpenTelemetry" width="800" height="911"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Ask Causely about slow queries&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opentelemetry</category>
      <category>sql</category>
      <category>postgres</category>
    </item>
    <item>
      <title>When Asynchronous Systems Fail Quietly, Reliability Teams Pay the Price</title>
      <dc:creator>Severin Neumann</dc:creator>
      <pubDate>Wed, 28 Jan 2026 20:19:59 +0000</pubDate>
      <link>https://forem.com/causely/when-asynchronous-systems-fail-quietly-reliability-teams-pay-the-price-2h1c</link>
      <guid>https://forem.com/causely/when-asynchronous-systems-fail-quietly-reliability-teams-pay-the-price-2h1c</guid>
      <description>&lt;p&gt;In our previous post, &lt;a href="https://www.causely.ai/blog/queue-growth-dead-letter-queues-and-why-asynchronous-failures-are-easy-to-misread?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;&lt;u&gt;Queue Growth, Dead Letter Queues, and Why Asynchronous Failures Are Easy to Misread&lt;/u&gt;&lt;/a&gt;, we described a failure pattern that plays out repeatedly in modern systems built on asynchronous messaging. &lt;/p&gt;

&lt;p&gt;A queue starts to grow slowly. Nothing looks obviously broken at first. Publish calls are succeeding and consumers are still running, just not quite keeping up. Over time, messages begin to age out, and dead-letter queues start accumulating entries. Downstream services that depend on those messages begin to behave unpredictably. There are partial data, delayed processing and subtle customer-facing issues that are hard to tie back to a single event. By the time the impact is visible in latency or error rates elsewhere in the system, the original cause is buried several layers upstream and hours in the past. &lt;/p&gt;

&lt;p&gt;Teams do not miss these failures because they lack data. They miss them because the signals do not point clearly to the cause. &lt;/p&gt;

&lt;p&gt;Over the past several weeks, we’ve expanded Causely’s asynchronous and messaging queue capabilities to make these failures explicit, explainable, and actionable. This includes:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Expanding Causal Model for&lt;a href="https://docs.causely.ai/changelog/v1.0.108/?ref=causely-blog.ghost.io#expanded-messaging-queue-causal-model" rel="noopener noreferrer"&gt; &lt;u&gt;Amazon&lt;/u&gt; &lt;u&gt;SNS&lt;/u&gt; &lt;u&gt;and&lt;/u&gt; &lt;u&gt;SQS and RabbitMQ&lt;/u&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;A new &lt;a href="https://docs.causely.ai/reference/root-causes/applications/?ref=causely-blog.ghost.io#producer-publish-rate-spike" rel="noopener noreferrer"&gt;&lt;u&gt;Producer Publish Rate Spike&lt;/u&gt;&lt;/a&gt; root cause
&lt;/li&gt;
&lt;li&gt;And adding &lt;a href="https://docs.causely.ai/changelog/v1.0.109/?ref=causely-blog.ghost.io#expanded-causal-model-for-asynchronous-communications" rel="noopener noreferrer"&gt;&lt;u&gt;Queue Size Growth and Dead-letter Queue&lt;/u&gt;&lt;/a&gt; as first class symptoms to our model
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Reliability Blind Spot in Messaging-Driven Architectures&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Asynchronous communication is foundational to how modern systems scale. The same advantages systems like Kafka and RabbitMQ provide, decoupling services and absorbing traffic spikes, also introduce new reliability challenges. &lt;/p&gt;

&lt;p&gt;The core issue is not that these systems fail quietly, but that cause and effect are separated. A producer can overload the system without returning errors. A broker can continue accepting traffic while consumers fall behind. By the time downstream symptoms appear, the triggering behavior has often already passed. &lt;/p&gt;

&lt;p&gt;For engineering managers and or those on the frontline of the on-call slack channel, this creates a familiar and frustrating dynamic. Reliability degrades without a clear trigger. Incident response turns into a debate about whether the producer or consumer is responsible. Teams chase anomalies across dashboards while backlogs continue to grow. By the time a decisive action is taken, the customer impact is already real. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why Traditional Observability Falls Short&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Metrics, logs, and traces are excellent at answering local questions. They tell you what a service is doing, how long an operation took, or how many messages are currently sitting in a queue. &lt;/p&gt;

&lt;p&gt;What they do not provide is causal understanding across asynchronous boundaries. &lt;/p&gt;

&lt;p&gt;In messaging-driven systems, cause and effect are separated in time and space. A spike in publish rate from one service may not create visible impact until hours later, in a different service, owned by a different team. A slow consumer may be the result of downstream backpressure rather than a defect in the consumer itself. Dead-letter queues tell you that messages failed, but not why the system reached that state. &lt;/p&gt;

&lt;p&gt;Without a causal model of how producers, exchanges, queues, and consumers interact, teams are forced to infer failures indirectly. That inference is slow, fragile, and heavily dependent on tribal knowledge. Under pressure, it leads to overcorrection, unnecessary rollbacks, and missed root causes. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Expanding the Causal Model for Messaging Systems&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To close this gap, we have significantly expanded Causely’s causal model for asynchronous messaging systems. &lt;/p&gt;

&lt;p&gt;Rather than treating queues as opaque buffers, Causely now models messaging infrastructure the way it actually operates in production. Producers, exchanges, queues, and consumers are represented as distinct entities with explicit relationships and data flows. This applies across common technologies, including Amazon SQS, Amazon SNS, and RabbitMQ, whether used in simple queue mode or exchange-based pub/sub patterns. &lt;/p&gt;

&lt;p&gt;By modeling the topology directly, Causely can reason about how work enters the system, how it is routed, where it accumulates, and how pressure propagates across services. This makes it possible to explain failures that previously required intuition and guesswork. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7idzjqnyjqzk0d62avnv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7idzjqnyjqzk0d62avnv.png" alt="When Asynchronous Systems Fail Quietly, Reliability Teams Pay the Price" width="800" height="488"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Causely Dataflow Map makes it easy for engineers to understand how data moves between services and exchanges and queues that make up Amazon SQS and SNS and RabbitMQ&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Making Queue Growth and Dead-Letter Failures First-Class Signals&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;We have also expanded the causal model to treat queue size growth and dead-letter queue activity as first-class symptoms, not secondary indicators. &lt;/p&gt;

&lt;p&gt;This changes how asynchronous failures are diagnosed. Instead of surfacing queue metrics as passive signals, Causely reasons about them causally, linking backlog growth and dead-letter events directly to the producers, consumers, and operations involved. &lt;/p&gt;

&lt;p&gt;As a result, queue-related failures are no longer inferred indirectly from downstream latency or error spikes. The failure mode is explicit, explainable, and traceable to the point where intervention is most effective.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;A New Root Cause: Producer Publish Rate Spike&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;One of the most common and least understood asynchronous failure modes is a sudden change in publish behavior. Causely now includes a dedicated root cause for this pattern: Producer Publish Rate Spike. &lt;/p&gt;

&lt;p&gt;This occurs when a service, HTTP path, or RPC method begins publishing messages at a significantly higher rate than normal. The increase may be triggered by a code change, a configuration update, or an unexpected shift in traffic patterns. Downstream queues absorb the initial surge, but consumers cannot keep up indefinitely. Queue depth grows, message age increases, and backpressure begins to affect the rest of the system. &lt;/p&gt;

&lt;p&gt;What makes this failure particularly dangerous is that the producer often looks healthy. Publish requests succeed, error rates remain low, and nothing appears obviously wrong at the source. Without causal reasoning, teams frequently blame consumers or infrastructure capacity, missing the true trigger entirely. &lt;/p&gt;

&lt;p&gt;Causely now detects this condition explicitly. It ties unexpected increases in publish rate to queue growth, consumer pressure, and downstream service degradation, making the failure both visible and explainable. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbjh5yrkwhbcbc0gn2ab3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbjh5yrkwhbcbc0gn2ab3.png" alt="When Asynchronous Systems Fail Quietly, Reliability Teams Pay the Price" width="800" height="382"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Understanding the cause of increased queue depths , causing performance degradation&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What This Changes for Reliability Teams&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;For teams responsible for revenue-critical services, these capabilities change how asynchronous failures are handled in practice. &lt;/p&gt;

&lt;p&gt;Instead of reacting after queues are saturated and customers are impacted, teams can see which producer initiated the failure, how pressure propagated through the messaging system, and where intervention will have the greatest effect. Slow consumers, misconfigured routing, and unexpected publish spikes are distinguished clearly rather than conflated into a single “queue issue.” &lt;/p&gt;

&lt;p&gt;This shortens incident response, reduces unnecessary mitigation, and eliminates the finger-pointing that often arises when failures span multiple teams. More importantly, it enables a proactive reliability posture in systems that are constantly changing. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Asynchronous Reliability Without Guesswork&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Asynchronous architectures are essential for scale, but they demand a different approach to reliability than synchronous request paths. &lt;/p&gt;

&lt;p&gt;With its expanded messaging and asynchronous causal model, Causely provides deterministic, explainable reasoning over how data flows through your system. Teams do not need to stitch together dashboards to reconstruct timelines after the fact. They do not need to trust black-box AI summaries that cannot explain their conclusions. They no longer have to exhaustively eliminate possibilities to arrive at a root cause. &lt;/p&gt;

&lt;p&gt;Instead, they get clear answers to the questions that matter most: what is breaking, why it is breaking, and where to act first to protect reliability and revenue.&lt;/p&gt;

</description>
      <category>causely</category>
      <category>async</category>
      <category>sre</category>
    </item>
    <item>
      <title>Alerts Aren’t the Investigation</title>
      <dc:creator>Severin Neumann</dc:creator>
      <pubDate>Thu, 22 Jan 2026 16:59:39 +0000</pubDate>
      <link>https://forem.com/causely/alerts-arent-the-investigation-161j</link>
      <guid>https://forem.com/causely/alerts-arent-the-investigation-161j</guid>
      <description>&lt;p&gt;PagerDuty fires: CheckoutAPI burn rate (2m/1h). Grafana shows p99 going from ~120ms to ~900ms. Retries doubled. DB CPU is flat, but checkout pods are throttling and a downstream dependency’s error budget is evaporating. Ten minutes in, you’ve collected artifacts, not understanding.&lt;/p&gt;

&lt;p&gt;If you’ve been on call, you’ve seen this movie.&lt;/p&gt;

&lt;p&gt;This is also why plenty of “AI-powered observability” rollouts still don’t change the lived experience of on-call. Leadership expects response times to improve. On-call gets richer dashboards, smarter summaries, and more plausible explanations. To be fair, those do help with faster lookup and briefing in the room, but the social reality stays the same: alerts get silenced in PagerDuty, rules get tagged as “flappy,” and old pages keep firing long after anyone can justify what they were meant to protect. The problem isn’t effort. It’s that the page still doesn’t reliably collapse into shared understanding. Call it the Page-to-Understanding Gap: the time and coordination cost of turning a threshold into a system story.&lt;/p&gt;

&lt;p&gt;Alerts are supposed to start an investigation. Too often, they start translation: &lt;em&gt;what is the system doing right now?&lt;/em&gt; That translation slows containment, splinters context, and stretches customer impact. &lt;/p&gt;

&lt;p&gt;That decoding work is what incident response depends on, yet it’s rarely made explicit. It’s why MTTR gains often plateau even after teams invest heavily in monitoring and dashboards. &lt;/p&gt;

&lt;h2&gt;
  
  
  Alerts are a paging interface, not a language of explanation
&lt;/h2&gt;

&lt;p&gt;Alerting is optimized for one job: interrupt a human at the right moment. &lt;/p&gt;

&lt;p&gt;So alerts are built from what’s easiest to express at scale: thresholds, proxy signals, and rules that “usually work.” They encode operational history, not system truth. &lt;/p&gt;

&lt;p&gt;That’s not a failure of alerting. It’s what alerting is for, but it also makes alerts a shaky foundation for understanding. They’re a simplified label over messy reality. When alerts aren’t grounded in clear definitions of “healthy” behavior, the signal loses meaning and teams stop trusting it. &lt;/p&gt;

&lt;h2&gt;
  
  
  One alert name can mean multiple different realities
&lt;/h2&gt;

&lt;p&gt;Take a familiar page: “latency high,” or the modern equivalent: an SLO burn rate page. &lt;/p&gt;

&lt;p&gt;Burn rate fires on checkout. You assume checkout is slow, start in the service dashboard, see p99 up, then notice retries doubled. Meanwhile, Slack is already split: “DB” vs. “checkout.” Fifteen minutes later you realize a downstream dependency is brownouting and checkout is just drowning in retries. The giveaway is usually the shape: one hop shows rising timeouts and retry storms while upstream looks "healthy" until it saturates. The alert didn’t lie—it just didn’t tell you what you needed first. &lt;/p&gt;

&lt;p&gt;The page looks identical. The mechanism isn’t. &lt;/p&gt;

&lt;p&gt;So teams build muscle memory around “what usually causes this,” and it works—until the system changes just enough that it stops working. Scale and change are exactly what modern organizations optimize for, so the failure mode is guaranteed. When that happens, the alert doesn’t just wake you up. It points you in the wrong direction. &lt;/p&gt;

&lt;h2&gt;
  
  
  Many alerts can describe the same underlying behavior
&lt;/h2&gt;

&lt;p&gt;The reverse problem happens just as often. A single degradation creates a cascade of pages across services: latency, errors, saturation, queueing, burn rate alarms. Each is technically “true,” but treating them as separate problems creates thrash. &lt;/p&gt;

&lt;p&gt;People split into parallel investigations, duplicate context gathering, and argue about which page is “the real one.” Context fragments across Slack threads and war rooms, ownership ping‑pongs, and escalations get noisy. By the time you agree which page is “primary,” you’ve already created a coordination incident. The outcome isn’t just wasted engineer time—it’s that nobody has one shared narrative everyone can repeat while impact is unfolding. The incident becomes less about understanding and more about sorting competing signals. This is how alert fatigue turns into incident fatigue. &lt;/p&gt;

&lt;h2&gt;
  
  
  The silent gap: important behavior you don’t alert on
&lt;/h2&gt;

&lt;p&gt;The costly ones are the slow degradations that ship impact before they page. &lt;/p&gt;

&lt;p&gt;A dependency gets a little slower. Retries creep up. One critical route starts timing out for a slice of customers. Averages look fine. Thresholds don’t trip. You don’t notice until the page fires, or until customers do. &lt;/p&gt;

&lt;p&gt;It’s not that teams don’t care. It’s that these behaviors don’t fit neatly into alert rules: risk builds up, dependencies decay, partial impact hides in aggregates, and propagation only makes sense once you’ve traced it end to end. &lt;/p&gt;

&lt;p&gt;Most alerts only get defined after you’ve understood the behavior in the middle of an incident. The post-mortem produces a new rule and a brief feeling of closure. Then traffic shifts, dependencies evolve, and the next incident arrives with a different shape. You’re never done. &lt;/p&gt;

&lt;p&gt;So teams find these late, after impact is already underway, when time is most expensive. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why teams don’t switch investigation entry points
&lt;/h2&gt;

&lt;p&gt;When teams adopt a new investigation system, they often ask a simple question: “Does it match our alerts?” &lt;/p&gt;

&lt;p&gt;What they’re really asking is: “Can I trust this in the first 90 seconds?” Because in the first minute, the primary goal isn’t elegance, it’s not making it worse.&lt;/p&gt;

&lt;p&gt;A system that generates more hypotheses doesn’t help if it can’t connect the page to what the system is doing in a way the on-call trusts. &lt;/p&gt;

&lt;p&gt;If the system describes an incident in a different language than the alert model engineers rely on, mismatches get interpreted as duplication, contradiction, or risk. The result is predictable: people consult it late, after they’ve already committed to a direction. &lt;/p&gt;

&lt;p&gt;Even correct insights arrive too late to change behavior. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why this problem is getting worse
&lt;/h2&gt;

&lt;p&gt;Systems are becoming more dynamic: more dependencies, faster deploys, and more integration points. Deploy frequency keeps climbing—and AI-assisted coding is only accelerating it—so the number of failure paths keeps growing. Meanwhile, alert fatigue is already high, and teams are hesitant to change workflows mid-incident. &lt;/p&gt;

&lt;p&gt;Better tooling can speed up lookup and correlation, but it can’t compensate for an alerting model that no longer maps cleanly to real system behavior. &lt;/p&gt;

&lt;p&gt;So the interpretation workload keeps rising. Every page demands more interpretation, more cross-checking, more manual stitching of symptoms into a coherent story. &lt;/p&gt;

&lt;h2&gt;
  
  
  What’s actually broken
&lt;/h2&gt;

&lt;p&gt;Most organizations are operating with two different languages: the language of paging and the language of understanding. The persistent MTTR plateau is the Page-to-Understanding Gap between them.&lt;/p&gt;

&lt;p&gt;Incidents start with the first, but the work happens in the second. &lt;/p&gt;

&lt;h2&gt;
  
  
  A better way to think about alerts
&lt;/h2&gt;

&lt;p&gt;Alerts are not the investigation. They’re a notification that something is going sideways. &lt;/p&gt;

&lt;p&gt;The goal is not to tune thresholds until the noise feels tolerable. It’s to shorten the time from page to shared understanding: what behavior is emerging, what changed, what’s being impacted—and whether it matters to the business. &lt;/p&gt;

&lt;p&gt;Treating that translation as unwritten know‑how is not a workflow quirk. It’s a structural weakness. If your incident response starts with decoding alerts, you’re spending your best engineers on interpretation instead of containment.&lt;/p&gt;

</description>
      <category>alerts</category>
      <category>causely</category>
      <category>investigation</category>
    </item>
    <item>
      <title>Queue Growth, Dead-Letter Queues, and Why Asynchronous Failures Are Easy to Misread</title>
      <dc:creator>Severin Neumann</dc:creator>
      <pubDate>Tue, 20 Jan 2026 19:18:45 +0000</pubDate>
      <link>https://forem.com/causely/queue-growth-dead-letter-queues-and-why-asynchronous-failures-are-easy-to-misread-ng2</link>
      <guid>https://forem.com/causely/queue-growth-dead-letter-queues-and-why-asynchronous-failures-are-easy-to-misread-ng2</guid>
      <description>&lt;p&gt;Asynchronous pipelines sit at the core of most modern systems. Message brokers accept traffic, consumers process it in the background, and downstream services depend on the results.&lt;/p&gt;

&lt;p&gt;When these systems fail, the failure rarely shows up where it starts.&lt;/p&gt;

&lt;p&gt;Teams often notice stale data, degraded behavior, or latency spikes elsewhere in the system. By the time those symptoms appear, the underlying problem has usually been present for some time.&lt;/p&gt;

&lt;p&gt;In many real-world failures, two signals appear earlier: &lt;strong&gt;queue growth&lt;/strong&gt; and &lt;strong&gt;dead-letter queues&lt;/strong&gt;. They are widely monitored, but they are still widely misunderstood.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The common misunderstanding&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Queues are often treated as infrastructure components rather than behavioral signals. When a queue grows, it is attributed to load. When messages land in a DLQ, it is treated as a retry policy doing its job. Investigation tends to focus downstream, where symptoms are visible.&lt;/p&gt;

&lt;p&gt;This framing obscures where asynchronous systems actually break. In many failures, message brokers continue to accept traffic normally. Producers succeed. Nothing looks obviously down. The problem is that consumers are no longer able to keep up reliably or consistently. That distinction matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Queue growth is not just volume&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Queue growth occurs when messages arrive faster than they can be processed successfully over time. This does not require a traffic spike. It can result from: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consumers slowing due to code changes or resource pressure &lt;/li&gt;
&lt;li&gt;Dependencies becoming latent or unreliable &lt;/li&gt;
&lt;li&gt;Retry rates increasing &lt;/li&gt;
&lt;li&gt;Backpressure failing to engage &lt;/li&gt;
&lt;li&gt;Partition skew concentrating work unevenly &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In these cases, the broker behaves correctly. Messages are accepted. The queue grows quietly. What is accumulating is &lt;strong&gt;lag&lt;/strong&gt;. A sustained backlog means work is no longer flowing through the system at the intended rate, even if no explicit failures are visible yet.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why this matters before anything looks broken&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Asynchronous systems are designed to absorb instability. Queues buffer mismatches. Retries smooth over failures. Backlogs delay visible impact. This is useful, but it also postpones feedback. As queues grow: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Processing time increases &lt;/li&gt;
&lt;li&gt;Derived state falls behind &lt;/li&gt;
&lt;li&gt;Downstream services operate on increasingly stale or incomplete data &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The transition from “degraded” to “broken” often appears sudden because the system has been accumulating lag for some time before any external threshold is crossed. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Dead-letter queues signal a different failure&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Dead-letter queues exist to capture messages that cannot be processed successfully. Messages land there after repeated failures, timeouts, or deterministic errors. DLQs prevent infinite retries and protect the main pipeline. What they represent is not transient instability, but &lt;strong&gt;persistent processing failure under current system behavior&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;A non-empty DLQ means some class of messages cannot be handled as the system is currently operating. That incompatibility can come from: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Broken contracts between producers and consumers &lt;/li&gt;
&lt;li&gt;Partial or skewed deployments &lt;/li&gt;
&lt;li&gt;Schema drift &lt;/li&gt;
&lt;li&gt;Unhandled edge cases &lt;/li&gt;
&lt;li&gt;Dependencies that fail consistently rather than intermittently &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DLQs often grow alongside backlogs, but they can also appear independently. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why these problems are so common&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In real systems, producers and consumers evolve independently. Load shifts. Dependencies degrade. Retry behavior changes system dynamics in non-obvious ways. It is common for: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Brokers to continue accepting traffic &lt;/li&gt;
&lt;li&gt;Queues to grow steadily &lt;/li&gt;
&lt;li&gt;Consumers to fail intermittently or slow down &lt;/li&gt;
&lt;li&gt;Processing failures to accumulate quietly &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Operationally, queues and DLQs sit between services. They rarely have clear ownership. They are easy to monitor superficially and hard to reason about in context. As a result, many teams only notice these issues once downstream behavior degrades.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Queue growth and DLQs are related, but distinct&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Queue growth and DLQs are often discussed together, but they answer different questions. &lt;/p&gt;

&lt;p&gt;Queue growth asks: "Are messages flowing through the system fast enough?"&lt;/p&gt;

&lt;p&gt;DLQs ask:  "Are some messages failing to be processed at all?"&lt;/p&gt;

&lt;p&gt;In many incidents, sustained queue growth precedes DLQs. Consumers slow down, retries increase, and retry limits are eventually exceeded. In others, DLQs appear immediately due to deterministic processing failures, even while queue depth looks healthy. Treating one as a proxy for the other creates blind spots. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The deeper diagnostic challenge&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Most teams diagnose asynchronous failures indirectly. They look at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Latency spikes &lt;/li&gt;
&lt;li&gt;Error rates &lt;/li&gt;
&lt;li&gt;Timeouts &lt;/li&gt;
&lt;li&gt;User-visible symptoms &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those signals matter, but they are downstream effects. Earlier and more precise signals exist inside the message pipeline itself: where messages are accepted, where they slow down, and where they fail to be processed reliably. When those signals are ignored or misinterpreted, teams spend time chasing symptoms rather than isolating where the workflow is actually breaking.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;A better way to think about queues&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Queues are not just buffers. Queue growth is not harmless backlog. Dead-letter queues are not operational exhaust. They are indicators of whether asynchronous workflows are functioning as intended or quietly degrading under real conditions. &lt;/p&gt;

&lt;p&gt;The goal is not to watch queue depth, instead, it’s to continuously understand flow: where work accumulates, why it accumulates, and which downstream interactions it impacts. &lt;/p&gt;

&lt;p&gt;Understanding them is not an optimization. It is foundational to operating reliable, event-driven systems.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>microservices</category>
      <category>performance</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Slight Reliability EP 113: AI Use-cases for SRE with Shmuel Kliger</title>
      <dc:creator>Severin Neumann</dc:creator>
      <pubDate>Mon, 12 Jan 2026 19:31:00 +0000</pubDate>
      <link>https://forem.com/causely/slight-reliability-ep-113-ai-use-cases-for-sre-with-shmuel-kliger-38ge</link>
      <guid>https://forem.com/causely/slight-reliability-ep-113-ai-use-cases-for-sre-with-shmuel-kliger-38ge</guid>
      <description>&lt;p&gt;From the day we invented computers we've been struggling to keep applications running and delivering services to the business. Is this latest wave of AI helping or hurting us?  &lt;/p&gt;

&lt;p&gt;This week I'm joined by Causely founder Shmuel Kliger to dive into...  &lt;/p&gt;

&lt;p&gt;🌊 The three waves of AI hype over the decades (the history of AI)&lt;br&gt;&lt;br&gt;
☠️ The dangers of over-promising and under-delivering what AI can do&lt;br&gt;&lt;br&gt;
🧠 What is causal reasoning?&lt;br&gt;&lt;br&gt;
😱 Is AI replacing SREs?&lt;br&gt;&lt;br&gt;
🔮 AI as a way to allow humans to solve higher level problems&lt;/p&gt;

&lt;p&gt;Find the full conversation on YouTube: &lt;a href="https://www.youtube.com/watch?v=e1L9YE7igz4" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=e1L9YE7igz4&lt;/a&gt;&lt;/p&gt;

</description>
      <category>causality</category>
      <category>devopssre</category>
      <category>podcast</category>
    </item>
    <item>
      <title>Causely Expands Datadog Integration to Deliver Causal Intelligence Across Hybrid Environments</title>
      <dc:creator>Severin Neumann</dc:creator>
      <pubDate>Mon, 22 Dec 2025 14:43:25 +0000</pubDate>
      <link>https://forem.com/causely/causely-expands-datadog-integration-to-deliver-causal-intelligence-across-hybrid-environments-1mn8</link>
      <guid>https://forem.com/causely/causely-expands-datadog-integration-to-deliver-causal-intelligence-across-hybrid-environments-1mn8</guid>
      <description>&lt;p&gt;Causely is expanding its &lt;a href="https://www.datadoghq.com/?ref=dev.to"&gt;Datadog&lt;/a&gt; integration to address a problem every senior engineering team eventually runs into: observability data keeps growing, but confidence during incidents does not. Even with Datadog APM, infrastructure metrics, and monitors deployed everywhere, engineers are still forced to interpret symptoms and argue about which change or dependency actually caused an outage. The issue is not missing telemetry. It is the lack of a system-level understanding of cause and effect. &lt;/p&gt;

&lt;p&gt;This limitation becomes especially visible in modern, hybrid architectures. Services span Kubernetes clusters, standalone EC2 instances, ECS tasks, and legacy infrastructure, all connected through real production traffic. Datadog can surface signals across these environments, but understanding how failures propagate across those boundaries remains a manual, error-prone exercise. The result is slower recovery, repeated incidents, and reduced confidence in change. &lt;/p&gt;

&lt;p&gt;With this &lt;a href="https://docs.causely.ai/telemetry-sources/datadog/?ref=dev.to"&gt;expanded Datadog integration&lt;/a&gt;, Causely gives teams a unified, causal model of their entire application across Kubernetes and non-Kubernetes environments. This model that explains &lt;em&gt;why&lt;/em&gt; services are impacted, not just &lt;em&gt;where&lt;/em&gt; symptoms appear. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;From Observability Signals to System Understanding&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Many teams already rely on Datadog APM, infrastructure metrics, and monitors as the backbone of their observability stack. With Causely’s expanded support, those same Datadog signals can now be used to build a complete and accurate causal model of the system without changing existing instrumentation. &lt;/p&gt;

&lt;p&gt;Causely supports Datadog APM dual shipping, which allows trace data to be sent directly from the Datadog collector into Causely’s mediator. Teams continue using Datadog exactly as they do today, while Causely consumes the same traces for causal reasoning. This approach avoids additional agents, avoids data duplication, and does not introduce new egress costs. &lt;/p&gt;

&lt;p&gt;Just as importantly, Causely now supports services running outside Kubernetes and keeps causality intact across the hybrid boundary. By tagging Datadog APM traces with host identity metadata, Causely can stitch together services running on EC2 with those running inside Kubernetes clusters. What previously broke at environment boundaries becomes a single, end-to-end behavioral model of how the application actually runs in production. &lt;/p&gt;

&lt;p&gt;Datadog monitors can also be ingested directly into Causely and treated as symptoms rather than conclusions. Instead of reacting to alerts in isolation, Causely uses them as signals that inform its understanding of what is happening in the system and why. That’s how you get faster convergence, fewer false leads, and higher confidence in the fix. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;A Real-World Hybrid Application Scenario&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Consider a typical production application. Customer-facing APIs and frontend services run in a Kubernetes cluster. Background workers, billing services, or legacy processing jobs run on standalone EC2 instances. The application depends on shared infrastructure such as Postgres, Redis, and external APIs. Datadog is already deployed across all of it. &lt;/p&gt;

&lt;p&gt;Under normal conditions, everything appears healthy. Then, during a traffic spike, latency starts creeping up in one of the Kubernetes services. Shortly after, Datadog monitors begin firing for elevated error rates in downstream components. Engineers open dashboards, inspect traces, and try to correlate timelines across environments. The symptoms are visible, but the cause is not obvious. &lt;/p&gt;

&lt;p&gt;This is where Causely changes the workflow. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flel7ctz3v4lt5c090wpj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flel7ctz3v4lt5c090wpj.png" alt="Causely Expands Datadog Integration to Deliver Causal Intelligence Across Hybrid Environments" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
_Causely leverages Datadog APM dual shipping as input to build its own model of service dependencies, infrastructure, and data flows. _&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8sqhz4c7t7hk4tmglwoo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8sqhz4c7t7hk4tmglwoo.png" alt="Causely Expands Datadog Integration to Deliver Causal Intelligence Across Hybrid Environments" width="800" height="784"&gt;&lt;/a&gt;&lt;br&gt;
_Causely leverages Datadog APM dual shipping as input to build its own model of service dependencies, infrastructure, and data flows. _&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbbv0gu4csgbftjdpvmr1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbbv0gu4csgbftjdpvmr1.png" alt="Causely Expands Datadog Integration to Deliver Causal Intelligence Across Hybrid Environments" width="800" height="485"&gt;&lt;/a&gt;&lt;br&gt;
_Causely leverages Datadog APM dual shipping as input to build its own model of service dependencies, infrastructure, and data flows. _&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Automatically Pinpointing the True Cause&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Using Datadog traces, infrastructure metadata, and monitor events, Causely continuously reconstructs end-to-end request paths and dependencies across Kubernetes and EC2. That continuity holds across environment boundaries, so you don’t have to manually stitch together “what talks to what” in the middle of an incident.  Instead of reacting to individual alerts, Causely continuously builds and maintains a behavioral model of the entire system. This model captures how services, infrastructure, and data flows interact, and how specific failure modes produce observable symptoms. &lt;/p&gt;

&lt;p&gt;Datadog APM traces provide the raw evidence of system behavior, including service interactions, request paths, and downstream dependencies. Datadog monitors are ingested and mapped as symptoms within Causely’s knowledge base. Together, these signals allow Causely to maintain an up-to-date causal model that explicitly links observed symptoms to the conditions and changes that produced them. &lt;/p&gt;

&lt;p&gt;Because this causal model is updated continuously, Causely can explain not just what is failing, but what changed first, how the impact propagated, and why specific services or endpoints are affected. The result is a precise, system-level explanation of performance degradation that teams can act on immediately. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzegws0ssmfcnybt5s41z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzegws0ssmfcnybt5s41z.png" alt="Causely Expands Datadog Integration to Deliver Causal Intelligence Across Hybrid Environments" width="800" height="256"&gt;&lt;/a&gt;&lt;br&gt;
_Using the system-level understanding, Causely applies its knowledge base of known failure patterns to infer the exact root cause driving service degradation. _&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;From Incident Response to Reliability Assurance&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This expanded Datadog integration is not just about faster root cause analysis during incidents. By continuously modeling system behavior, Causely enables teams to validate reliability before changes reach production, monitor how reliability evolves over time, and detect drift caused by infrastructure or configuration changes. &lt;/p&gt;

&lt;p&gt;Modern systems are hybrid by default, and reliability problems do not respect environment boundaries. To operate confidently at scale, teams need more than visibility. They need to understand how their systems behave and why failures occur. &lt;/p&gt;

&lt;p&gt;With expanded Datadog support across Kubernetes and EC2, Causely helps teams move from alert-driven firefighting to causal reliability engineering. The result is fewer war rooms, faster resolution, and the confidence to ship changes without fear. &lt;/p&gt;

&lt;p&gt;To learn more about using Causely with Datadog, &lt;a href="https://docs.causely.ai/telemetry-sources/datadog/?ref=dev.to"&gt;explore the integration guide&lt;/a&gt; or &lt;a href="https://www.causely.ai/try?ref=dev.to"&gt;reach out to see a unified service graph in action&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>causely</category>
      <category>datadog</category>
      <category>integration</category>
    </item>
    <item>
      <title>Thank You, FluxCD: How it helps us, and how you can use it too!</title>
      <dc:creator>Severin Neumann</dc:creator>
      <pubDate>Tue, 16 Dec 2025 17:47:11 +0000</pubDate>
      <link>https://forem.com/causely/thank-you-fluxcd-how-it-helps-us-and-how-you-can-use-it-too-1o81</link>
      <guid>https://forem.com/causely/thank-you-fluxcd-how-it-helps-us-and-how-you-can-use-it-too-1o81</guid>
      <description>&lt;p&gt;The second post in our “thank you” series, just in time for the end of the year.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.causely.ai/blog/thank-you-grafana-beyla-how-to?ref=dev.to"&gt;In the first one, we said thanks to Grafana for donating Beyla&lt;/a&gt; and making it easier for teams to get to usable telemetry quickly. This time we want to zoom out to something that quietly runs under the hood at Causely every day: GitOps with &lt;a href="https://fluxcd.io/?ref=dev.to"&gt;FluxCD&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Causely is a member of the &lt;a href="https://www.cncf.io/?ref=dev.to"&gt;Cloud Native Computing Foundation (CNCF)&lt;/a&gt;. That’s not just a logo on the website for us: our entire product and our own operations lean heavily on CNCF projects. We build on &lt;a href="https://opentelemetry.io/?ref=dev.to"&gt;OpenTelemetry&lt;/a&gt;, we run on &lt;a href="https://kubernetes.io/?ref=dev.to"&gt;Kubernetes&lt;/a&gt;, and we &lt;a href="https://www.causely.ai/blog/eating-our-own-dog-food-causelys-journey-with-opentelemetry-causal-ai?ref=dev.to"&gt;dogfood our own reliability engine&lt;/a&gt; against that stack.&lt;/p&gt;

&lt;p&gt;Another key piece in that puzzle is FluxCD. It is what takes “the desired state in git” and makes it true in our clusters, repeatedly. It’s the heartbeat behind our weekly releases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Flux Helps
&lt;/h2&gt;

&lt;p&gt;If you’re operating modern Kubernetes environments, you’ve probably felt this tension. On one hand, you want velocity: teams push changes constantly, services multiply, and configurations evolve all the time. On the other hand, every manual kubectl apply is a potential one-off change that no one can fully reconstruct later. Over time, clusters drift away from whatever was last written down as “how things should be,” and you are left relying on muscle memory and shell history.&lt;/p&gt;

&lt;p&gt;Flux solves exactly that problem by turning git into the control surface and reacting to changes within seconds of a merge.&lt;/p&gt;

&lt;p&gt;For us, that has very practical consequences.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Releases are commits, not hand-crafted ceremonies.&lt;/li&gt;
&lt;li&gt;A new Causely version is rolled out by changing a tag or a value in git; Flux notices the change within seconds, reconciles the cluster, and either converges to the new state or loudly tells us why it couldn’t.&lt;/li&gt;
&lt;li&gt;Environments stay in sync because the same manifests back our test clusters, staging, and production. The differences between them are intentional and visible in overlays, not hidden in one-off fixes on a live production cluster.&lt;/li&gt;
&lt;li&gt;And drift becomes a signal, not a mystery: when the cluster does not match git, Flux shows it, which turns the familiar “what changed?” question into a quick investigation rather than a full-blown incident archaeology.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The net effect is that we can move quickly without giving up control. Our reliability engine depends on a stable substrate; Flux helps us keep it that way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices We’ve Learned Using Flux
&lt;/h2&gt;

&lt;p&gt;We didn’t get there on day one. It took a set of habits to turn FluxCD from a cool project into a core platform primitive.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Treat manifests like product code&lt;/li&gt;
&lt;li&gt;Keep Kustomize overlays boring&lt;/li&gt;
&lt;li&gt;Watch Flux like any other production controller&lt;/li&gt;
&lt;li&gt;Make promotion a path, not an event&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Treat manifests like product code
&lt;/h3&gt;

&lt;p&gt;All of our Kubernetes manifests live in git. Not most of them, not “the important ones” – all of them. That sounds obvious, but it changes behavior in subtle ways.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reviews happen before things break, because a change to a HelmRelease or a Kustomize overlay goes through the same review process as a feature change.&lt;/li&gt;
&lt;li&gt;The commit history becomes an operational log: when we see a strange spike in errors, we can line it up against recent git changes, including configuration tweaks that would otherwise live only in someone’s bash history.&lt;/li&gt;
&lt;li&gt;Our issue tracker also stays connected to reality, because we reference issue numbers in commit messages, so the question “why did we change this setting?” always has a direct link back to the discussion that justified it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the early days, we still made the occasional manual change in production, usually in the name of speed. Those changes always came back to haunt us as confusing states that no one could fully explain. Once we committed to git as the only source of truth and forced ourselves to route every change through it, the platform became much more predictable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keep Kustomize overlays boring
&lt;/h3&gt;

&lt;p&gt;We use &lt;a href="https://kustomize.io/?ref=dev.to"&gt;Kustomize&lt;/a&gt; to manage environment-specific differences across test clusters, staging, production, and chaos environments. The rule we eventually settled on is simple: overlays describe differences, not alternative universes.&lt;/p&gt;

&lt;p&gt;In practice, that means we maintain a clean base with shared resources such as namespaces, common &lt;a href="https://fluxcd.io/flux/components/helm/helmreleases/?ref=dev.to"&gt;HelmReleases&lt;/a&gt;, and shared configuration. On top of that base, we keep the environment overlays as thin as possible. They patch what truly needs to change, such as cluster names, resource limits, or a particular feature flag, rather than redefining whole stacks.&lt;/p&gt;

&lt;p&gt;Whenever we tried to be clever with external references or overlays that diverged heavily from one another, troubleshooting became harder. Keeping overlays compact and predictable means we can scan a diff and understand at a glance what will change in a given cluster. Before committing, we render Kustomize configs locally as a quick sanity check that catches typos and misaligned paths before Flux has to complain about them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Watch Flux like any other production controller
&lt;/h3&gt;

&lt;p&gt;GitOps is not “set and forget.” Flux is a control loop running in production and, when it is unhappy, your platform will slowly drift.&lt;/p&gt;

&lt;p&gt;We treat Flux like a critical controller. We watch reconciliation health and consider a stuck HelmRelease or Kustomization as important as any failing deployment. When Flux cannot talk to git, or when an apply keeps failing, that is something we alert on rather than something we notice days later in a dashboard. And when “nothing seems to be changing” in a cluster despite recent commits, Flux logs are one of the first places we look.&lt;/p&gt;

&lt;p&gt;This mindset becomes even more important when GitOps extends beyond just core applications and starts to manage your observability stack, gateways, and even Causely itself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Make promotion a path, not an event
&lt;/h3&gt;

&lt;p&gt;Flux really shines when you treat deployments as a series of git-based promotions instead of isolated production pushes. A typical Causely release starts with a change landing in a test environment: we use clusters like test1 and test2 for this. We verify that the change behaves as expected there, including how it interacts with telemetry and Causely’s own reasoning about incidents. Once we are happy, we promote the same change to staging by updating the relevant overlay or values. Only after staging behaves as expected do we roll the change into production.&lt;/p&gt;

&lt;p&gt;Alongside this path, we maintain dedicated chaos clusters, chaos1 and chaos2, where we deliberately break things to see how the system responds. Because everything flows through git, we can rehearse failure modes without fear of leaving behind strange manual fixes that only exist on one cluster. Keeping cluster-specific configuration isolated and well documented is what allows us to run realistic experiments in those chaos clusters without letting that complexity bleed into production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try Flux On Your Own
&lt;/h2&gt;

&lt;p&gt;To really understand Flux, it helps to feel git driving your cluster. The smallest useful experiment is a git repository, a local kubernetes cluster, and Flux bootstrapped from that repository. The nice part is that flux bootstrap already does most of the heavy lifting: it creates the repository, installs the controllers, and wires everything together for you.&lt;/p&gt;

&lt;p&gt;You can run the following guide on your laptop with &lt;a href="https://kind.sigs.k8s.io/?ref=dev.to"&gt;kind&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Start by installing the Flux CLI. The easiest way is via the official install script; if you prefer Homebrew, apt, or other package managers, the Flux documentation lists those options as well in the &lt;a href="https://fluxcd.io/flux/installation/?ref=dev.to"&gt;Flux installation guide&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -s https://fluxcd.io/install.sh | sudo bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, export your GitHub credentials so Flux can authenticate and create the repository for you. If you are logged in with the GitHub CLI (&lt;code&gt;gh auth login&lt;/code&gt;), you can derive both the user name and token directly from it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export GITHUB_USER="$(gh api user --jq '.login')"
export GITHUB_TOKEN="$(gh auth token)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, create a local Kubernetes cluster and verify that Flux can run there.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kind create cluster --name flux-playground
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When your cluster is ready, bootstrap Flux into it. This command will create a repository called &lt;code&gt;flux-playground-gitops&lt;/code&gt; under your GitHub account, install Flux into the &lt;code&gt;flux-system&lt;/code&gt; namespace, and configure it to track the &lt;code&gt;./clusters/flux-playground&lt;/code&gt; path in that repo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flux bootstrap github \
  --owner=$GITHUB_USER \
  --repository=flux-playground-gitops \
  --branch=main \
  --path=./clusters/flux-playground \
  --personal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clone the newly created repository to your machine and change into it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gh repo clone flux-playground-gitops
cd flux-playground-gitops
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You are now ready to define the &lt;a href="https://opentelemetry.io/docs/demo/?ref=dev.to"&gt;OpenTelemetry demo&lt;/a&gt; as a git-managed workload by adding a manifest for the demo under &lt;code&gt;clusters/flux-playground&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat &amp;gt; clusters/flux-playground/oteldemo.yaml &amp;lt;&amp;lt;'EOF'
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
  name: open-telemetry
  namespace: flux-system
spec:
  interval: 1m
  url: https://open-telemetry.github.io/opentelemetry-helm-charts---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: otel-demo
  namespace: flux-system
spec:
  interval: 1m
  chart:
    spec:
      chart: opentelemetry-demo
      sourceRef:
        kind: HelmRepository
        name: open-telemetry
        namespace: flux-system
  targetNamespace: otel-demo
  install:
    createNamespace: true
EOF
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this point your git repository fully describes both Flux itself and the OpenTelemetry demo that Flux will deploy.&lt;/p&gt;

&lt;p&gt;Commit and push these changes so Flux can reconcile the new state.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add .
git commit -m "Add OpenTelemetry demo via Flux"
git push origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Within seconds of the push, Flux will see the new revision, apply the changes, and start rolling out the OpenTelemetry demo. You can watch the pods come up.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;watch kubectl get pods -n otel-demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After a few minutes you will see the OpenTelemetry demo microservices starting in the otel-demo namespace.&lt;/p&gt;

&lt;p&gt;You now have a real application being managed by Flux from git: the desired state lives in a repository, Flux reconciles it into the cluster within seconds of your merge, and you never had to use kubectl apply for the actual deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Flux + Causely: GitOps All the Way Down
&lt;/h2&gt;

&lt;p&gt;If you followed the small lab above, you already have a local cluster, Flux installed, and the OpenTelemetry demo running under GitOps control. From there, adding &lt;a href="https://www.causely.ai/?ref=dev.to"&gt;Causely&lt;/a&gt; is just one more git-driven change. &lt;/p&gt;

&lt;p&gt;Conceptually, the flow is simple. You obtain a Causely access token, store it as a Kubernetes Secret, and add the Causely FluxCD manifests to the same git repository that Flux already manages. Git drives the rollout, Flux reconciles it into the cluster, the OpenTelemetry demo generates realistic behavior, and Causely explains what is going on. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.causely.ai/installation/flux/?ref=dev.to"&gt;Our documentation&lt;/a&gt; has a full FluxCD installation guide with more background and variations. The example below is meant to be something you can copy and adapt directly from your existing &lt;code&gt;flux-playground-gitops&lt;/code&gt; setup. &lt;/p&gt;

&lt;p&gt;First, retrieve your Causely &lt;a href="https://portal.causely.app/?ref=dev.to"&gt;access token from Causely&lt;/a&gt; and keep it handy. Then, create a namespace for Causely and a kubernetes secret with your token. The Causely FluxCD manifests expect a secret named &lt;code&gt;causely-secrets&lt;/code&gt; and use Flux's native post-build substitution to inject &lt;code&gt;CAUSELY_TOKEN&lt;/code&gt; into the &lt;code&gt;HelmRelease&lt;/code&gt;, so the token never has to be committed to git:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl create namespace causely 
kubectl create secret generic causely-secrets \ 
  --from-literal=CAUSELY_TOKEN=your-actual-gateway-token-here \ 
  -n causely 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, from inside your GitOps repository, clone the public &lt;a href="https://github.com/causely-oss/causely-deploy?ref=dev.to"&gt;causely-deploy repository&lt;/a&gt; and copy the FluxCD manifests into your own cluster configuration.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd flux-playground-gitops 
git clone https://github.com/causely-oss/causely-deploy.git  
mkdir -p clusters/flux-playground/causely 
cp causely-deploy/kubernetes/fluxcd/causely/*.yaml clusters/flux-playground/causely/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this setup, your git repository now contains everything Flux needs to deploy Causely, and you can commit and push these changes so Flux can reconcile the new state.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add clusters/flux-playground 
git commit -m "Add Causely via Flux" 
git push origin main 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the push, Flux notices the change, applies the new manifests, and starts deploying Causely into your cluster. You can watch it the same way you watched the OpenTelemetry demo roll out.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flux get kustomizations -A 
kubectl get pods -n causely
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the Causely pods are healthy, you can return to the Causely portal, where the cluster you just configured will appear. Over time, topology fills in and, as issues arise, you will see root cause views associated with the services in your demo. &lt;/p&gt;

&lt;p&gt;At that point, you have a complete loop on a single laptop: Git drives change, Flux applies it, the OpenTelemetry demo generates behavior, and Causely explains what happens when things go wrong. If you want more variations, production-grade knobs, or to run this across multiple clusters, &lt;a href="https://docs.causely.ai/installation/flux/?ref=dev.to"&gt;the FluxCD installation guide&lt;/a&gt; in our docs walks through additional options in detail. &lt;/p&gt;

&lt;h2&gt;
  
  
  Closing: Thank You, Flux
&lt;/h2&gt;

&lt;p&gt;FluxCD is a great example of the kind of infrastructure we love in the CNCF ecosystem. It nudges teams toward good habits, turns the question “how did this get here?” into something with a clear, auditable answer, and helps keep complex Kubernetes estates boring and predictable.&lt;/p&gt;

&lt;p&gt;As a CNCF member building on OpenTelemetry, Kubernetes, and the wider cloud-native stack, we are genuinely grateful for projects like Flux that quietly raise the floor for everyone.&lt;/p&gt;

&lt;p&gt;So: thank you to the Flux maintainers and community for building and maintaining an engine that lets us practice what we preach about control, desired state, and autonomous reliability. If you are running kubernetes and still relying on manual deploys or one-off scripts, Flux is worth a serious look.  &lt;/p&gt;

&lt;p&gt;And if you want to see what happens when you combine GitOps with causal reasoning, we are always happy to show you how Causely fits into that picture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.causely.ai/try?ref=dev.to"&gt;Book a demo today -&amp;gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>fluxcd</category>
      <category>opentelemetry</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Causely Named a Gartner Cool Vendor in AI for IT Operations 2025</title>
      <dc:creator>Severin Neumann</dc:creator>
      <pubDate>Tue, 09 Dec 2025 20:25:00 +0000</pubDate>
      <link>https://forem.com/causely/causely-named-a-gartner-cool-vendor-in-ai-for-it-operations-2025-18g8</link>
      <guid>https://forem.com/causely/causely-named-a-gartner-cool-vendor-in-ai-for-it-operations-2025-18g8</guid>
      <description>&lt;p&gt;We are excited to share that Gartner has named Causely a &lt;a href="https://www.gartner.com/en/documents/7233330?ref=dev.to"&gt;&lt;u&gt;Cool Vendor for AI in IT Operations for 2025&lt;/u&gt;&lt;/a&gt;. For us, this recognition reflects what we’re seeing across engineering and operations teams everywhere. Systems are changing faster than traditional tools can keep up, and teams need a more reliable way to understand how their applications behave as they evolve. &lt;/p&gt;

&lt;p&gt;At the pace modern cloud-native systems move, reacting after symptoms appear is not enough. Teams need a reliability operating system that works continuously alongside their applications, maintains an up-to-date understanding of how everything fits together, and provides the context required for safe automation and proactive reliability. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why this recognition matters&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Modern cloud-native applications evolve constantly. Every deploy, configuration change, traffic surge, and infrastructure adjustment can reshape system behavior. The pace is so fast that even the best teams struggle to reason about what is happening and why. &lt;/p&gt;

&lt;p&gt;Traditional observability dashboards can show what happened after symptoms appear, and AI copilots can help speed up triage, but reacting after the fact isn’t good enough for business-critical applications. &lt;/p&gt;

&lt;p&gt;Teams need something that runs continuously alongside their systems, understands how everything fits together, and helps them see how changes will affect performance before they land in production. That’s the foundation for proactive reliability, not just faster incident response. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What Gartner recognized about&lt;/strong&gt;   &lt;strong&gt;Causely&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Gartner recognized Causely for taking a fundamentally different approach to reliability in modern systems. Instead of reacting to symptoms after they spread, Causely maintains a &lt;a href="https://www.causely.ai/blog/causal-reasoning-the-missing-piece-to-service-reliability?ref=dev.to"&gt;&lt;u&gt;live causality graph&lt;/u&gt;&lt;/a&gt; that reflects how services, dependencies, and performance constraints relate to one another as the environment evolves. By continuously analyzing telemetry, Causely identifies the underlying driver behind emerging changes in golden signals, even when failures cascade across multiple services, including the code change, configuration update, or operational event that first introduced risk. &lt;/p&gt;

&lt;p&gt;This continuous causal inference is what enables proactive reliability. Causely provides clear direction on where to focus and what action is most likely to reduce performance risk, long before issues escalate. The same causal model supports both pre-production and production, helping teams understand how behavior will shift during testing, rollout, and real-world load. &lt;/p&gt;

&lt;p&gt;Causely runs locally as a lightweight, containerized system and &lt;a href="https://www.causely.ai/blog/demystifying-automatic-instrumentation?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;&lt;u&gt;processes telemetry without exporting raw data&lt;/u&gt;&lt;/a&gt;. This eliminates the need for central pipelines, avoids sampling or data volume constraints, and gives teams high-fidelity insight that integrates directly into their engineering workflows through APIs, webhooks, and an MCP server. This structured context supports both human decisions and safe automation. &lt;/p&gt;

&lt;p&gt;For us, this recognition validates the direction we have been building toward. The future of reliability is proactive, predictive, and grounded in causal understanding. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Who&lt;/strong&gt;   &lt;strong&gt;should care?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Causely is designed for teams responsible for building and operating modern distributed systems. It gives engineering and operations organizations a clearer understanding of how system behavior changes over time and how those changes affect reliability. Whether preparing a release, managing growth, or diagnosing unexpected behavior, teams need deeper clarity to make confident decisions. Continuous causal inference provides that clarity. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Looking ahead&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We’re grateful to Gartner for this recognition and excited about what it represents. Reliability is entering a new chapter. Systems are more dynamic, &lt;a href="https://www.linkedin.com/pulse/when-ai-overwhelms-your-architecture-machine-load-new-shergilashvili-zhw5f/?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;&lt;u&gt;AI workloads are growing&lt;/u&gt;&lt;/a&gt;, and teams need deeper clarity to keep everything running smoothly. &lt;/p&gt;

&lt;p&gt;Causely’s mission is to provide that reliability. Continuous causal inference helps teams prevent issues before they escalate, support high-velocity engineering without sacrificing reliability, and give both humans and automation the context they need to act safely. &lt;/p&gt;

&lt;p&gt;We’re excited for what’s ahead and proud to help shape the future of reliable, intelligent, and resilient systems. &lt;/p&gt;




&lt;p&gt;Want to learn what this could look like for your organization? &lt;a href="https://www.causely.ai/try?ref=dev.to"&gt;&lt;u&gt;Get started with Causely today.&lt;/u&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Gartner subscribers can &lt;a href="https://www.gartner.com/en/documents/7233330?ref=dev.to"&gt;&lt;u&gt;view the full report&lt;/u&gt;&lt;/a&gt; for more information.&lt;/p&gt;

</description>
      <category>causely</category>
      <category>ai</category>
      <category>gartner</category>
    </item>
    <item>
      <title>Announcing Reliability Delta: Clear, Objective Insight into Whether Your Release Made Your System Better or Worse</title>
      <dc:creator>Severin Neumann</dc:creator>
      <pubDate>Thu, 04 Dec 2025 21:23:59 +0000</pubDate>
      <link>https://forem.com/causely/announcing-reliability-delta-clear-objective-insight-into-whether-your-release-made-your-system-e</link>
      <guid>https://forem.com/causely/announcing-reliability-delta-clear-objective-insight-into-whether-your-release-made-your-system-e</guid>
      <description>&lt;p&gt;Your team has been grinding for days, tuning a critical service to improve performance without lighting your cloud bill on fire. It’s the kind of systemic change you can’t hand off to an AI coding agent. After countless reviews, experiments, and late nights, the update is finally in production. &lt;/p&gt;

&lt;p&gt;You take a breath. Maybe even consider sleeping. &lt;/p&gt;

&lt;p&gt;Then Slack lights up: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“Did it work?” — CTO&lt;/strong&gt;  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You stare at dashboards. Nothing’s red. But you still don’t actually know: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did reliability improve, or quietly regress? &lt;/li&gt;
&lt;li&gt;Did the change shift bottlenecks or introduce new stress points? &lt;/li&gt;
&lt;li&gt;Are you now closer to the edge under peak load? &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a 50 to 100+ microservice environment with dense service-to-service dependencies, even small regressions can cascade silently. And slowing down isn’t an option. Leadership needs faster delivery and fewer incidents. &lt;/p&gt;

&lt;p&gt;This is exactly why we built Reliability Delta. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Reliability Delta: A Deterministic Answer to “Did This Change Make Things Better or Worse?”&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Reliability Delta turns subjective guesswork (like manual diffing of dashboards, correlation hunts, “nobody is complaining” anecdotes) into clear, evidence-based reliability signals. &lt;/p&gt;

&lt;p&gt;It’s powered by Causely’s continuously updated understanding of your environment: &lt;/p&gt;

&lt;h3&gt;
  
  
  Causality Mapping
&lt;/h3&gt;

&lt;p&gt;Causely builds a Bayesian network that models how issues propagate across services, enabling true cause-and-effect visibility. &lt;/p&gt;

&lt;h3&gt;
  
  
  Attribute Dependency Graph
&lt;/h3&gt;

&lt;p&gt;A DAG of functional dependencies generated from live topology and Causely’s attribute models, highlighting how attributes influence one another. &lt;/p&gt;

&lt;p&gt;These models allow Causely to compare two snapshots—two releases, two load tests, or two moments in time—and determine whether system behavior: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improved &lt;/li&gt;
&lt;li&gt;Regressed &lt;/li&gt;
&lt;li&gt;Or shifted in ways you need to investigate &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result: deterministic signals engineers can trust.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Use Cases for&lt;/strong&gt;   &lt;strong&gt;Reliability Delta&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;1.&lt;/em&gt; &lt;em&gt;Validate&lt;/em&gt; &lt;em&gt;Every Release Instantly&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Know immediately whether your change introduced risk. &lt;/p&gt;

&lt;p&gt;Feature flags and canaries help, but they don’t guarantee safety. What matters is whether the system is behaving normally. &lt;/p&gt;

&lt;p&gt;Reliability Delta automatically surfaces: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Behavior changes isolated to a specific flag, tenant, or traffic segment &lt;/li&gt;
&lt;li&gt;Downstream effects in pipelines, async jobs, and data flows &lt;/li&gt;
&lt;li&gt;Subtle regressions that don’t trip alerts but violate known patterns of normal &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn’t “no alerts fired = good.” &lt;/p&gt;

&lt;p&gt;This is evidence-based release confidence.  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;2. Understand Load Test Results Beyond Pass/Fail&lt;/em&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“With&lt;/em&gt; &lt;em&gt;Causely’s&lt;/em&gt; &lt;em&gt;Reliability Delta, we can quantify how each release behaves under identical load. It surfaces changes in bottlenecks, stress patterns, and causal relationships that traditional load tests miss. At our scale, having that level of confidence before shipping is critical.”&lt;/em&gt; - &lt;strong&gt;Cade Moore, Performance Engineering Lead at Hard Rock Digital&lt;/strong&gt;  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Did this release push you closer to the breaking point? &lt;/p&gt;

&lt;p&gt;A load test passing doesn’t mean you’re safe. &lt;/p&gt;

&lt;p&gt;Reliability Delta shows: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How bottlenecks shifted compared to last time &lt;/li&gt;
&lt;li&gt;Whether the same load now produces more stress &lt;/li&gt;
&lt;li&gt;Early signs of fragility or shrinking performance margins &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It answers the question load tests never answer: &lt;/p&gt;

&lt;p&gt;“Are we drifting toward failure or away from it?” &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;3. Detect Reliability Drift Over Time&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Systems naturally drift through config changes, dependency updates, scaling events, and organic load shifts. &lt;/p&gt;

&lt;p&gt;By capturing snapshots periodically, you can: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spot slow-building risk &lt;/li&gt;
&lt;li&gt;Track reliability trends &lt;/li&gt;
&lt;li&gt;Validate that ongoing changes are improving SLO posture, not eroding it &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This moves teams from reactive firefighting to proactive reliability assurance. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;4.&lt;/em&gt; &lt;em&gt;Validate&lt;/em&gt; &lt;em&gt;Experiments with Confidence&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Know immediately whether your experiment improved or degraded system behavior. &lt;/p&gt;

&lt;p&gt;Teams frequently adjust timeouts, concurrency, sampling, queue behavior, or other system parameters, but these changes rarely trigger alerts, and standard dashboards make it hard to see their true impact. &lt;/p&gt;

&lt;p&gt;Reliability Delta lets you validate experiments with clear before-and-after evidence by automatically highlighting: &lt;/p&gt;

&lt;p&gt;• Shifts in bottlenecks or stress patterns across services &lt;/p&gt;

&lt;p&gt;• Degradations hidden behind “passing” performance metrics &lt;/p&gt;

&lt;p&gt;• Unexpected side effects in downstream dependencies &lt;/p&gt;

&lt;p&gt;• Whether the experiment made the system more resilient or more fragile &lt;/p&gt;

&lt;p&gt;This isn’t trial-and-error tuning. It is evidence-based experiment validation. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why Reliability Delta Matters for Modern Engineering Teams&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you’re accountable for revenue-critical systems—measured by 99.9%+ SLOs, delivery pace, and incident reduction—you need more than observability dashboards. You need a deterministic framework for evaluating how change affects system behavior.  &lt;/p&gt;

&lt;p&gt;Reliability Delta gives you: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Objective, repeatable comparisons between versions &lt;/li&gt;
&lt;li&gt;Root-cause-aware analysis using causal models &lt;/li&gt;
&lt;li&gt;Clear guardrails leadership can trust &lt;/li&gt;
&lt;li&gt;Confidence to ship fast without risking SLOs or customer experience &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It transforms subjective judgment into trusted, actionable reliability signals—so every release, load test, and system change is safer, faster, and more predictable.  &lt;/p&gt;

&lt;h2&gt;
  
  
  *&lt;em&gt;Ship Faster with Confidence *&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Reliability isn’t something you can eyeball anymore. With Reliability Delta, engineering leaders get the missing layer between observability and automation: clear causal evidence of how changes affect system behavior. It ensures your team can move fast, protect SLOs, and deliver with the confidence that every release is safer than the last. &lt;/p&gt;

&lt;p&gt;To learn more, see our docs: &lt;a href="https://docs.causely.ai/in-action/reliability-delta/?ref=dev.to"&gt;&lt;u&gt;https://docs.causely.ai/in-action/reliability-delta/&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sre</category>
      <category>causely</category>
      <category>devops</category>
    </item>
    <item>
      <title>eAfterWork EP 9: What Every Leader Needs to Know with Severin Neumann</title>
      <dc:creator>Severin Neumann</dc:creator>
      <pubDate>Wed, 03 Dec 2025 11:36:00 +0000</pubDate>
      <link>https://forem.com/causely/eafterwork-ep-9-what-every-leader-needs-to-know-with-severin-neumann-80n</link>
      <guid>https://forem.com/causely/eafterwork-ep-9-what-every-leader-needs-to-know-with-severin-neumann-80n</guid>
      <description>&lt;p&gt;In this episode of eAfterWork, we’re going straight to the source: Severin, OpenTelemetry maintainer, member of the OpenTelemetry Governance Committee, and one of the people who writes and maintains the official OpenTelemetry documentation.  &lt;/p&gt;

&lt;p&gt;He’ll help us understand why OpenTelemetry matters for both technical and non-technical leaders, how it’s shaping the future of observability, and what you really need to know to make the right decisions.&lt;/p&gt;

&lt;p&gt;Watch the full conversation on YouTube: &lt;a href="https://www.youtube.com/watch?v=LkaytYEAJnQ" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=LkaytYEAJnQ&lt;/a&gt;&lt;/p&gt;

</description>
      <category>podcast</category>
    </item>
    <item>
      <title>Purposeful OpenTelemetry</title>
      <dc:creator>Severin Neumann</dc:creator>
      <pubDate>Wed, 26 Nov 2025 16:27:02 +0000</pubDate>
      <link>https://forem.com/causely/purposeful-opentelemetry-25oa</link>
      <guid>https://forem.com/causely/purposeful-opentelemetry-25oa</guid>
      <description>&lt;p&gt;Organizations collect far more telemetry than they use. The result? Exponential costs, PII risks, and still no root cause when incidents happen.  &lt;/p&gt;

&lt;p&gt;In this technical session, Yuri Oliveira (OllyGarden) and Severin Neumann (Causely) demonstrate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to identify instrumentation problems at the source&lt;/li&gt;
&lt;li&gt;Why traces and semantic conventions enable purposeful telemetry&lt;/li&gt;
&lt;li&gt;How quality telemetry enables causal reasoning at scale&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Watch the full conversation on YouTube: &lt;a href="https://www.youtube.com/watch?v=sTOa0MxAm78" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=sTOa0MxAm78&lt;/a&gt;&lt;/p&gt;

</description>
      <category>podcast</category>
      <category>devopssre</category>
      <category>webinar</category>
    </item>
    <item>
      <title>How Causely and Google Gemini Are Powering Autonomous Reliability</title>
      <dc:creator>Severin Neumann</dc:creator>
      <pubDate>Tue, 28 Oct 2025 23:51:02 +0000</pubDate>
      <link>https://forem.com/causely/how-causely-and-google-gemini-are-powering-autonomous-reliability-1oah</link>
      <guid>https://forem.com/causely/how-causely-and-google-gemini-are-powering-autonomous-reliability-1oah</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1jfr2e4krjkw591vf7eq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1jfr2e4krjkw591vf7eq.png" alt="How Causely and Google Gemini Are Powering Autonomous Reliability" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As systems scale and interactions multiply, reliability can’t be assured through dashboards and alerts. When hundreds of interdependent services rely on managed components, asynchronous communication, and shared databases, engineers spend valuable hours chasing symptoms because they lack a system that infers causality across dependencies. &lt;/p&gt;

&lt;p&gt;Causely addresses this gap through its &lt;a href="https://www.causely.ai/product?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;&lt;u&gt;Causal Reasoning Engine&lt;/u&gt;&lt;/a&gt;, which models how dependencies interact in real time and accurately determines the cause of observed service latency and errors. By inferring the cause of performance degradation and understanding the affected dependencies, Causely enables automated actions to assure performance.  &lt;/p&gt;

&lt;p&gt;Now, through a new collaboration with Google Gemini, engineering teams can act on those insights faster and more intuitively. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why We Started with Gemini
&lt;/h2&gt;

&lt;p&gt;Reliability engineering depends on both accuracy and trust. &lt;a href="https://www.infoq.com/articles/causal-reasoning-observability/?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;&lt;u&gt;LLMs excel&lt;/u&gt;&lt;/a&gt; at interpreting vast, unstructured data, but without a principled understanding of cause and effect, their outputs are prone to hallucination.  &lt;/p&gt;

&lt;p&gt;Causely provides that missing foundation. Its Causal Reasoning Engine models how services, dependencies, and resources interact. These causal models provide deterministic truth about the causes of performance anomalies, and their blast radius. LLMs build on this foundation by translating the results of this causal inference into natural language explanations and action plans that help teams act with confidence. The result is a real-time, closed loop between insight and action. &lt;/p&gt;

&lt;p&gt;We chose Gemini because of its contextual reasoning, enterprise-grade security, and deep integration with Google Cloud workloads. Gemini’s ability to interpret natural language, generate structured code, and summarize technical context complements Causely’s deterministic causal inference engine, turning complex telemetry into clear and reliable insights. &lt;/p&gt;

&lt;h2&gt;
  
  
  How Causely Uses Gemini to Enhance Autonomous Reliability
&lt;/h2&gt;

&lt;p&gt;While Causely remains interoperable with any LLM that a customer wishes to use, we’ve integrated Gemini into Causely for two new features that make interacting with our Causal Reasoning Engine more intuitive and powerful. &lt;/p&gt;

&lt;h3&gt;
  
  
  Ask Causely
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.causely.ai/blog/causely-feature-demo-using-ask-causely-to-transform-incident-response?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;&lt;u&gt;Ask Causely&lt;/u&gt;&lt;/a&gt; empowers users to ask complex questions about their environment, check service health, and identify both existing root causes and potential failure points. Ask Causely leverages Gemini’s natural language understanding and generation capabilities to deliver a conversational and seamless experience. It uses multiple Gemini models and takes advantage of Gemini’s generative features to provide a white-glove reliability experience. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ask Causely leverages Gemini's natural language understanding and generation capabilities.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Gemini is integrated into several stages of the Ask Causely pipeline, offering a high degree of flexibility, control, and integration within Causely’s autonomous reliability framework. To ensure timely and accurate results, Causely uses low-latency Gemini models to support data-intensive operations such as log summarization, entity extraction, and contextual signal analysis across diverse telemetry sources.  &lt;/p&gt;

&lt;p&gt;Key aspects of the integration include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Adaptive Model Selection:&lt;/strong&gt; Causely strategically deploys low-latency Gemini models to ensure quick responses while using higher-capability reasoning models to convert Causely’s causal diagnoses into clear, actionable remediations. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grounded search for reliable knowledge:&lt;/strong&gt; Ask Causely uses Gemini’s grounded search capability to deliver accurate, context-aware remediations based on trusted external sources such as vendor documentation, Stack Overflow, and GitHub. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool calling and code generation for live system intelligence&lt;/strong&gt; : Ask Causely uses Gemini’s tool calling and code generation to query live services, interpret telemetry, and surface insights from Causely’s causal engine on identified symptoms and root causes. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code generation for automation:&lt;/strong&gt; Gemini’s code generation enables Causely’s &lt;a href="https://docs.causely.ai/installation/?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;Code Agents&lt;/a&gt; to analyze time series and topology data, generate diagnostic workflows, automate remediations, and perform dynamic analysis during active incidents. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Entity recognition:&lt;/strong&gt; Gemini’s strong entity recognition helps Causely rapidly locate and correlate critical services, nodes, and components within complex environments. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embeddings for enterprise grounding:&lt;/strong&gt; Gemini embeddings enable Causely to integrate internal documentation and historical incidents to deliver organization-aware, contextually grounded insights. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interpretable causal insights:&lt;/strong&gt; Gemini translates Causely’s causal signal extraction from unstructured telemetry into clear, human-readable explanations and actionable remediations.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Causal Explanation and Remediation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Causely uses Gemini to generate SLO-aware, application-specific explanations and actionable remediations grounded in verified causal data and analysis. Causely infers the precise cause of observed anomalies and gathers the most relevant logs and events from across the environment to enable automated action. Gemini then contextualizes this evidence with Causely’s live &lt;a href="https://docs.causely.ai/reference/terminology/?ref=causely-blog.ghost.io#causality-graph-cg" rel="noopener noreferrer"&gt;&lt;u&gt;causal graph&lt;/u&gt;&lt;/a&gt; to produce coherent, human/machine-readable descriptions and remediations that reflect the underlying issue, its operational impact, and suggested remediation steps &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Supporting features include:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Log and event contextualization:&lt;/strong&gt; Gemini interprets logs and events selected by Causely’s reasoning engine, connecting raw telemetry to observed symptoms and their SLO implications. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Causal-grounded remediation actions:&lt;/strong&gt; Recommendations are based on observed symptoms and tailored to the affected application or service context. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated post-incident summaries:&lt;/strong&gt; Gemini compiles structured summaries that capture causal explanations, operational impact, and applied remediations, ensuring consistency and traceability across incidents.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Open and Flexible
&lt;/h2&gt;

&lt;p&gt;We started with Gemini as an initial and foundational proof point. But our platform was built to be multi-cloud and model-agnostic. Causely runs across public clouds or on-prem environments, and we’ll continue to develop integrations with other large language models, giving customers flexibility without lock-in. If you have a particular model and use case in mind, please contact us! &lt;/p&gt;

&lt;h2&gt;
  
  
  The Future: From Reactive to Autonomous Reliability
&lt;/h2&gt;

&lt;p&gt;Causely and Google Gemini together mark a step toward &lt;a href="https://www.causely.ai/blog/capabilities-causal-analysis?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;&lt;u&gt;autonomous service reliability&lt;/u&gt;&lt;/a&gt;, where systems can understand, explain, and prevent issues before users are affected. This shift moves reliability from reactive firefighting to proactive, explainable prevention.  &lt;/p&gt;

&lt;h2&gt;
  
  
  See It in Action
&lt;/h2&gt;

&lt;p&gt;Explore the new Gemini-powered capabilities in Causely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;View Causely on &lt;a href="https://console.cloud.google.com/marketplace/product/causely-public/crp-cna-gcp?hl=en&amp;amp;project=dspopup-austin&amp;amp;ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;&lt;u&gt;Google Cloud Marketplace &lt;/u&gt;➜&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.causely.ai/try?ref=causely-blog.ghost.io" rel="noopener noreferrer"&gt;&lt;u&gt;Request a Demo&lt;/u&gt; ➜&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>causely</category>
      <category>gemini</category>
      <category>reliability</category>
    </item>
  </channel>
</rss>
