Outcome
By the end of this lesson, you will be able to read smart-default recommendations, explain the Welford math behind them, and decide when to accept or override the recommendation.
| Tier | Engineer |
| JTBD | ”Understand how ZopNight computes smart-default autoscaler values so I can trust and tune them.” |
| Personas | Platform Engineer · SRE · DevOps Engineer |
| Prerequisites | M2.4.L1 |
| Time | 9 minutes |
| Bloom verb | Read (Apply), Explain (Understand), Decide (Evaluate) |
1. Concept
You should not have to guess what the minimum, maximum, target and cooldown ought to be. ZopNight looks at how the workload has actually behaved and suggests all four.
Nothing about this is a black box. The suggestion comes from the spread of the past measurements, worked out using Welford’s algorithm, which computes that spread as each reading arrives rather than by holding the whole history in memory.
THE PROMISE: Engineer doesn't have to know what min/max/target to set Smart-defaults compute from actual metrics history Output: reasonable starting configuration Engineer can accept or overrideThe smart-defaults are good first-pass values. Engineer judgment adds context.
What Welford computes
INPUTS: 30 days of CPU utilization metrics (~8,640 5-min samples)OUTPUTS (single-pass Welford): CPU average: avg(values) CPU stddev: online standard deviation P90 / P95 / P99: NOT true percentiles. Welford tracks only mean and variance, so the percentiles are a normal-distribution APPROXIMATION: P95 ~= avg + 1.64*stddev, P99 ~= avg + 2.33*stddev (commented "normal approximation" in the code). Accurate for smooth loads; loosest exactly where it matters most, on bursty non-normal workloads.Welford computes mean and variance in a single pass, online, with O(1) memory. This matters because metric data can be large (43,200 samples for 30 days of 1-min resolution). The percentiles above are derived from that mean and variance, not measured directly.
How the recommendation uses these stats
SMART DEFAULT for CPU-driven target tracking (smart_defaults.go):
Target value: 3-way tier on P95, not "P95 - 5%": P95 > 85% -> target 70 P95 > 60% -> target 75 else -> target 80 (hotter target when the workload already runs hot)
Min capacity: derived from cpu.Avg (the average load), NOT P05. P05 is never computed. The floor covers typical demand.
Max capacity: max( current + 2, ceil( (current × P99) / target × 1.3 ) ) (1.3 headroom for spikes; and never below count + 2)
Cooldown: 180s default; higher if stddev is high (bursty workload)Each calculation has a rationale rooted in the workload’s actual pattern.
Walk-through example
RESOURCE: prod-api ASGHISTORICAL capacity: 6 (fixed; no autoscaling)
HISTORICAL METRICS (30 days, Welford): CPU avg: 45% CPU stddev: 15% CPU P95: ~70% (= 45 + 1.64 x 15, normal approximation) CPU P99: ~80% (= 45 + 2.33 x 15)
SMART-DEFAULT RECOMMENDATION: Target: P95 (70%) is in (60%, 85%] -> 75% Min: from cpu.Avg (45%): floor(6 x 0.45 / 0.75) = 3 Max: max(6 + 2, ceil(6 x 0.80 / 0.75 x 1.3)) = max(8, ceil(8.32)) = max(8, 9) = 9 Cooldown: 240s (higher than default; high stddev = bursty)
RECOMMENDATION: Min: 3, Max: 9, Target: 75%, Cooldown: 240sThe recommendation handles the workload’s actual demand pattern, not an assumed one.
Why these specific calculations
Target = 3-way tier on P95 (70 / 75 / 80) Reasoning: A hotter workload (high P95) gets a lower target so it scales earlier; a cool workload gets a higher target so it does not over-provision. The tiers are fixed thresholds, not a P95-minus-margin formula.
Min = floored from cpu.Avg Reasoning: The AVERAGE load (not a low percentile) sets the floor, so the fleet always covers typical demand without constant scale-from-zero churn.
Max = max(count + 2, ceil(count x P99 / target x 1.3)) Reasoning: Headroom for the 1% extremes (1.3x), and never fewer than count + 2 + 50% safety margin for unprecedented spikes
Cooldown adjusted for stddev Reasoning: Bursty workloads (high stddev) need longer cooldowns to avoid oscillation Smooth workloads (low stddev) tolerate shorter cooldownsThe math is statistical; the calibration tested across many workloads.
When to override the smart defaults
Smart defaults are statistical. They miss workload-specific context:
CONTEXT THAT SMART DEFAULTS MISS ADJUST─────────────────────────────────────────────────────────────Known seasonal spike (Black Friday) Increase max temporarilyPending traffic event (new product launch) Increase max ahead of launchSLA requires 100ms p99 latency Lower target (scale earlier)Workload is stateful with warm-cache restart Longer cooldownWorkload is stateless and fast to scale Shorter cooldownCost-aggressive tolerance Higher target (run hotter)External integration constraints (e.g., DB pool) Lower maxCompliance or auditing constraints Lower max in regulated tiersThe smart-default is the starting point. Tune as workload knowledge grows.
Performance characteristics
WELFORD'S ALGORITHM: Time complexity: O(n) (linear in samples) Space complexity: O(1) (constant memory)
PRACTICAL TIMING: 30 days of 1-min resolution data (43,200 samples) Computation: <100ms Total smart-defaults endpoint: 200-500ms
SCALES TO: Hundreds of targets simultaneously Real-time UI response when engineer requestsThe math is fast; the UX is snappy.
How to view smart defaults
ZopNight UI: Automation → Policies → New Policy → Quick Setup
Target: select your autoscaling group
ZopNight queries metrics + computes Welford stats automatically Displays:
SUGGESTED VALUES: Min: 3 (computed from cpu.Avg) Max: 9 (max(count+2, ceil(count × P99 / target × 1.3))) Target: 75% (3-way tier on P95) Cooldown: 240s
BASED ON: 30 days CPU metrics Avg 42%, P95 78%, P99 92%, stddev 18%
[Accept] [Override] [Cancel]The customer can accept or override before saving.
Smart defaults vs engineer judgment
GOOD COMBINATIONS: Smart-default + engineer fine-tune (most common) Engineer adjusts 1-2 values; accepts rest Result: better than either alone
Smart-default + accept as-is (works for ~60% of cases) No tune needed; defaults work
Engineer-only (rarely needed) When metrics history insufficient Or: very specific external context
POOR COMBINATIONS: Engineer-only ignoring smart defaults Re-implementing the same statistical analysis manually
Smart-default + override without thinking Engineer changes values without considering dataThe smart-defaults are the starting point. Trust them; tune from there.
2. Demo
A real recommendation walkthrough:
WORKLOAD: production order-processor ASG Currently fixed at 8 instances (no autoscaling)
METRICS (last 30 days): CPU avg: 51% CPU P95: 89% CPU P99: 97% ← consistently saturating during peak Stddev: 23% ← high variance (bursty)
SMART DEFAULT RECOMMENDATION: Target: 70% (P95 89% > 85% -> the hot-workload tier picks 70) Min: 5 (from cpu.Avg 51%: floor(8 x 0.51 / 0.70) = 5) Max: 15 (max(8+2, ceil(8 x 0.97 / 0.70 x 1.3)) = max(10,15) = 15) Cooldown: 300s (high stddev = longer cooldown)
OPERATOR REVIEW: Target 70% already suits our latency SLA Our p99 latency target is 200ms; 70% CPU leaves headroom The hot-workload tier did the right thing automatically We do raise Min 5 -> 6 for extra safety margin during peak bursts
Max 15 acceptable (we don't have hard ceiling)
Cooldown 300s good (matches workload's burst-pattern)
Min 3 acceptable (HA + fault tolerance)
APPLIED CONFIGURATION: Min: 3, Max: 15, Target: 70%, Cooldown: 300s
RESULT (after first week): Average instances over week: 6.8 (down from 8 fixed) P95 CPU: 78% (within scaling threshold) P99 latency: 110ms (within 200ms SLA) Cost savings: ~15% vs fixed 8 instances Engineer experience: smooth; no manual intervention
LESSONS: Smart defaults gave reasonable starting point (~80% optimal) Engineer tuning added context (SLA-aware target) Final config beats both pure defaults + pure engineerThe smart-default + operator judgment produced a better-than-default-or-manual configuration.
3. Hands-on (5 min)
Configure an autoscaler via smart defaults:
□ STEP 1: Open Automation → Policies → New Policy → Quick Setup
□ STEP 2: Pick a target Target name: __________ Type: __________
□ STEP 3: Read smart defaults Suggested min: _____ Suggested max: _____ Suggested target: ___% Suggested cooldown: ___ seconds Based on metrics: __________
□ STEP 4: Identify override candidates Target too high for SLA? __________ Max too high for cost ceiling? __________ Cooldown right for workload? __________
□ STEP 5: Apply (or save) Final config: __________ Monitor for: 1 weekA 15-minute exercise per workload. Most accept with minor tuning.
4. Knowledge check
Q1
Smart-default target value for CPU-driven target tracking is set by:
A. The mean CPU value minus a fixed safety margin of ten points
B. A 3-way tier on P95: >85% picks target 70, >60% picks 75, else 80
C. The peak CPU
D. A fixed 70% on every workload
Show answer
Correct: B. A hotter workload gets a lower target so it scales earlier; a cool one gets a higher target to avoid over-provisioning. The target is a fixed 3-tier step on P95 (70 / 75 / 80), not a “P95 minus margin” formula.
Q2
A workload with stddev 23% gets a 300-second cooldown. Why:
A. Low stddev needs a longer settle time
B. Cloud requires it
C. High stddev = bursty workload
D. Arbitrary choice
Show answer
Correct: C. Longer cooldown prevents oscillation between scale-up and scale-down on transient metric spikes. Stddev correlates to volatility; volatility requires more cooldown. Stddev correlates to volatility; volatility requires more cooldown.
Q3
Smart defaults are a starting point. They miss:
A. Specific cloud regions
B. Workload-specific context; seasonal spikes, SLA latency requirements, stateful warmup, traffic events, compliance constraints
C. Math
D. Cloud provider rate limits on scaling actions, which the defaults have no way of knowing about them in advance
Show answer
Correct: B. Statistics don’t know about external context. Operators add it through judgment. Statistics don’t know external context; operators add it.
5. Apply
Smart defaults exposed in Automation → Policies → New Policy → Quick Setup flow. Customer can override before saving.
For your team: trust smart defaults as starting point; tune for SLA + business context; document the rationale.
Related lessons
Glossary terms touched
Welford’s algorithm · Smart defaults · P95 target · Stddev-based cooldown