2026-05-25

99.9% vs 99.99% Uptime: What the Difference Really Means

uptime SLA availability downtime

What Is Uptime?

Uptime (availability) is the percentage of a period during which a service was running normally. It is the headline metric in most SLAs (service level agreements), and the formula is simple.

Uptime (%) = (operational time ÷ total time) × 100
           = (1 − downtime ÷ total time) × 100

Numbers like "99.9%" look almost identical on paper, but once you convert them into allowed downtime, the picture changes dramatically. This article translates uptime back into real time and explains what the gap between 99.9% and 99.99% means in practice.

How to Count the Nines

In the availability world, uptime is often described by how many nines line up.

Uptime Name Number of nines
99% two nines 2
99.9% three nines 3
99.99% four nines 4
99.999% five nines 5

Each additional nine cuts the allowed downtime to roughly one tenth. Going from 99.9% to 99.99% means reducing your acceptable outage time by an entire order of magnitude.

Downtime Conversion Table

Here is each uptime level converted into allowed yearly and monthly downtime (based on 365 days per year and roughly 730 hours per month).

Uptime Downtime per year Downtime per month
99% (two nines) ~3 days 15 hours ~7 hours 18 min
99.5% ~1 day 20 hours ~3 hours 39 min
99.9% (three nines) ~8 hours 46 min ~43 min
99.95% ~4 hours 23 min ~22 min
99.99% (four nines) ~52 min ~4 min
99.999% (five nines) ~5 min ~26 sec

Laid out this way, 99.9% allows about 8 hours 46 minutes of downtime per year, while 99.99% permits only 52 minutes. Both round to "almost 100%," yet the operational discipline they demand is in completely different leagues.

Calculate It Yourself

When you want a quick conversion, this one-liner does the job. Change the uptime value to get the allowed downtime for any target.

# Convert uptime into yearly downtime
# Example: 99.9% → about 8.76 hours/year (525.6 minutes)
uptime=99.9
python3 -c "d=(1-${uptime}/100)*365*24; print(f'{d:.2f} hours/year ({d*60:.1f} min/year)')"

You can also go the other way and find the uptime required to stay within a downtime budget, which is handy when setting an SLA target.

# If you can tolerate 30 minutes of downtime per month, what uptime is required?
# One month = 730 hours = 43800 minutes
downtime_min=30
python3 -c "print(f'{(1 - ${downtime_min}/43800)*100:.4f} %')"

What the 99.9% vs 99.99% Gap Means in Practice

The difference is only 0.09% on paper, but the operational requirements diverge sharply.

  • 99.9% (up to ~8h 46m per year): A realistic target that absorbs planned maintenance and short incidents. Achievable even on shared hosting and typical websites.
  • 99.99% (up to ~52m per year): Effectively requires eliminating single points of failure, redundant architecture, automatic failover, and round-the-clock monitoring and response. A single longer outage can blow your entire yearly budget.

Adding one more nine causes cost and operational overhead to jump significantly. The goal is not to chase the highest possible uptime, but to pick a target that matches the nature of your service. To estimate what downtime actually costs, see the cost of website downtime.

Impact by Industry

The same downtime affects different businesses very differently.

Industry Suggested target Why
Personal blogs, corporate sites 99.5–99.9% Short outages are tolerable; over-investing is unnecessary
E-commerce 99.9–99.95% Downtime directly cuts revenue, especially during sales
SaaS, business systems 99.95–99.99% Customer operations stall, so a contractual SLA is needed
Payments, financial infrastructure 99.99%+ Regulatory and reliability requirements are extremely strict

When an agency sets an SLA with a client, a practical approach is to start around 99.9% and adjust based on how critical the site is. The full SLA design process is covered in how to build an uptime report.

Monitoring Your SLA with Miterl

Once you have chosen a target, you need to continuously measure whether you are meeting it. Miterl checks your site every minute and aggregates uptime automatically.

# Fetch the last-30-day uptime via the API (uptime_30d)
curl -s "https://miterl.com/api/v1/monitors/1" \
  -H "Authorization: Bearer YOUR_API_KEY" | jq '{name, status, uptime_30d}'

When you need a custom window such as a calendar month, pull the resolved incidents and sum the total downtime (seconds) yourself.

# Sum the downtime (seconds) of resolved incidents
curl -s "https://miterl.com/api/v1/incidents?monitor_id=1&status=resolved&per_page=100" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  | jq '[.data[].duration_seconds] | add'

Excluding planned maintenance windows from the calculation lets you evaluate genuine incidents only. Monthly uptime reports are generated automatically in the dashboard and can be shared with clients via a share URL or PDF, proving SLA compliance with hard numbers.

Summary

Uptime is spoken of in nines, and each additional nine cuts allowed downtime to roughly one tenth.

  • 99.9% allows about 8h 46m of downtime per year; 99.99% allows only about 52 minutes
  • Adding a nine sharply increases cost through redundancy and on-call readiness
  • The goal is not to maximize uptime, but to match the target to your service
  • Measure compliance continuously and prove it with a report

For how to build an SLA report, see how to build an uptime report, and for measurement setup, see the documentation. You can try uptime aggregation on a free plan.