Your status page says everything is green, but customers in one region cannot sign in, checkout requests are timing out, or video sessions stall after playback starts. The infrastructure is technically running; the application is not reliably doing its job.
Application availability is the percentage of valid user interactions that an application completes successfully within an agreed measurement window. Measure it with a service-level indicator (SLI) that reflects a real user outcome, then compare that result with a service-level objective (SLO). A simple host-up check is useful for diagnosis, but it is not proof that the application is available.
This guide shows how to define “available,” calculate real uptime, avoid flattering measurements, and spend engineering effort where it reduces user-visible failure.
What application availability actually measures
An application is available when a user can perform its agreed function when required. AWS defines availability as the percentage of time a workload is available for use, where “available for use” means it performs its agreed function successfully.
That last phrase matters. A process can be running while its database is unreachable. A home page can return 200 OK while login fails. A streaming manifest can load while segments time out in one geography. None of those systems should receive full availability credit merely because a shallow health endpoint responded.
Availability therefore needs three explicit boundaries:
- The user or workload: human visitors, API clients, internal operators, or a defined subset.
- The important action: load a page, authenticate, place an order, upload an object, start a stream, or complete another critical journey.
- The success condition: correct response, acceptable status, and—when users would consider a very slow result a failure—a latency threshold.
Without those boundaries, “99.99% available” is a number without a testable meaning.
Availability, reliability, and durability are different
Availability asks whether the application can serve an intended function now. Reliability is broader: it describes whether the system continues to behave correctly over time. An application may be reachable yet unreliable because it returns stale data, produces intermittent errors, or responds too slowly to be useful.
Durability answers another question: whether accepted data remains intact over time. An object store can be temporarily unavailable without losing data, or available while silently serving corrupted data. Track availability, latency, correctness, and durability separately so one healthy aggregate cannot hide another broken property.
High availability is the architecture and operating practice used to keep a service within a demanding availability target. It is not a product switch or a synonym for backup. Redundancy, health-based routing, fault isolation, automated recovery, capacity management, and tested operational procedures all contribute.
How to calculate application availability
The basic time-based formula is:
Application availability =
available time / total agreed service time × 100
If an application was expected to operate for all 43,200 minutes in a 30-day month and had 30 minutes of qualifying downtime, its availability was:
(43,200 - 30) / 43,200 × 100 = 99.9306%
For a request-driven service, a user-centered calculation is often more representative:
Application availability =
successful valid requests / total valid requests × 100
If 4,995,000 of 5,000,000 valid requests succeeded, request-based availability was 99.9%. Google’s SRE guidance recommends expressing SLIs as good events divided by valid events and shows that measurements can come from load balancers, server logs, black-box probes, or client instrumentation.
Time-based versus request-based availability
| Method | Best fit | Numerator | Main blind spot |
|---|---|---|---|
| Time-based | Low-traffic services, scheduled jobs, simple endpoints | Good time windows | Treats a quiet minute and a peak minute equally |
| Request-based | APIs, web apps, high-volume services | Successful valid requests | Misses users who could not reach the request-counting layer |
| Journey-based | Login, checkout, upload, playback, other business flows | Successful completed journeys | Costs more to instrument and maintain |
| User-minute | Interactive products with partial degradation | Minutes in which a user had a good experience | Requires careful client-side definition and telemetry |
Google’s availability table notes that aggregate failed operations can be more useful than outage duration when a service is partially available or traffic varies through the day. A five-minute global outage at peak traffic can affect more work than an hour-long failure in an unused feature at 03:00. A request- or journey-based SLI captures that difference.
For media delivery, one SLI might count playback starts that begin within an agreed threshold. Another might count segment requests completed without a server error. Keeping them separate tells the team whether the application is reachable but the viewer experience is degraded.
Convert availability targets into downtime budgets
The number of nines becomes useful only when translated into a failure budget for the same measurement window.
| Monthly availability target | Approximate downtime in 30 days | Error budget |
|---|---|---|
| 99% | 7 hours 12 minutes | 1% |
| 99.9% | 43 minutes 12 seconds | 0.1% |
| 99.95% | 21 minutes 36 seconds | 0.05% |
| 99.99% | 4 minutes 19 seconds | 0.01% |
| 99.999% | 26 seconds | 0.001% |
These values assume continuous service and a 30-day month. Do not mix a monthly target with a yearly downtime table or silently remove planned maintenance. AWS cautions that excluding scheduled downtime is usually a poor representation of what users experience and that higher availability targets increase cost and operational constraints.
Use MTBF and MTTR to explain the result
A historical availability percentage describes the outcome, not why it happened. Mean time between failures (MTBF) and mean time to repair or recover (MTTR) split the problem into frequency and recovery:
Estimated availability = MTBF / (MTBF + MTTR)
IBM documents this relationship and points to two improvement paths: increase the time between failures, reduce recovery time, or do both. A team with frequent two-minute incidents needs different work from a team with one eight-hour incident, even when their monthly availability is similar.
Define an availability SLI that users would recognize
Start with plain language before writing a query:
The proportion of valid checkout attempts in which a customer receives an order confirmation within five seconds, measured over a rolling 28-day window.
This statement identifies the population, event, success condition, latency threshold, and window. Engineering can now decide where the closest trustworthy measurement exists.
Choose the measurement point deliberately
- Synthetic probes test from outside the application and can catch DNS, routing, TLS, and frontend failures. They may miss real account state, device behavior, or less common journeys.
- Load balancer or edge logs see requests even when the application process cannot. They are strong for request success, but can miss failures before traffic reaches the edge and problems after the response leaves it.
- Application logs and traces provide detailed failure context. They cannot count requests the process never received.
- Real-user monitoring measures the client’s experience across devices and regions. It can be affected by sampling, privacy controls, ad blockers, and incomplete sessions.
- Business events such as completed orders or successful playback starts measure the outcome that matters most. They usually need supporting telemetry to identify the failing component.
The best system uses one user-facing SLI as the score and several diagnostic signals to explain changes. Microsoft’s current availability monitoring guidance distinguishes current component health from the longer-term statistics used to report availability, and recommends aggregating the lower-level factors that support an application’s business function.
Decide what counts as a valid event
Document exclusions before an incident, not while an SLA report is being challenged. Common questions include:
- Are malformed requests excluded?
- Do authentication failures caused by bad credentials count?
- Does client cancellation count after the server has completed the work?
- Are scheduled maintenance windows part of total service time?
- Which status codes are application failures rather than correct rejections?
- Does a response count as good when it arrives after the latency threshold?
- How are missing telemetry and monitor failures reported?
Unknown data should not quietly become success. Report coverage beside availability and treat material telemetry gaps as an investigation. Otherwise a broken monitor can make an outage look like perfect uptime.
Separate global and segmented views
A global average can hide a complete failure for a small customer group. Keep the primary SLI stable, then segment it by region, endpoint, customer tier, device class, release version, and critical journey where the traffic volume supports a meaningful result.
Do not create hundreds of independent objectives. Use segments to reveal blast radius and prioritize work while preserving a small set of decision-making SLOs.
SLI, SLO, and SLA: keep the roles clear
- SLI: the measured result, such as 99.94% of valid checkout attempts succeeded within five seconds.
- SLO: the internal target, such as 99.9% over a rolling 28-day window.
- SLA: a customer commitment that defines scope, measurement, exclusions, and consequences when the commitment is missed.
Google Cloud’s SRE explanation recommends an internal SLO that is tighter than the external SLA so the team has room to act before a contractual miss. Alerting should focus on how quickly the error budget is being consumed, not every isolated component wobble.
For example, a 99.9% SLO gives a 0.1% error budget. If 20% of that budget disappears in one incident, the post-incident priority should be proportional to user impact. If the service remains comfortably inside budget, the team can continue shipping changes instead of chasing an undefined goal of 100%.

How to improve application availability
Improvement should follow the measured failure path. Adding replicas cannot fix a broken deployment sent to every replica, and a second region cannot fix a shared authentication dependency that fails globally.
1. Remove single points of failure on the critical path
Map every dependency required for the important user journey: DNS, edge delivery, load balancers, compute, queues, databases, identity, third-party APIs, and operational control planes. For each one, ask how failure is detected, where traffic goes next, and whether failover preserves required state.
Redundancy improves availability only when failures are sufficiently independent and health detection works. Microsoft’s redundancy guidance warns that added redundancy also adds complexity and should be validated through scaling, health removal, and routine operations.
2. Route around failures close to users
Health-based traffic steering can stop sending requests to an unhealthy origin or location. Distribute static and cacheable content so an origin interruption does not automatically become a global outage, and use an origin shield to reduce direct origin pressure during spikes.
Health-based steering is only as good as its detection interval, which is the number worth asking any delivery provider for. ZeroBuffer routes over anycast and withdraws an unhealthy or congested location's announcement so traffic reroutes to the next-nearest edge, and it commits to a 99.99% uptime SLA — a figure you can hold against the error-budget table above. Ask any provider, including us, to put its detection interval in writing. That covers the delivery path and origin exposure; the application still needs its own user-centered SLIs for uncached APIs, authentication, databases, and complete business journeys, because no routing layer can fail over a broken checkout. Read more about how anycast routing changes the failure path.
3. Degrade noncritical features before the whole service fails
If recommendations, analytics, thumbnails, or secondary metadata become unhealthy, decide whether the critical transaction can continue without them. Timeouts, bounded retries, circuit breakers, queues, stale-but-safe cache entries, and workload shedding can contain a dependency failure.
Google Cloud’s graceful-degradation guidance recommends throttling, dropping excess work early, handling partial errors, and testing overload behavior so high load does not cascade into total failure. Define degraded success honestly: a checkout without optional recommendations may be good; a “successful” payment without an order record is not.
4. Reduce MTTR with detection and practiced recovery
Page on user-impacting symptoms, then use logs, traces, metrics, and change markers to find the cause. Automate safe failover and rollback, but regularly test those paths. Recovery code that has never run under realistic conditions is an assumption.
AWS’s failure-management guidance recommends automated reactions to monitoring data, regular recovery testing, post-incident analysis, and replacing failed resources rather than repairing them in the production path. Track detection time, mitigation time, and full recovery time separately so the slowest part is visible.
5. Make the error budget an operating rule
Review availability by journey and segment, identify which incident classes consumed the most budget, and attach engineering work to those losses. A policy might slow risky releases when budget burn is high, require a post-incident review after a large single burn, or prioritize capacity and dependency work before new features.
The result is a feedback loop: user outcomes set the SLO, the SLI reports reality, the error budget governs risk, and incident evidence determines the next reliability investment.
Common application availability measurement mistakes
- Monitoring only
/health: the endpoint returns success while dependencies or business flows fail. - Counting server uptime as application uptime: a running VM says nothing about the full user path.
- Averaging percentages incorrectly: combine good and total events; do not average regional percentages without traffic weighting.
- Hiding partial outages in a global number: segment by region, journey, and release.
- Ignoring slow success: a technically successful request can be unusable after its latency threshold.
- Treating missing telemetry as good: publish coverage and investigate gaps.
- Changing exclusions after an incident: freeze the SLI definition and version deliberate changes.
- Promising more nines than the architecture supports: every critical serial dependency constrains the end-to-end result.
- Buying redundancy without testing failover: dormant replicas do not guarantee recovery.
Frequently asked questions
What is application availability?
Application availability is the proportion of agreed time or valid user interactions in which an application performs its intended function successfully. A useful definition names the user, critical function, success criteria, and measurement window.
How do you calculate application availability?
For time-based measurement, divide available service time by total agreed service time and multiply by 100. For request-driven systems, divide successful valid requests by all valid requests and multiply by 100; journey-based measurement can use completed good journeys instead.
What is the difference between application availability and reliability?
Availability asks whether the application can perform an intended function when required. Reliability is broader and includes consistent, correct behavior over time, so an application can be reachable but still unreliable because it is slow, intermittent, or wrong.
Is 99.9% application availability good?
It depends on user needs, business impact, cost, and the measurement window. In a 30-day month, 99.9% allows about 43 minutes 12 seconds of downtime; a critical checkout or playback service may need a tighter objective, while an internal low-impact tool may not.
How can a team improve application availability?
Measure a critical user journey, find the failures consuming the most error budget, and address those causes. Common improvements include removing single points of failure, health-based routing, graceful degradation, capacity controls, safer releases, and tested automated recovery.
Measure the experience, then choose the architecture
An application is not available merely because its servers are running. Define the user outcome, measure good events against valid events, preserve the regional and journey-level detail behind the aggregate, and turn the SLO into an explicit error budget.
Then invest against observed failure: isolate the dependency, route around unhealthy delivery paths, reduce recovery time, or simplify the system. If origin or delivery failures are consuming the budget, map the critical request path and test whether edge caching, origin shield, and health-aware routing remove that exposure before committing to a larger availability target.
That is precisely the combination ZeroBuffer ships: anycast routing that withdraws an unhealthy or congested location's announcement so traffic reroutes to the next-nearest edge, origin shielding that collapses cache-miss fan-out, and instant purge when a bad object needs to disappear now — across 100+ edge locations at a flat $0.0049/GB. Removing delivery from your error budget is cheaper than raising the target. See the delivery stack.
