The assumption underneath everything
Blue-green promises an instant switch back. Canary promises automatic rollback. Feature flags promise a kill switch. All three rest on the same premise: the previous version can be made to serve traffic again, and doing so restores correct behaviour.
That premise is about your changes, not your tooling, and it fails quietly.
A rollback is only a rollback if two things hold. The old code must still be able to run, meaning it does not depend on something the new version removed. And the old code must still be correct against the current state of the world, meaning the data it reads is in a shape it understands.
Key idea: deployment platforms give you the ability to run the old artifact again. Nothing about that guarantees the system returns to a working state, because the artifact is only half the system. The data is the other half, and it does not roll back with the code.
Most rollback failures are data failures, which is why this lesson is mostly about schemas.

