The restore is the product
A backup job reporting success is a good thing.
It is also an answer to a narrower question than we sometimes pretend.
It tells us something about a copy operation. It does not automatically tell us that the right data was captured, that the data is consistent, that the keys will be available, or that the application can be brought back into a useful state.
As I work through the backup side of my operations platform, the distinction I want to keep visible is simple: the backup is an input. The restore is the product.
Start with the loss you are trying to survive
"We have backups" is not a recovery requirement.
Losing one document is different from losing an application database. Losing a host is different from losing access to an entire administrative account. Accidentally deleting data is different from discovering that it has been corrupted for several weeks.
Those scenarios affect what should be copied, how long versions should be retained, and which parts of the recovery path must be independent.
The usual recovery questions help:
- How much recent work could reasonably be lost?
- How long could the service be unavailable?
- Which dependencies are required to restore it?
- Who would perform the recovery, and what access would they need?
I would rather have explicit, modest objectives than assume that a frequent schedule has somehow answered all four.
A copy is not necessarily a recoverable application
Application state is often spread across more places than expected.
There may be database contents, uploaded files, configuration, identity-provider settings, encryption material, and references to other services. Some of these can be recreated. Some cannot.
There is also a difference between copying files and capturing a state that the application can use. Copying a live database directory, for example, is not automatically equivalent to taking an application-consistent backup.
The method needs to match the application and storage system. A supported database export, coordinated snapshot, or other documented backup process may be appropriate. The important part is verifying that the chosen method supports the intended recovery, not assuming that every archive of a directory does.
Synchronization deserves a separate label too. A synchronized deletion may faithfully remove the same file from several locations. That can be correct sync behavior without being the recovery behavior someone expected.
Keep the recovery path independent
An off-site copy is useful, but geography is only one kind of separation.
If the credentials needed for recovery exist only on the failed machine, the data may be safe while the restore is blocked. If the same administrative identity can delete both the source and every recovery copy, the failure boundary is not as independent as it first appears.
The same applies to documentation. A runbook stored only inside the service being recovered has an obvious weakness.
I want the recovery design to account for access to the repository, encryption material, required tooling, and a usable copy of the instructions. That does not mean making secrets easier to reach. It means designing a controlled recovery route that survives the failure being planned for.
Test somewhere that cannot overwrite the original
A restore exercise should not introduce the incident it is meant to prepare for.
Use an isolated destination, confirm the target, and avoid attaching restored applications to production integrations by accident. Depending on the application, a restored copy might otherwise send notifications, run scheduled work, or write to another system.
Then verify more than the existence of files.
Can the expected data be opened? Are ownership and permissions correct? Does the application start? Can an authorized user sign in and complete a representative read-only task?
For a hypothetical document service, that could mean recovering a known document, confirming its contents, and checking that the application can retrieve it through its normal interface. The exact test should come from the service's purpose, not from whatever is easiest to demonstrate.
Keep the evidence, including the awkward parts
The useful output of a recovery exercise is not just a green check.
Record which copy was used, what was restored, what was checked, how long the exercise took, and which steps required undocumented knowledge. Record the failures as well.
A repository integrity check, a file restore, and a complete application recovery are different levels of evidence. A dashboard should not collapse them into one reassuring status.
Retention needs similar care. A policy that looks sensible on paper still needs enough history for the loss scenarios that matter. Pruning old copies is an irreversible operation, not merely housekeeping to make the storage graph look better.
Make recovery a normal operating task
The point is not to turn every small service into a disaster-recovery programme.
It is to make a bounded recovery test part of operating the service, rather than a one-time ceremony performed after installation.
The claim should stay proportional to the evidence: a particular recovery path was exercised, with a particular copy, at a particular time. That is useful confidence. It is not a guarantee about every future failure.
The important milestone is not "the job ran." It is "we know what we could recover, and we know how we checked."