Skip to main content
DoneThat

AI Adoption GuideITUpgrade

Post-upgrade performance baseliner

ML establishes pre-upgrade performance baselines and automatically flags regressions against them after cutover.

IT processPlanSelectDeployProvisionSupportUpgradeReplaceRetire

By Don, DoneThat’s AI coach · updated

What the baseliner produces

Post-upgrade performance baselining turns observability history into a cutover contract: you define what "normal" looked like before the change, then compare live traffic against that reference after go-live. Machine learning fits here because upgrade windows rarely look identical day to day. Seasonality, traffic mix, and dependency noise make static thresholds brittle. A learned baseline captures expected ranges per metric and surfaces meaningful drift instead of every harmless spike.

This pattern matters most when upgrades touch runtime behavior: kernel patches, JVM updates, database minor versions, container base image refreshes, and application dependency bumps. Functional tests can pass while latency, error budgets, or saturation curves shift enough to erode margin or trigger incidents weeks later. Baselining closes that gap by giving SRE and platform teams a structured regression signal tied to cost: slower paths, higher replica counts, retry storms, and cache miss rates all show up as measurable deltas before finance or customers feel them.

What the baseliner produces

Before cutover, the system ingests historical telemetry and builds per-metric baselines over a chosen window (often seven to twenty-eight days, excluding prior incidents or maintenance). After cutover, it compares post-deploy samples against those baselines using the same aggregation grain (p50/p95/p99 latency, error rate, CPU throttling, GC pause time, queue depth, and similar service-level indicators).

When a regression is detected, the output is intentionally narrow and auditable:

  • Metric name (canonical in your observability platform)
  • Baseline window (start, end, and any exclusions applied)
  • Post-cutover delta (absolute and relative change versus expected band)

If data is insufficient (new service, truncated history, mis-tagged environments, or cutover too recent for stable samples), the regression flag is empty. That is not a green light. It means the model refused to assert a comparison. The team still investigates using dashboards, synthetic checks, and change records. An empty flag should trigger a manual review checklist, not silence.

The outcome is cost: earlier detection of performance regressions reduces over-provisioning, incident hours, and customer-visible slowdown. A five-point latency increase on a hot path can force horizontal scale-up within days. Catching that in the first hour after cutover is materially cheaper than discovering it from a capacity alert or support queue.

When to run it in the upgrade lifecycle

Baselining belongs in the same change window as your other upgrade automation, not as a post-mortem exercise.

Pre-cutover (required): Lock the baseline window, confirm environment tags match production, and exclude known anomalies (marketing events, batch jobs, prior failed deploys). Pair this step with patch prioritization by risk so high-risk upgrades get longer history and tighter review gates.

At cutover: Record the cutover timestamp as the boundary. Align metric queries to that instant so pre and post slices do not overlap.

Post-cutover (first hours to days): Run continuous comparison as traffic stabilizes. Use regression test case generator output to know which functional paths should correlate with latency and error metrics; baselining validates whether those paths stayed healthy at scale.

Stabilization: When multiple metrics drift together, feed correlated anomalies into post-deploy anomaly clustering so on-call sees one narrative instead of twelve unrelated pages.

Escalation: If deltas breach policy or SLO burn accelerates, rollback decision assistant can weigh rollback cost against continued exposure, using the same cited metrics as evidence.

How ML baselines differ from static alerts

Traditional alerts compare live values to fixed thresholds or week-over-week deltas. That works for hard limits (disk full, certificate expiry) but fails for nuanced performance shifts after upgrades.

Learned baselines typically:

  1. Model seasonality (time of day, day of week) so Tuesday 14:00 traffic is not compared to Sunday 03:00.
  2. Learn cross-metric context (CPU up while latency flat may be normal during cache warm-up; CPU up with latency up may not).
  3. Adapt band width to signal volatility: noisy metrics get wider expected ranges; stable metrics get tighter ones.
  4. Honor change points by resetting or discounting data after partial rollouts, canaries, or feature flags.

The regression flag is a hypothesis, not a verdict. SRE validates whether the delta is customer-impacting, confined to a canary shard, or explained by a confounder (new bot traffic, A/B test, backup job). The cited delta makes that triage faster than scrolling unrelated charts.

Vendor integration patterns

All four major APM and observability stacks can feed this workflow. Implementation details differ; the baseliner logic stays the same.

Datadog: Use historical metrics queries (avg:, p95:, trace.servlet.request.duration) with rollup aligned to your SLO windows. Datadog Anomaly Detection and Watchdog can approximate baselines; for upgrade-specific windows, export query results or use the Metrics API to snapshot pre-cutover series into your baseliner job. Tag consistency (env, version, service) is critical so post-cutover series match the pre-upgrade cohort.

Dynatrace: Davis AI already baselines per service automatically. For upgrade cutovers, mark the deployment with DT_RELEASE_VERSION and use metric events or custom workflows to compare pre/post using the same entity selector. Problems detected by Davis can enrich the regression flag with affected entities, but your output should still cite the underlying metric, window, and delta for auditability.

Splunk: Observability Cloud or ITSI can pull metrics via SPL (mstats, timechart). Store pre-cutover aggregates in a lookup or summary index keyed by service and metric. After cutover, scheduled searches compute delta against the lookup. ML Toolkit or external models can replace hand-tuned thresholds when metric cardinality is high.

New Relic: NRQL FACET queries over Metric or transaction events build baselines per application and endpoint. Use deployment markers in NrAiIncident or change tracking to anchor the cutover. Applied Intelligence correlations help group regressions; export the primary metric violation into your standard flag format.

Across vendors, standardize on a small metric catalog for upgrades (latency, errors, saturation, and one business proxy such as checkout completion time). Avoid baselining hundreds of low-signal series; noise dilutes review and increases false positives.

Operating the workflow on an SRE team

Treat the baseliner as a change gate, not a replacement for judgment.

Ownership: Platform or SRE owns baseline window policy and metric catalog. Service teams own interpretation and remediation. Change management owns cutover timestamps.

Runbook hooks: When a flag is non-empty, the on-call engineer confirms environment parity, checks recent config diffs, and compares canary versus full fleet. When empty, run the insufficient-data checklist: extend observation window, verify agent version on new nodes, confirm scrapes after autoscale.

False positives: Warm-up periods, cache cold starts, and JIT compilation after JVM upgrades commonly spike latency for minutes. Configure a short burn-in exclusion after cutover, then evaluate. Document exclusions in the baseline window metadata so auditors understand why the first thirty minutes were omitted.

False negatives: Low-traffic services may never trigger statistical tests. Complement with synthetic probes and load tests for critical paths.

Evidence retention: Store each flag with metric name, window, and delta in the change ticket. That supports post-incident review and feeds the next upgrade's risk score.

Limits and pairing with human investigation

ML baselining does not prove root cause. It does not replace profiling, heap dumps, or query plan analysis. It answers a narrower question: did this upgrade move the performance needle relative to recent normal?

Insufficient data remains a first-class outcome. New regions, greenfield services, or observability gaps after the upgrade (broken agents, dropped labels) produce empty flags by design. Teams should treat that as "unknown," investigate anyway, and fix telemetry before the next change.

Used with patch risk ranking, targeted regression tests, anomaly clustering, and rollback guidance, post-upgrade performance baselining gives SRE a repeatable cost control: catch regressions when they are still small, cite the numbers that matter, and keep humans in the loop for every decision that affects production.

Is this worth automating for you?

Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other. This one is rated high effort to implement, so the baseline matters more than usual.

DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.

Measure the baseline first