What the number allows
Availability targets are easiest to understand as a downtime budget. Each extra nine cuts the budget by a factor of ten.
| Target | Downtime per year | Downtime per 30-day month |
|---|---|---|
| 99% | about 3 days 15 hours | about 7 hours |
| 99.9% | about 8 hours 46 minutes | about 43 minutes |
| 99.95% | about 4 hours 23 minutes | about 22 minutes |
| 99.99% | about 53 minutes | about 4 minutes |
At 99.9%, one slow database failover and one bad release in the same month can use the whole budget. For a platform handling millions of payments a day, each of those minutes is thousands of customers at a checkout.
Measure what the customer sees
"The servers were up" is not availability. A payment service can have every machine healthy while a certificate has expired on one connection and a third of card payments are being declined. Measure the thing the customer experiences: the share of payment requests that got a correct answer within the time limit. Count a timeout as a failure, because to the shopper it is one.
That one change, from machine health to request success, tends to surface problems that dashboards full of green lights were hiding.
Dependencies multiply against you
A single card authorisation might pass through a gateway, a fraud check, the core processing service and a database before it leaves for the card network. If each one is separately 99.9% available and all of them are needed, their availabilities multiply.
This is the arithmetic behind most availability design. Every system a payment must pass through costs you budget, and every redundant copy buys budget back. The catch is the word independently: two copies in the same data centre, on the same release, sharing the same database, tend to fail together.
Design for the failure path
- No single points of failure. At least two of everything that is in the payment path, spread across separate zones or sites, with failover that is tested regularly rather than assumed.
- Timeouts everywhere. A call without a timeout turns one slow dependency into a queue of stuck requests, and then into an outage of everything upstream.
- Retries with idempotency keys. Retrying a payment is only safe if the receiving system recognises the retry. Each request carries a unique key, and a repeated key returns the original result instead of charging the customer twice. More on idempotency and retries.
- Graceful degradation. Decide in advance what can be switched off under stress. Card networks have long done this with stand-in processing, approving low-risk payments on the issuer's behalf when the issuer cannot be reached. Inside your own platform, notifications, reports and loyalty points can wait; the authorisation cannot.
- Queues for work that is not urgent. Anything that does not need an answer before the customer leaves the till belongs behind a queue, where a slow consumer delays work instead of failing payments.
Most outages start with a change
Hardware rarely takes a well-built platform down. Releases, configuration edits, expired certificates and database migrations do. Release practice is therefore an availability practice:
- Automate the pipeline so every release is built, tested and deployed the same way. Manual steps are where the late-night mistakes happen.
- Release gradually: to one server or a small share of traffic first, watching the payment success rate before going further.
- Make rollback a single, rehearsed action that takes minutes, and decide in advance what result triggers it.
- Avoid changes around known peaks, such as festival sales, salary days and month-end.
Investing in the release pipeline usually pays twice: releases take less effort, and fewer of them cause incidents. On the platforms I led, owning CI/CD end to end cut release effort by about 40%.
Operate it like you mean it
Design and releases set the ceiling; operations decide how close you get to it.
- Alert on business signals. A sudden drop in approval rate for one bank or one card type is often the first sign of trouble, well before any server looks unhealthy.
- Written runbooks. The person woken at 3 a.m. should follow steps, not invent them.
- Blameless incident reviews. Each outage should end with changes to the system, not just to the people.
- Treat the budget as a budget. If a month's downtime is nearly spent, slow down risky changes until it recovers.
What this means in an interview
System design interviews for payments roles often come down to these questions: what happens when a dependency is slow, how you avoid double charges, and how you release without downtime. A good answer names the failure, the mechanism that handles it, and how you would know it is working.