On-call and incident response
Alerts route to a person, not a shared inbox. We hold a rotation with an agreed first-response time, work the incident, then write the note that stops the repeat.
On-call rotaPost-launch
A monthly retainer for software already in production: a named engineer who has read your codebase, an on-call rotation that answers, and a patch cadence that keeps dependencies current.
Your code does not change on its own; everything it stands on does. A dependency ships a security advisory, a payment provider deprecates the endpoint you use, certificate lifetimes shorten, a cloud service is retired, traffic doubles. The few things that do decay in place — expiring secrets, disks filling, tables outgrowing their indexes — do it on a clock nobody is watching. Maintenance absorbs that pressure at a steady, boring pace rather than in a panic on a Friday afternoon.
Deferred maintenance does not stay the same size. A runtime reaches end of life and stops receiving security patches; a framework that supports one major-version hop at a time stops offering a route from the version you are on. Skip two years and a two-day upgrade has become a migration with a rewrite hiding inside it. That is the arithmetic a retainer buys against: dull continuous work, priced monthly, instead of an unbudgeted quarter of emergency engineering.
| What is true of this work | What it forces | What we do about it |
|---|---|---|
| System was built by someone else | Cannot promise SLAs on day one | Takeover audit precedes any SLA |
| Backups are untested until restored | Recovery targets are assumptions, not facts | Quarterly restore into isolated environment |
| Advisories arrive on vendors’ schedule | Patch queue must stay short | Weekly train, security jumps queue |
| Feature work outbids reliability work | Shared budget starves patching | Ring-fenced floor, separate change budget |
| AI behaviour drifts without code changes | Regression cannot be judged by eye | Stored evaluation set gates swaps |
Alerts route to a person, not a shared inbox. We hold a rotation with an agreed first-response time, work the incident, then write the note that stops the repeat.
On-call rotaA weekly train of small upgrades that pass CI, with security advisories jumped to the front. Small and frequent beats one annual upgrade: a two-hour patch becomes a two-day emergency once exploited.
Weekly upgrade logA backup nobody has restored is a hypothesis. Each quarter we restore your database into an isolated environment, time it, and record the real recovery point against what you assumed.
Restore drill resultsThe change budget covers work too small to be a project and too real to ignore: a report, a form field, a partner integration tweak. Same tests and review as a build.
Monthly changelogEvaluation sets live in the repository and run on every prompt, retrieval or model change, with cost and latency tracked per request. When a provider retires a version, the swap is measured.
Evaluation setA queryable dependency inventory, advisories triaged against what you run, and a disclosure path with a named owner. Under the EU Cyber Resilience Act, exploited vulnerabilities need early warning within 24 hours.
Dependency inventoryWe take custody before responsibility: repository, cloud, domains, certificates, payment and app store logins. Then we deploy it ourselves, restore a backup into a scratch environment, run whatever tests exist. What fails becomes the risk register.
You getAccess matrix and risk register
We agree what counts as working: the user journeys that must not fail, and the thresholds that mean broken. Alerts are rebuilt around those symptoms, and anything that pages without a matching action is deleted.
You getAgreed SLOs and alert routing
The first cycle is not feature work. We clear what causes most of the noise: expiring certificates, dependencies with live advisories, jobs dying into a dead-letter queue, the backup nobody has restored, the nightly false alert.
You getStabilisation report with fixes shipped
Then it is rhythm rather than reaction: a weekly patch train, a fortnightly change slot, a monthly report on incidents, spend and what we left alone. Each quarter, a restore drill and an exit check.
You getMonthly report and current exit pack
A named engineer with reserved capacity, not a block of hours
Hours make the wrong thing scarce: in a quiet month you have bought nothing, and in a bad one you are negotiating scope during an incident. We price a fixed reliability floor plus a separate change budget, so neither starves the other.
We’d choose otherwise whenthe system is genuinely dormant and you want a cheap, best-effort safety net
Business hours plus automated recovery, for most products
Genuine round-the-clock cover needs three or more engineers in a rotation, and you pay for that whether or not anyone is paged. For most products the same money buys more reliability spent on self-healing, tighter alerts and a tested restore.
We’d choose otherwise whenrevenue moves while you sleep, a contract names overnight response, or stalled queues cause irreversible harm
Continuous, in small batches CI can judge
An annual project bundles hundreds of changes into one release, so when something breaks you cannot tell which change did it — and you sit exposed on known advisories for months meanwhile. Small batches keep the blast radius readable.
We’d choose otherwise whena frozen system sits under regulatory validation, where every change carries a revalidation cost
Negotiate response and resolution commitments instead
An uptime credit refunds a slice of the monthly fee; it does not restore your data or your customers. No studio controls your cloud provider, payment gateway and DNS registrar well enough to underwrite total availability.
We’d choose otherwise whenwe run the whole stack and the number reflects a measured baseline, not a guess
Yes — most of what we support was written elsewhere. We do not commit to a response time until the takeover audit is done, because promising four hours on a system we cannot deploy is a lie. If the audit finds something we cannot hold, like a runtime past end of life, we say so and price the fix separately.
You give thirty days’ notice and take the exit pack, which we keep current every quarter rather than assembling on the way out. Everything already lives in your accounts: repository, cloud, monitoring, registrar, secrets. We run a handover session with whoever takes over, and we never hold code, infrastructure or domains hostage. Ownership was never ours.
We do. Defects in work we shipped are fixed at no charge and outside your change budget, and each fix ships with the regression test that would have caught it. Incidents that originate elsewhere — a provider outage, a change your own team made — we still work immediately, but that time comes out of the change budget.
Monitoring, dependency upgrades, vulnerability scanning and routine remediation are heavily automated, and AI assistance drafts triage summaries and first-pass fixes. Anything that touches production data or mints a credential passes through a human approval gate — a deliberate limit, not a missing feature. The engineer who approves a change is accountable for it.
We review spend monthly against a budget you set and alert on the trend rather than the invoice. Most drift is structural: a log retention default, an oversized database left from a load test, a storage class nobody chose, retries multiplying calls to a metered API. We report the causes and the fix cost; the decision stays yours.
Thirty minutes with the engineers who would build it. You leave with a scope, a timeline and a fixed price — or an honest no, and the reason why.