Vibe Engines
YouTube

Vibe Engines is free, interactive AI engineering & system design — runs in your browser. Pick a learning path

Availability (Nines) Calculator

Chain dependencies in series and parallel and watch the combined availability — and the yearly downtime it implies — fall out. Unlike single-service "nines" calculators, this one models the dependency graph, so you see how one shaky component drags down the whole system.

99.9399%end-to-end availability · 3.2 nines
5.3 hrdowntime / year
26.0 mindowntime / month

Dependencies are composed in series (all required) — their availabilities multiply. Add redundancy to put copies in parallel and claw nines back.

DependencyAvailability %RedundancyEffective
99.990%
100.000%
99.950%

Availability is the fraction of time a system can serve requests, and an end-to-end number is never better than the chain of things a request must pass through. This calculator composes your dependencies the way a request experiences them: every row is required, and each row can have redundant copies that cover for one another.

What it computes

Each dependency has an availability a (entered as a percentage) and a redundancy count k, the number of identical copies in parallel where any one is enough. The model is two rules applied in order:

effective_i  = 1 − (1 − a_i)^k_i          parallel copies
A            = effective_1 × effective_2 × …   series chain
nines        = −log₁₀(1 − A)
downtime/yr  = (1 − A) × 525,600 minutes   365 days
downtime/mo  = (1 − A) × 43,200 minutes    30 days

Redundancy works on unavailability: a component with k copies is down only when all k are down together. The chain works on availability: the request succeeds only if every row is up. The nines figure is fractional, so 99.95% reads as 3.3 nines rather than being rounded to three. Durations are printed in seconds, minutes, hours or days, whichever fits.

A worked example

The default architecture has three rows:

DependencyAvailabilityCopiesEffective
Load balancer99.99%199.990%
App service99.9%21 − 0.001² = 99.9999%
Database99.95%199.950%
  1. The app tier’s two copies turn 0.1% unavailability into 0.0001%. The effective column rounds to three decimals, so it displays this row as 100.000%.
  2. Chain: 0.9999 × 0.999999 × 0.9995 = 0.999399, shown as 99.9399%.
  3. Unavailability is 0.000601, so nines = −log₁₀(0.000601) = 3.2.
  4. Downtime: 0.000601 × 525,600 = 316 minutes, shown as 5.3 hr per year, and 0.000601 × 43,200 = 26 minutes, shown as 26.0 min per month.

Set the app service back to one copy and the total falls to 99.8401%: 14.0 hours a year and 1.2 hours a month. One redundant tier saves almost nine hours of annual downtime. In the default setup, the database at 99.95% with a single copy is the largest remaining source: 0.0005 of the 0.0006 total unavailability.

Assumptions and limits

  • Independent failures. The redundancy formula assumes copies never fail for the same reason. Shared zones, configuration, deploys and dependencies all break that, so the result is an upper bound.
  • Instant, perfect failover. A copy covers for a failed one immediately and without errors. Real health checks and failover take seconds to minutes, and that time counts as downtime.
  • Strict series. Every row is required for every request. Optional dependencies, caches with a fallback and graceful degradation are not modeled, which makes the tool pessimistic for systems built to degrade.
  • Averages, not incidents. 5.3 hours a year could be one bad afternoon or many short blips. The model says nothing about how downtime is distributed.
  • Fixed calendar. Monthly downtime uses 30 days; a calendar-month SLA over 31 days allows about 3% more.

How to use the result

Use the end-to-end figure to check whether a target is plausible before you promise it, and the effective column to decide where to invest.

  • Your SLA must sit below the chain. If the composed figure is 99.94%, promising 99.95% to customers leaves no margin for deploys, failover time or correlated failures.
  • Fix the weakest row first. The row with the lowest effective availability contributes the most downtime. A second copy there usually buys more than polishing an already strong component.
  • Remove before you replicate. Every required dependency multiplies the total down. Taking one off the critical path, or making it optional, can beat adding redundancy everywhere.
  • Turn the target into a budget. Monthly downtime is the error budget an SLO gives you; 26 minutes a month is roughly the room left for incidents and risky changes.

When to use it, and when not

Use it at design time, before anything is built: to check that a promised SLA is reachable from the parts you plan to use, to compare “add a replica” with “drop a dependency”, and to explain to a stakeholder why five 99.9% services cannot give a 99.99% product. It also helps when a vendor quotes one number and you need to see what that number does to your total.

It is the wrong tool once the system runs. Measured availability from request logs beats any composed estimate, because it already includes failover time, bad deploys and correlated outages. It also fits poorly where requests can succeed partly, such as a page that renders without recommendations, and for quorum systems, where a majority of copies must be up rather than any one.

Trade-offs and limits

The redundancy formula is only as good as its independence assumption. A common way to relax it is to say a share β of each copy’s failures hits every copy at once: a shared config push, a region outage, a bad release. Then unavailability is β × u + ((1 − β) × u)². For two copies of a 99.9% service:

Shared share βPair availabilityDowntime / year
0 (the tool)99.9999%32 sec
1%99.9989%5.8 min
10%99.9899%53 min
50%99.9500%4.4 hr

Just 10% common-mode failure takes the pair from six nines to four. Failover time is the other gap. The formula says the pair is down 0.53 minutes a year. If each copy fails 10 times a year and every failover takes 60 seconds of errors (an illustrative figure), that adds 20 minutes, almost 40 times what the formula predicts. The real figure for the pair is then nearer 99.996%.

Quorums need their own formula. A three-node cluster that needs two nodes up has availability 3a² − 2a³. At 99.9% per node that is 99.9997%, about 1.6 minutes a year, not the nine nines that “any one of three” would claim.

Common mistakes

  • Treating an SLA as an availability. A vendor SLA is a refund promise. It says what you get back when the vendor misses, not how often it misses. Use measured history where you can.
  • Replicating the wrong row. In the default chain a third app copy moves the total from 99.9399% to 99.9400%. A second database copy moves it to 99.9899%. Spend redundancy on the weakest row.
  • Counting optional dependencies in series. A cache with a fallback to the database, or a widget that can be hidden, does not take the request down. Leaving it in the chain makes the estimate too low and pushes you to harden the wrong thing.
  • Forgetting the hidden rows. DNS, certificates, the auth provider, the config store and the deploy pipeline are all in the request path, or can take it out. A chain that lists only your own services is optimistic.
  • Copies that share a fate. Two replicas in one zone, behind one switch, fed by one deploy, fail together. Without spreading them, the tool’s redundancy gain is mostly fiction.

Check yourself

Four required services each run at 99.9%. What is the total, and how much downtime does that allow in a 30-day month?

0.999⁴ = 0.996006, so 99.6006%. Unavailability is 0.003994, and 0.003994 × 43,200 = 172.5 minutes, shown as 2.9 hr a month. Each added 99.9% dependency costs about 43 more minutes a month.

How many copies of a 99% component do you need to reach at least 99.999%?

Three. Two copies give 1 − 0.01² = 99.99%, one nine short. Three give 1 − 0.01³ = 99.9999%. Each independent copy adds two nines here, because each multiplies the unavailability by 0.01.

In the default chain, which buys more: a second load balancer or a second database?

The database. A second load balancer gives 0.99999999 × 0.999999 × 0.9995 = 99.9499%, about 4.4 hours a year. A second database gives 0.9999 × 0.999999 × 0.99999975 = 99.9899%, about 53 minutes. The database had the most unavailability, so fixing it removes the most.

The tool says 99.9399% for the default chain. Can you sign a 99.95% SLA on it?

No. The chain is already 0.0101 points under the target before failover time, deploys or shared failures are counted. Either remove the database as a single point of failure or promise less, such as 99.9%.

every row is required, so availabilities multiplyload balancer99.99%app copy 199.9%app copy 299.9%any one is enough:1 − 0.001² = 99.9999%database99.95%99.9399%5.3 hr / year0.9999 × 0.999999× 0.9995 = 0.999399
The default chain. Parallel copies multiply their unavailabilities, so the app pair is down only when both are; the series chain multiplies availabilities, so the single-copy database at 99.95% sets most of the 5.3 hours a year.

How it works

  • Series (all required): availabilities multiply, so every dependency drags it down.
  • Redundancy (k copies, any one suffices): effective = 1 − (1 − a)^k.
  • Nines = −log₁₀(1 − availability); downtime uses a 365-day year and a 30-day month.
  • Each additional nine is 10× less downtime and far harder to reach.

Frequently asked questions

What do "nines" of availability mean?

Nines describe uptime as a percentage. Three nines, 99.9%, allows about 8.8 hours of downtime a year or 43 minutes in a 30-day month. Four nines, 99.99%, allows about 53 minutes a year or 4.3 minutes a month. Five nines, 99.999%, allows about 5 minutes a year, or 26 seconds a month. Each extra nine cuts the allowed downtime by a factor of ten, and is usually far harder and more expensive to achieve than the one before it.

How do I calculate downtime from an availability percentage?

Multiply the unavailability, 1 minus the availability, by the minutes in the period. A year has 525,600 minutes, so 99.95% availability allows 0.0005 times 525,600, about 263 minutes or 4.4 hours. This calculator uses a 365-day year and a 30-day month of 43,200 minutes, so 99.95% allows about 21.6 minutes a month. Calendar months of 28 or 31 days shift the monthly figure slightly, which matters when an SLA is measured per calendar month.

How does availability combine in series?

When a request must pass through several dependencies, each one has to be up, so their availabilities multiply. Three services at 99.9% each give 0.999 times 0.999 times 0.999, about 99.7%, which is worse than any one of them. Adding another required dependency can only lower the end-to-end number, and the weakest component sets a ceiling on the whole chain. That is why removing a dependency from the critical path is often worth more than hardening one.

How does redundancy improve availability?

With k identical copies where any one is enough, the component is down only when all copies are down at once, so the unavailabilities multiply: effective availability is 1 minus (1 minus a) to the power k. Two copies of a 99.9% service give 1 minus 0.001 squared, or 99.9999%. Two 99% replicas give 99.99%. Redundancy is the main tool for adding nines, but only if the copies fail independently and traffic moves to a healthy copy quickly.

Do redundant copies really fail independently?

Often not, and that is the main way this math flatters a design. Replicas that share a region, a power feed, a network path, a configuration system or a deployment pipeline can fail together, and a bad release usually reaches every copy. The formula assumes the failures are unrelated, so treat its result as an upper bound. Spreading copies across zones or regions, staging rollouts and testing failover are what make the calculated number closer to the one you actually get.

Why model the dependency chain instead of one number?

Real systems are chains of dependencies, such as a load balancer, an application tier, a database and a cache, each with its own availability. The end-to-end figure is the composition of all of them, so quoting the uptime of one service overstates what users experience. Listing every required dependency also shows where to spend effort: the row with the lowest effective availability is the one dragging the total down, and it is usually the place where redundancy buys the most.