Lesson 1 of 4 · 20 min read

Vanity vs. Signal Metrics — What to Measure in a Detection Program

You can’t improve what you don’t measure. But measuring the wrong things creates the illusion of progress while the real problems compound.


The Two Types of Detection Metrics

Vanity metrics measure activity. Signal metrics measure outcomes.

Vanity MetricWhat it seems to showWhat it actually measures
Total rules in SIEMDetection breadthRule count, regardless of quality or coverage
Total alerts per dayDetection activityAlert volume, mostly FP rate
Mean time to respond (MTTR)Analyst efficiencyHow fast analysts close tickets, not how fast attacks are detected
Number of playbooks documentedProcess maturityDocumentation completeness, not execution quality
Rules deployed this sprintTeam velocityHow many rules were added, not whether they work

Signal metrics measure what matters to the business:

Signal MetricWhat it measuresWhy it matters
MTTD (Mean Time to Detect)Time from attacker action to first detectionLower = less time for attacker to achieve objectives
Alert-to-ticket ratioPrecision at program levelTracks analyst fatigue and FP rate
Detection coverage %ATT&CK technique coverageBreadth of detection across the threat model
Rule health rate% of rules with TP+FP fixtures passing in CIRule quality and maintenance status
Dwell time trendHistorical MTTD over timeIs detection improving or degrading?

Calculating MTTD

Incident A: Initial attacker action at 09:00, first alert at 09:45 → MTTD = 45 min
Incident B: Initial attacker action at Day 1 14:00, first alert at Day 3 09:00 → MTTD = 43 hr
Incident C: Initial attacker action at 16:00, first alert at 17:15 → MTTD = 75 min

MTTD (average) = (45 min + 43 hr + 75 min) / 3 = ~ 15 hr average
MTTD (median) = 75 min (Incident C)

Use median rather than mean when you have outliers — a single 72-hour dwell incident shouldn’t inflate the MTTD to make everything else look worse. Track both: median for day-to-day program health, mean for trend analysis and SLA discussions.

Retrospective MTTD: Calculate from incident post-mortem data — when did the attacker gain initial access (based on forensic artifacts) vs. when did the first alert fire? This is often weeks after the incident, not real-time.


Alert-to-Ticket Ratio: Reading the Signal

Healthy state: 1 ticket per 3–5 alerts (30–60% alert precision)

Week 1: 1,000 alerts → 50 tickets → ratio 1:20 (warning)
Week 2: 1,200 alerts → 45 tickets → ratio 1:27 (deteriorating)
Week 3: 1,500 alerts → 40 tickets → ratio 1:38 (alert fatigue state)

When the ratio deteriorates:

  1. Identify the FP contributors — which rules are generating the most alerts with the lowest ticket rate?
  2. Tune or retire — if a rule generates 200 alerts/week with 0 tickets, it is a pure FP generator. Either tune it to fire less or retire it.
  3. Do not compensate with automation — auto-closing FP alerts without fixing root cause just hides the problem while analyst trust in the system erodes.

Coverage Percentage: The Breadth View

Threat model: 45 techniques relevant to your sector with available telemetry
Rules in place: 28 techniques covered with at least one tested rule
Coverage: 28/45 = 62%

Breakdown by tactic:
  Initial Access: 5/6 techniques = 83%
  Execution: 4/7 techniques = 57%
  Persistence: 6/9 techniques = 67%
  Credential Access: 3/8 techniques = 38%  ← gap
  Lateral Movement: 4/5 techniques = 80%
  Collection: 3/6 techniques = 50%
  Exfiltration: 3/4 techniques = 75%

Coverage gaps in high-risk tactic areas (Credential Access, Collection) are more urgent than gaps in low-risk areas. Report coverage by tactic, not just total percentage.


Rule Health Rate: Quality Over Quantity

Total rules: 150
Rules with passing TP fixture in CI: 82
Rules with passing FP fixture in CI: 61
Rules with both TP + FP fixtures: 55
Rules deployed without any fixtures: 68

Rule health rate: 55/150 = 37%

37% rule health is common in detection programs that have accumulated rules over years without systematic testing. A rule without a TP fixture may have broken due to field mapping changes, SIEM updates, or log source format changes — it’s silently failing without generating any alerts.

Rule health sprint: Quarterly, pick the 10 oldest rules without fixtures and either add fixtures or retire the rule. Trend toward 80%+ rule health over 12 months.

M-Trends (Annual Dwell Time Data)— Mandiant/Google