Check · 40 minutes · 6 questions
“We have backups. Everything is backed up nightly.”
Ask for these first
In writing, before the meeting. The request is half the check: everything below is one line to supply if it exists.
Restoring proves the copy is complete, the format is readable, and the environment to receive it still exists. Nothing else proves any of those.
If instead“The backups run every night and we get the success emails.” That is a statement about a job, not about a copy.
The measured figure, not the estimate. The estimate contains only the restoration term and omits detection, the decision, and verifying the result is correct rather than merely running.
If insteadThe number is quoted with confidence and has never been timed. Ask when the stopwatch was started and by whom.
A copy in the same account as the original does not survive the compromise of that account, which is the ordinary shape of a ransomware event rather than an exotic one.
If insteadSame cloud account, same console, same login. Or nobody knows, which is the same answer.
Read the list against the asset register rather than against memory. Files, mail, DNS, gateway configuration and secrets are the usual absentees, and each one turns a restore into a partial one.
If instead“Everything.” Nothing covers everything, and a supplier who says so has not checked.
Ask the owner, not the engineers, and in their own units — orders, records, messages. That answer is the RPO, and everything technical is downstream of it.
If insteadThe interval was chosen for operational convenience and the business has never been asked. In most companies the honest answer is far shorter than nightly.
Detection, decision, restoration, verification. Teams are reliably wrong about the total and the error is always in the same direction.
If insteadResistance to rehearsing on the grounds that it is risky. A recovery nobody dares rehearse is a recovery nobody should rely on.
Our own deployments, July–August 2026
This site failed to deploy for six consecutive days and nobody noticed. A pattern in .gitignore without a leading slash matched a directory at any depth, so a build input stopped being committed and every build after it failed — while production kept serving the last good version, which is exactly why it was invisible. We were monitoring whether the site was up. Nothing was watching whether what was live was what we had written.
SinceAugust 2026. There is a /version endpoint carrying the commit and build time, and `npm run check:deploy` compares local HEAD against it and fails loudly when they differ. The class of failure was detection rather than recovery, which is the term this check spends the most time on for exactly that reason.
A supplier who cannot supply a base and a period has told you something, and it is not that they are disorganised. We do this for a living and the questions land differently when they come from outside.