We closed a database-only ticket the way we closed every ticket. It went into the preview branch first, then on to the mainline. The change was already verified and running in production, so the preview step had nothing left to check. We ran it anyway, out of habit, and hit thirteen merge conflicts against unrelated work that had piled up on that branch.

None of the thirteen touched our change. They came from the preview branch and the mainline branch drifting apart over other people’s work, and our ticket just happened to surface it.

The preview branch exists so a human can load a build and look at something before it ships: a dialog, a color, a layout. That is the whole job. Somewhere along the way, “ship to preview” had become a step we ran on every close, whether or not the diff held anything a human needed to see. A stored-procedure reorder has no dialog to look at. We were previewing SQL.

The conflicts forced the question we should have asked before running the merge: does this ticket produce anything a person needs to look at? For a database-only change the answer is no. The right close path is a plain merge straight into the mainline branch, with no detour through preview.

Routing by what the ticket touches

  • Previewable (UI, JS, CSS, anything a human needs to see rendered): ship to the preview branch first so someone can look at it, then merge on.
  • Not previewable (database-only, server config, backend logic with no visual surface): merge straight into the mainline branch and skip preview. There is nothing to preview.

The next ticket that day

Later the same day we shipped a change to the web server’s caching headers, so a set of already-versioned static files would tell browsers to cache them for a year instead of re-fetching every time. No UI, and no JS behavior change. We merged it straight into the mainline branch with no preview step, and it went out clean.

If the diff is the entire review surface, the preview branch is ceremony. If a human needs to look at something rendered, the preview branch is the review. Before you close a change, check which of those two it is. Database-only, server config and backend logic with no visual surface go straight to the mainline. Anything a person needs to see rendered goes through preview first.