Combine both controls
Layering is the answer for high-risk releases. Run the new application version behind weighted routing at 5%, and inside that version keep the riskiest feature off for everyone except an internal cohort. You get two independent kill switches with different blast radii and different recovery times.
A payments team rewriting its fraud-scoring call does exactly this: route a small share of live authorization traffic to the new build, then enable the rewritten scoring path only for employee test accounts. If latency climbs, you cut traffic weight. If the scoring logic returns nonsense, you kill the flag and leave the deployment in place. Progressive delivery works best when the control you pull matches the thing that broke.
Design a canary deployment strategy

Percentage is the crudest segmentation and the right place to start. Beyond that, you can slice by geography or by internal users. The constraint is representativeness. A canary fed only by internal traffic will miss the request shapes that real customers generate, and a canary fed only by one region will miss the failure that depends on a different currency or a different regulatory path.
Session stickiness matters more than teams expect. If a user bounces between the canary and the stable version mid-session, you get inconsistent behavior that's hard to attribute and harder to debug. Pin the session once assigned, and make sure the pin covers every service in the request path rather than only the edge.
Then there's sample size. At 1% of 200 requests per minute, you'll see two requests a minute, and a 5% error-rate regression is statistically invisible for hours. Lengthen the window or raise the share, because otherwise this stage proves nothing beyond "the process started." Shared dependencies deserve the same scrutiny, because a canary deployment strategy that writes to the same cache or the same queue as the stable version can poison both.
Define measurable health signals
A scorecard is better than a threshold list. Fixed thresholds fire on Monday traffic patterns and stay silent during a Saturday incident. Comparison between the canary and the stable version controls for all of that, because both are serving the same conditions at the same moment.
Netflix learned this the hard way and runs a dedicated baseline cluster alongside production and canary, so the comparison isn't polluted by long-running instances with warm caches and aged heaps. Keep your scorecard short. Ten signals you trust beat forty you ignore.
User-impact signals
Error rate comes first, split by status class and by endpoint. A 1% rise in 5xx responses on a checkout endpoint means something different from the same rise on a health probe. Crashes and request timeouts follow, because both represent a customer who got nothing at all.
Latency belongs in percentiles. Watch p95 and p99 against the stable version, since the mean will stay flat while the tail doubles. These signals earn their place at the top of the scorecard for one reason: each maps to a person who couldn't complete something.
System and dependency signals
Underneath user impact sits saturation. CPU and memory trends tell you whether the canary is healthy now but heading somewhere bad. Database signals deserve their own line, especially query latency and lock contention, because a new version with one unindexed query will look fine at 5% traffic and take the cluster down at 50%.
Resist letting this layer drive the decision. Infrastructure metrics are noisy, and a canary deployment strategy that aborts every time a node reschedules trains your team to override the automation. Weight these signals lower than user impact, and use them to explain a regression rather than to detect one.
Business and security signals
A release can be technically clean and still cost you money. Transaction completion rate and settlement success are the signals that catch a change which returns HTTP 200 with the wrong body. For anyone running payments or lending, those numbers are the release criteria.
Security signals round it out. Watch authentication failure rates and authorization denials, since a new version that quietly broadens an access check won't register anywhere else on the scorecard. Anomalous access patterns against the canary slice deserve a page.