A lot of teams have CI/CD in the sense that tests run automatically on every push. Fewer have gotten to the point where a deploy is genuinely zero-downtime — where users never see an error or a blank page during a release.
Start with the build and test stages
Before deployment strategy matters at all, your pipeline needs to actually catch problems: unit tests, integration tests against a real (if ephemeral) database, and a build step that fails loudly rather than deploying a broken artifact. GitHub Actions makes this straightforward to define as a workflow that runs on every pull request, not just on merge to main.
Rolling deploys
For applications running behind a load balancer across multiple servers or containers, a rolling deploy updates instances one at a time, only routing traffic to the new version once it passes a health check, and only proceeding to the next instance once the current one is confirmed healthy. This is the most common path to zero downtime for horizontally-scaled applications.
Blue-green deployments
For applications where rolling deploys are risky (a schema change, for instance), a blue-green setup keeps two full environments and switches traffic from one to the other only once the new environment is fully verified. Rollback, in this model, is just switching traffic back — not a redeploy.
Automated rollback
None of this matters if a bad deploy still requires a human to notice and manually revert. Pipelines should include automated rollback triggers — a spike in error rate or failed health checks after a deploy should trigger an automatic revert to the previous known-good version, with the team notified rather than discovering the problem from customer complaints.
Where teams usually get stuck
The hardest part is usually database migrations — a schema change that isn't backward-compatible with the previous application version breaks zero-downtime deploys entirely. Getting this right generally means adopting an expand-and-contract migration pattern rather than making breaking schema changes in a single step.