Engineering Reliability Quarterly
PRODUCTION OBSERVABILITY SERIES
Critical Alert: Must Read

How to Detect Production Issues Before Users Notice

Your users are your best — and worst — monitoring system. They notice slowdowns, errors, and data inconsistencies faster than most alert systems. Here's how to flip that equation and know before they do.

⏱ 14 MIN READ 📡 OBSERVABILITY 🛠 SRE / PLATFORM ENG
By The Numbers
4.7min
Detection GapAverage time between a real issue starting and your team being paged — while users are already experiencing it.
83%
Silent FailuresOf production incidents are never reported by users — they just churn. Detection must be proactive.
70%
MTTR ReductionTeams with proactive detection resolve incidents 70% faster than those relying on user reports.

Users Are Not Your Monitoring System

It's 2 PM on a Tuesday. Your checkout flow is returning 500 errors for 12% of users in the EU region. Your Slack is quiet. Your dashboards look green. Your on-call engineer is eating lunch.

Meanwhile, customers are abandoning carts, tweeting complaints, and switching to your competitor — and they've been doing so for the last 11 minutes.

This is the detection gap — the dangerous window between when a production issue starts and when your team becomes aware of it. Closing this gap is the difference between a minor incident and a major outage postmortem.

"The best monitoring system is one that pages you before users even feel the pain." Site Reliability Engineering Principle

The Early Warning Signals You're Probably Missing

Most teams monitor the obvious: CPU, memory, HTTP 5xx rates. But by the time those fire, the damage is done. Proactive detection means watching leading indicators — signals that precede failures, not just confirm them.

Signal What it Predicts Lead Time Urgency
P99 latency creep Upstream timeout cascade, resource saturation 3–10 min Critical
Error budget burn rate spike SLO breach within hours or minutes 5–30 min Critical
DB connection pool exhaustion Full service degradation, timeouts 2–8 min Critical
GC pause frequency increase JVM OOM kill, latency spikes 5–20 min High
Queue depth growth Consumer lag, message processing failures 5–15 min High
Cache hit rate decline DB overload, cost spike, latency increase 10–30 min Medium
Synthetic check failures User-facing functional regression Immediate Critical
Anomalous deployment diff New code introducing errors Minutes post-deploy High

Synthetic Monitoring — Your Always-On Fake User

Synthetic monitoring runs scripted user journeys against your production environment continuously — before real users hit it. It's the closest thing to having a tireless QA engineer running smoke tests 24/7 on prod.

What to Synthetically Test

Critical Path

Authentication Flow

Login, session creation, MFA challenge. If auth breaks, everything breaks. Run every 60 seconds from 3+ regions.

Revenue Critical

Checkout / Payment

The full purchase funnel — add to cart, checkout, payment gateway response, confirmation email trigger.

Core Feature

API Contract Tests

Hit your most-used endpoints with valid payloads, assert response schemas and latency SLOs on every check.

Data Integrity

Read/Write Consistency

Write a record, immediately read it back. Detect replication lag and eventual consistency violations in real-time.

✓ Real-World Impact

A fintech team reduced their user-reported incident rate by 78% by adding synthetic checkout monitoring with 30-second intervals across 5 global regions. They now catch payment gateway degradation an average of 6 minutes before it affects real users.


SLO-Based Alerting & Error Budget Burn Rate

Static threshold alerts are a blunt instrument. "Alert when error rate > 1%" fires on every hiccup and trains your team to ignore pages. SLO-based alerting on burn rate is surgically precise — it tells you when you're on a trajectory to miss your reliability target.

The Burn Rate Formula

Prometheus · PromQL slo-burn-rate.yaml
# Error ratio over a 1-hour window
sum(rate(http_requests_total{status=~"5.."}[1h]))
/
sum(rate(http_requests_total[1h]))

# Burn rate = actual error ratio / error budget ratio
# If SLO = 99.9%, error budget = 0.1%
# Burn rate of 14.4x = exhausts monthly budget in 2 hours

# Fast burn alert (critical - page now)
groups:
  - name: slo.rules
    rules:
    - alert: HighErrorBurnRate
      expr: |
        (
          sum(rate(http_requests_total{job="api",status=~"5.."}[1h]))
          / sum(rate(http_requests_total{job="api"}[1h]))
        ) > (14.4 * 0.001)
      for: 2m
      labels:
        severity: critical
      annotations:
        summary: "Burning monthly error budget in < 2 hours"
        runbook: "https://wiki/runbooks/high-burn-rate"
💡 The Multi-Window Approach

Use a fast + slow burn alert pair for each SLO: a 1h/5min window for rapid page-worthy incidents (14.4x burn), and a 6h/30min window for slow-creep degradation (6x burn) that won't exhaust budget fast but still needs attention. Together they eliminate nearly all false positives.


Anomaly Detection & Adaptive Baselining

Static thresholds break on seasonality. Your API gets 10x traffic on Mondays — an alert threshold set for a Tuesday afternoon will false-fire every week, or miss real issues on slow nights. Adaptive baselining learns what "normal" looks like for your specific traffic patterns and alerts on deviations from that learned norm.

Approaches by tooling

AI-Native
Dynatrace Davis®
ML-Based
Datadog Watchdog
Open Source
Prophet + Alertmanager
Cloud Native
AWS CloudWatch AI
Grafana Stack
Grafana ML Forecasting
⚠ The Baselining Trap

Adaptive baselining needs 2–4 weeks of stable data before it produces reliable baselines. If you deploy it during or immediately after a major incident, it will learn the broken state as "normal." Always seed baselines on clean, representative historical data.


Deployment-Correlated Issue Detection

The most common root cause of production issues is your own code. Correlating observability signals with deployment events is one of the highest-leverage things you can do. When you know a deploy just happened, any anomaly that appears within the next 15 minutes is almost certainly related.

Deployment change event pipeline

bash · CI/CD pipeline deploy-marker.sh
#!/bin/bash
# Post a deployment event to Dynatrace at deploy time

curl -X POST \
  "https://${DT_ENV_ID}.live.dynatrace.com/api/v2/events/ingest" \
  -H "Authorization: Api-Token ${DT_API_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "eventType": "CUSTOM_DEPLOYMENT",
    "title": "Deployment: '"${SERVICE}"' v'"${VERSION}"'",
    "properties": {
      "service":     "'"${SERVICE}"'",
      "version":     "'"${VERSION}"'",
      "commit_sha":  "'"${GIT_SHA}"'",
      "deployed_by": "'"${DEPLOYER}"'",
      "environment": "production"
    },
    "entitySelector": "type(SERVICE),tag(service:'"${SERVICE}"')"
  }'

# Now your observability tool knows a deploy just happened
# Davis® AI will automatically correlate any anomalies
# appearing in the next window with this deployment event

Anatomy of a Proactive Detection Win

Here's how a team with mature proactive detection handles what would otherwise be a user-reported incident:

Real User Monitoring — The Ground Truth

Synthetic checks tell you what's broken in a controlled way. Real User Monitoring (RUM) tells you what real users — with all their device diversity, network variance, and usage patterns — are actually experiencing. It's your production ground truth.

Key RUM Metrics to Alert On

Core Web Vitals

LCP / CLS / INP

Alert when Largest Contentful Paint exceeds 4s for P75 real users. Google uses these for search ranking — your users notice them before that.

Session Quality

Rage Click Rate

A spike in rage clicks (rapid repeated clicks on unresponsive elements) is a leading indicator of UI bugs or unresponsive backend calls.

Error Detection

JS Error Rate

Unhandled JavaScript exceptions in the browser are silent killers. Alert when browser error rate exceeds baseline by 2σ.

Funnel Health

Conversion Drop

A sudden drop in funnel conversion rate (e.g. add-to-cart → checkout) is a business-level signal that something broke in that user journey.


Implementation Checklist

Your Proactive Detection Starter Pack

You don't need everything on day one. Here's a prioritized checklist to build your proactive detection capability incrementally, starting with the highest-impact items first.

✓ The Goal: Boring Incidents

The mark of a mature observability practice isn't heroic incident response — it's boring, low-drama resolutions. When your team detects, diagnoses, and resolves issues before users are affected, incidents become routine operations, not emergencies. That's the goal. Build toward boring.