there is a lengthy suite of tests and checks that run before it is deployed to staging. During this period, which could end up being hours, engineers will likely pick up another task. I’ve seen people merge, and then forget that their changes are on staging, more times than I can count.
only merge code that is ready to go live
written sufficient tests and have validated our changes in development.
All branches are cut from main, and all changes get merged back into main.
If we ever have an issue in production, we always roll forward.
Feature flags can be enabled on a per-user basis so we can monitor performance and gather feedback
Experimental features can be enabled by users in their account settings.
we have monitoring, logging, and alarms around all of our services. We also blue/green deploy, by draining and replacing a percentage of containers.
Dropping your staging environment in favour of true continuous integration and deployment can create a different mindset for shipping software.