Releases ran across multiple clusters on different days, and active-active doubled the surface. Verification was manual — an engineer triggering jobs in sequence and reading each result by hand — and end to end a release took about seven hours, most of it verification and waiting.
I rebuilt it on our internal workflow engine, starting on the canary and dogfood clusters, replacing each manual step with a platform component or building what didn't exist yet.
Verification was the part I underestimated. Across that many clusters the cost compounds, and a slip there causes real problems — the step meant to catch mistakes was the one most prone to them at that scale. The wall was that it needed shell scripts running against pods, and the workflow engine couldn't do that. So I went into the pipeline runtime underneath it and extended it until it could.
The script checks process health, logs, metrics, ports and release versions, then parses the output: fail on what matters, flag what needs a look, pass when it's clean. It tells you what's wrong, not just that something is.
Parallel deploys were argued about on reliability grounds. My position was that active-active was already in place and the infrastructure supported it — one side down doesn't affect the side still serving. A failed release now rolls back in parallel too, so recovery got faster as a side effect.
Fifty-two minutes now, deploying and verifying together, and verification runs against every pod rather than one sample per cluster. That caught edge cases we'd been missing.
Other services have picked up the pattern since, and the verification script gets adapted and asked about. I'd rather build the thing the next service can pick up than the thing that only solves my problem.