DSL / SIGNAL · Product Delivery & Recovery Brief

Before you approve the release, prove what rollback can recover.

Returning to an older build is only one part of recovery. Before committing to a launch, check what happens to new data, existing clients, and actions that have already left your system.

Issue 00612 October 20268 min read
A reversible connection between application versions sits above persistent data and a separate external-action boundary.
DSL / SIGNAL 006

The release has a date. Does recovery have a boundary?

Imagine a team preparing a launch that changes how orders are recorded. The demonstration works, the deployment is automated, and someone says, “If anything goes wrong, we can roll back.” This is a hypothetical situation, not a client incident. The useful question is what that sentence actually promises.

Can the previous application read orders written by the new one? Will an older mobile client still understand the responses? If the release sends a confirmation or requests a payment, what happens to that action when the application returns to its previous version?

A release can be easy to deploy and difficult to reverse. For a founder or product leader, the consequential decision is not simply whether to ship. It is whether the team has demonstrated a safe recovery path for the business commitment being changed. A green deployment indicator cannot answer that question by itself.

Three different operations hide behind “rollback”

First, there is code rollback: returning the application or service to an earlier version. That version still needs to work with the data, configuration, dependencies, and supported clients present after the change. Returning the binary does not return the whole environment to its earlier state.

Second, there is data recovery: restoring a database or repairing affected records. This needs its own evidence about what can be recovered, which changes would be lost, and how the recovered state will be checked. A backup is a resource for recovery, not proof that the recovery procedure works.

Third, there is business reconciliation: accounting for actions already performed outside the restored system. A notification may have been delivered. Another service may have accepted an order. A payment operation may require a separate check or compensating action. Do not assume those effects disappeared because the database was restored, and do not repeat them without checking their outcome.

These are editorial distinctions for planning a release, not a universal recovery procedure. Their value is making the scope explicit: which operation restores the user journey, which only changes a component, and which leaves work to be reconciled?

Five recovery paths: revert compatible code, disable or isolate activity, roll forward with a tested fix, restore and reconcile, or defer when evidence is missing.
DSL / SIGNAL 006 · Source-backed field note

The cost is uncertainty after the stop decision

The launch date is a business commitment. So is what happens if the launch has to stop. If the team cannot distinguish recoverable state from irreversible effects, stopping the release can leave support, operations, and product teams with conflicting answers about what users should do next.

The cost of delay is not automatically a reason to ship. Compare the value of releasing now with the specific missing evidence: compatibility, containment, data restoration, or reconciliation. A bounded check may justify proceeding; an unresolved dependency may justify narrowing the release. Neither conclusion requires inventing an outage forecast or a revenue-loss figure.

A canary can limit initial exposure, but it answers a different question from rollback safety. Google’s SRE guidance describes evaluating a limited deployment against representative signals. Our inference is that a successful canary does not, on its own, demonstrate that old code can safely read new state. Both questions belong in the release decision.

Choose the recovery path, not just the deployment button

Use this decision map for one critical user journey. Several paths may form a sequence; they are not mutually exclusive labels for the entire product.

  1. Revert the code when the last safe version has been tested against the state the release can create. Record the supported configuration and deployment order, not just a commit identifier.
  2. Disable or isolate the capability when stopping new activity can contain the problem without breaking the rest of the journey. Verify that the control actually prevents the relevant work; hiding a button does not necessarily stop a background process.
  3. Roll forward with a fix when returning to the older version is unsafe and a tested correction offers the safer route. This is a decision based on evidence, not a default promise to repair production later.
  4. Restore and reconcile when recovery needs a known data state plus a check of subsequent internal and external actions. Define the acceptable loss boundary, who approves restoration, and how users’ outcomes will be verified.
  5. Defer or reduce the release when no demonstrated path meets the product’s operating commitment. Name the missing evidence and the condition for reconsidering; do not turn “not yet” into an indefinite technical objection.

For each chosen path, record the trigger, operator, authorization, procedure, and evidence of success. “The team can handle it” is not a usable instruction when the team must make a consequential decision under pressure.

What to verify in the first five to seven days

Days one and two: trace the commitment. Select a journey such as creating an order and seeing its confirmed status. List writes, queues, scheduled work, supported clients, dependencies, and externally visible actions. Mark the last safe version and explain why it is safe. Keep this inventory small enough to check, but complete enough to reveal the important state changes.

Days three and four: test the transition. In a representative non-production environment, run old and new versions together where the deployment requires coexistence. Create data through the new version, then exercise the proposed recovery path. Include delayed jobs and supported older clients. A test that only starts each version with an empty database misses the question this review is meant to answer.

Days five to seven: rehearse the decision. Agree on the stop condition, who can authorize the response, and how the operator knows it worked. Check the user outcome, not only that a process restarted. If restoration is relevant, rehearse it in an isolated environment and record reconciliation needs. This recommendation does not authorize a production restore, live payment, or message to a real customer as a test.

When an independent review is justified

An external review is useful when a fixed launch commitment meets uncertain compatibility, undocumented data changes, or recovery responsibilities spread across teams and providers. The immediate output should be a narrow release decision with evidence gaps and owners, not an automatic proposal to rewrite the product.

At Dymnoff Software Labs, a product audit can examine that boundary across the application, backend, data, and operating procedure. If your release depends on “we can roll back” but the team cannot show what survives it, discuss a focused release-readiness audit .

The practical rule: approve the release against the recovery path it can demonstrate, not the previous build it can redeploy.

Technical notes and primary sources

The cited sources establish narrower technical facts; the five-way decision map and first-week review above are DSL editorial recommendations, not instructions copied from a vendor.