The CPU spiked at 3am and the pager did its job
An engineer woke up to read graphs a machine could have read faster, and the first twenty minutes of the incident were spent reconstructing a picture the platform already held.
What actually happens
There is nothing wrong with the alert in this story. It fired correctly, routed correctly and woke the right person. That is the problem.
A service saturates at around 03:00 under an overnight traffic shift. CPU crosses its threshold, the alert fires, the pager routes it to the on-call engineer, and the engineer wakes up.
What happens next is the same every time. Open the dashboard. Work out whether this is one host or the fleet. Check whether anything deployed recently. Check the upstream and downstream services. Check whether the database is under contention. Check whether this looks like the incident from three weeks ago.
None of that is analysis. It is context assembly, and every single input to it was already available to the platform at the moment the alert fired. The engineer is doing, at three in the morning and half awake, a set of queries that could have been run in parallel and attached to the alert.
The diagnosis, when it arrives, is often unremarkable. A scheduled job overlapped with a batch window. A cache expired and the fallback path is expensive. A single host took a disproportionate share of traffic after a failed health check removed its neighbour.
The organisational cost is not the incident. It is the fact that this pattern repeats, and the people it repeats on are the ones you least want to lose.
The alert did its job perfectly. It told a human that something was wrong, which is the easiest part of the problem, and then left them to do the hard part alone at 3am.
The same night, two ways
This clock is not about diagnosis speed. It is about how much of it was spent assembling a picture that already existed.
Illustrative, not measured. The times below model a scenario built from the patterns we see in production estates. They are not timings recorded at a named customer. The point is the shape of the clock, not the totals: check it against your own last ten incidents.
Today, alert then assemble
- 03:02CPU saturation threshold crossed. Alert fires. Pager routes to on-call.
- 03:02 ↓ 03:09WaitingEngineer wakes, connects, opens the dashboard.
- 03:09 ↓ 03:31WaitingContext assembled by hand: host or fleet, recent deploys, upstream and downstream, database contention, prior similar incidents.
- 03:31Cause identified: a scheduled job overlapping the batch window.
- 03:36Job rescheduled. Saturation clears.
- 03:50Notes written. Engineer does not get back to sleep.
~50 minutes · most of it context assembly
With Sentinel investigating first
- 03:02Threshold crossed. Sentinel begins investigating rather than paging.
- 03:03Host and fleet metrics, recent deploys, upstream and downstream service latency, database wait events and prior similar incidents queried together.
- 03:06Probable cause: a scheduled job overlapping the batch window. Two matching prior incidents surfaced with their resolutions.
- 03:07Impact assessed. The remediation is a reschedule, which carries no service impact.
- 03:08Action Ticket executes under policy: pre-check, reschedule, post-check, with automatic rollback armed.
- 03:12Sherlock confirms saturation cleared. RCA written with citations. Nobody was paged.
~10 minutes · and the engineer stayed asleep
The remediation in both columns is the same single action and it takes about the same time. The forty-minute difference is entirely detection-to-diagnosis, and almost all of that is context assembly.
This is the clearest example on the site of why we describe the platform as removing waiting rather than as fixing faster. The fix was never the slow part.
Every input the engineer gathered by hand was queryable in parallel. Host and fleet metrics, deploy history, service dependencies, database wait events and the incident archive are all available to the platform at the moment the threshold is crossed. Sentinel runs them together rather than serially through a human.
The second-order effect is the one worth raising with your engineering leadership. Overnight pages that turn out to be routine are the single most reliable predictor of on-call attrition, and this pattern is specifically the routine kind.
Why the number is what it is
The remediation in both columns is the same single action and it takes about the same time. The forty-minute difference is entirely detection-to-diagnosis, and almost all of that is context assembly.
This is the clearest example on the site of why we describe the platform as removing waiting rather than as fixing faster. The fix was never the slow part.
Every input the engineer gathered by hand was queryable in parallel. Host and fleet metrics, deploy history, service dependencies, database wait events and the incident archive are all available to the platform at the moment the threshold is crossed. Sentinel runs them together rather than serially through a human.
The second-order effect is the one worth raising with your engineering leadership. Overnight pages that turn out to be routine are the single most reliable predictor of on-call attrition, and this pattern is specifically the routine kind.
Every input the engineer gathered by hand was queryable in parallel.
Who decides to press go
Rescheduling a job is a low-impact action, which is exactly why the gate matters: the impact assessment is what decides whether a human is involved, not the confidence in the diagnosis.
The Action Ticket executes under policy: pre-check, execute, post-check, verify, with automatic rollback if the post-check fails. Nobody is paged, and this scenario takes that path.
The ticket would have been raised and held with the proposed MOP, blast radius and rollback path, and the on-call engineer would have been contacted with the diagnosis already complete rather than with a bare alert.
The engineer is not removed from the loop. They are removed from the incidents where the loop had nothing for them to decide.
CPU saturation threshold crossed at 03:02 on one service. Overnight traffic shift under way. Alert would normally page on-call directly.
Host and fleet metrics, recent deploys, upstream and downstream latency, database wait events and prior similar incidents correlated. Scheduled job overlapping the batch window identified.
Impact assessed as non-service-affecting. Action Ticket executes the reschedule under policy with pre-check, post-check and armed rollback.
Job schedule conflict added to the change calendar checks. Batch window overlap promoted to a pre-deploy validation so the same collision cannot be scheduled again.
This is a platform capability, not a published customer deployment for this exact scenario. The mechanism, which is correlated investigation followed by governed MOP execution with pre-check, post-check, rollback and approval gating, is running in production today; see governed day-2 operations across 2,000+ nodes, infrastructure observability across a large server estate and closed-loop network automation. The timings shown are modelled, not measured.
If the action carries no service impact
The Action Ticket executes under policy: pre-check, execute, post-check, verify, with automatic rollback if the post-check fails. Nobody is paged, and this scenario takes that path.
If the same investigation had proposed something service affecting
The ticket would have been raised and held with the proposed MOP, blast radius and rollback path, and the on-call engineer would have been contacted with the diagnosis already complete rather than with a bare alert.
What Sentinel did, step by step
- ObserveCPU saturation threshold crossed at 03:02 on one service. Overnight traffic shift under way. Alert would normally page on-call directly.
- InvestigateHost and fleet metrics, recent deploys, upstream and downstream latency, database wait events and prior similar incidents correlated. Scheduled job overlapping the batch window identified.
- ActImpact assessed as non-service-affecting. Action Ticket executes the reschedule under policy with pre-check, post-check and armed rollback.
- OptimizeJob schedule conflict added to the change calendar checks. Batch window overlap promoted to a pre-deploy validation so the same collision cannot be scheduled again.
Bring us last month of overnight pages
We will split each one into assembly, diagnosis and fix, and show you the ratio.