Skip to content
All posts

Shipping to a Million Users: Lessons from Consumer Payments

1 min read Scale / Payments

Serving a million daily users changes how you think about every decision — not because the technology is exotic, but because the failure modes are. Here’s what working on consumer payments at scale taught me.

Testing shifts from “does it work?” to “what breaks first?”

Unit tests prove a function is correct. At scale, you need the answers to different questions: what happens when the idempotency key is reused? When a downstream bank is down for an hour? When two retries land at the same time? Property tests and chaos drills beat additional happy-path coverage.

Rollbacks are a feature, not a fallback

At small scale a bad release is an annoyance. At scale it’s a revenue event and a trust event. Every deploy is designed to be reversible, with the runbook exercised as often as the happy path. Boring rollbacks are the goal.

Analytics are the product’s second brain

You cannot reason about a system that serves a million people from anecdotes. Dashboards, SLOs, and alerting tuned to user impact turned “I think it’s fine” into “here’s the p95 by flow.” That’s the difference between guessing and leading.

Post-release support is a discipline

The moment code ships, the work of watching it begins. A structured incident response — severity triage, comms templates, blameless postmortems — is what separates teams that learn from teams that repeat.

Scale doesn’t change the fundamentals. It just stops forgiving you for skipping them.

More posts