There are many variables to take into account and never a single answer that works for everyone. But as a rule of thumb we should consider binary blue-green deployments if any of these is true:
We’re confident in the new version. We have tested the code thoroughly, and we estimate the chance of failure is pretty low.
We’re working in small safe iterations.
We need to switch all users at once.
Canary is probably a better choice when:
We’re not 100% confident in the new version, we think we have a low-to-decent chance of failure.
We’re concerned about performance or scaling issues.
We’re doing a major update, like adding a shiny new or experimental feature.
We’re OK with a slow rollout.
Our application depends on a legacy or third-party system that we can’t replicate in a testing environment. In this case, testing is only possible on live production systems.