Pricing Blog Compare Glossary
Login Start Free

Status Page Best Practices: What to Include and How to Communicate

How to build and maintain an effective status page. Covers component structure, incident communication, update cadence, transparency, and common mistakes.

2026-03-25 · 10 min · Guide

Most status pages are useless. "All Systems Operational" in big green text while Twitter fills with complaints: "Your API has been down for 20 minutes." Or the opposite: a yellow "Degraded Performance" indicator with no explanation of what degraded, who it affects, or when it will be fixed.

A status page isn't decoration or a compliance checkbox. It's your communication tool in the most stressful moment: when something breaks. Below are concrete principles that make great status pages a trust channel, not a formality.

Component Structure: What to Show

The first mistake is showing one overall status: "Operational" or "Down." Users don't need an averaged indicator. They need to know: "I can't upload a file — is it me or you?" The answer comes from component structure.

Principle: Components Reflect User Scenarios

Don't break by internal architecture ("Redis Cluster," "Worker Pool B," "PostgreSQL Primary"). Break by what users see:

For SaaS: Dashboard, API, Authentication, File Upload, Search, Notifications, Billing

For e-commerce: Website, Catalog, Cart & Checkout, Payments, Order Tracking, Support Chat

For messaging services: Messaging, Voice Calls, File Sharing, Integrations, Mobile Push

For infrastructure services: API, Dashboard, Webhooks + separate rows for regions (US, EU, APAC)

Optimal range: 5-15 components. Fewer than 5 is too coarse (you can't tell what broke). More than 15 is information overload (users won't hunt through 40 components).

Status States: No More Than Four

Operational — everything works normally.

Degraded Performance — service works but slower or with limited functionality.

Partial Outage — some users or features affected. Example: API works, but file uploads don't.

Major Outage — service unavailable for most users.

Don't add intermediate states like "Under Maintenance," "Investigating," "Monitoring." These are incident states, not component states. A component either works, is degraded, or is down.

Incident Communication: Writing Updates

Incident update text is the most important part of your status page. Components and indicators are structure. Updates are content. Users decide based on updates: "Should I call support?" and "Should I look for an alternative?"

Formula for a Good Update

Each update should answer three questions: What is happening? Who does it affect? What are you doing?

Bad: "We are investigating an issue with our services."

Good: "We are seeing increased error rates on the Payments API affecting approximately 15% of transactions in the EU region. Credit card payments may fail or take longer than usual. Our engineering team has identified the root cause (database connection pool exhaustion) and is deploying a fix. ETA: 20 minutes."

The difference: the good version tells you what's affected (Payments API, EU, ~15% of transactions), user impact (payments may fail), cause (connection pool), plan (deploy fix), and timeline (20 minutes). Users can decide: wait 20 minutes or switch to a fallback.

Incident Stages

Standard sequence users expect to see:

Investigating. "We are aware of the issue and investigating." First update, as fast as possible. Even if you know nothing yet, "we know and are working on it" reduces panic.

Identified. "We have identified the root cause: [description]. A fix is being prepared." Users understand progress is happening.

Monitoring. "A fix has been deployed. We are monitoring for stability." Fix is applied, but you're still watching. Don't close the incident immediately after deploy — give 15-30 minutes for confirmation.

Resolved. "The issue has been fully resolved. All services are operating normally." Include a brief summary: what happened, how long it lasted, how many users were affected.

Update Cadence

Rule: no more than 20 minutes between updates during active incident. If you have nothing new, say that: "Continuing to investigate. No new information at this time. Next update in 15 minutes." Silence on the status page during an active incident is the worst signal. Users start thinking: "Do they even know?"

Automation vs Manual Management

The ideal status page is a hybrid. Monitoring automatically updates component status based on checks: if an HTTP check confirms downtime from multiple regions, the component moves to "Outage" without manual intervention. But text updates come from humans.

Why automation can't write incident updates: "API returns 503" is a technical fact, but "Approximately 30% of users in the EU region may experience errors when loading their dashboard" is communication with context and scale. The first is for internal monitoring. The second is for the status page.

Automate: incident detection, component status changes, notifications to subscribers of new incidents, closing incidents after recovery.

Do manually: incident update text, impact assessment, ETA, post-mortems.

Separate Infrastructure: Don't Host Status Page With Your Product

A status page that goes down with your main product is worse than no status page. During crisis, users try to check status, get the same error, and panic twice.

Solution: separate domain (status.yourcompany.com), separate hosting, minimal dependencies. AtomPing status pages run on dedicated edge infrastructure, completely independent from your main service. Custom domain with automatic SSL via On-Demand TLS — your status page stays up even if your main hosting completely fails.

Metrics: Uptime and Response Time

Best status pages show not just current status but historical performance. This adds context: "Component is down" is bad, but "Component has 99.98% uptime over 90 days, this is the first incident this month" is a different trust level.

What to show:

30/90-day uptime. Availability percentage over rolling periods. 99.95% over 90 days means less than 65 minutes total downtime.

Response time graph. Average response time over last 24 hours / 7 days. Shows trends: degradation is visible before it becomes an incident.

Incident timeline. Chronology of incidents over 90 days. Heat map (like GitHub) or simple list with dates and duration.

Post-Incident: Post-Mortem

After major incidents (Major Outage lasting over 30 minutes), publish a post-mortem on your status page or blog with a link from the status page. This isn't weakness — it's the strongest trust signal.

Post-mortem structure for public consumption:

Summary. What happened, in one sentence.

Impact. Who was affected, how long, which features were unavailable.

Timeline. Chronology: detection → diagnosis → fix → recovery.

Root cause. Technical cause in plain language. "Database migration locked a critical table for 12 minutes during peak traffic" is clear. "Lock contention in pg_class triggered cascading OOM" is engineer-only.

What we're doing about it. Specific steps to prevent recurrence. "We're adding automated migration impact analysis to our CI pipeline" is convincing. "We'll be more careful" is not.

Common Mistakes

"All Operational" during real problems. Nothing destroys trust faster than a green status page while social media floods with complaints. If monitoring detects a problem, status should change automatically without waiting for manual confirmation.

Updating once an hour. During active incident, an hour is forever. Users think you forgot or aren't working on it. 15-20 minutes is the maximum interval.

Technical jargon. "OOM killed PID 4521 on worker-3b, restarting pod" belongs in your incident Slack channel, not on the status page. Public updates should use user language.

One overall status instead of components. "Service Disruption" — which service? API? Dashboard? Payments? Users want to know if it affects their workflow.

Closing incidents too early. You deploy a fix → close incident → problem returns in 10 minutes → new incident → closed → returned. A flapping status page is worse than a stable yellow status. Monitor for 15-30 minutes before marking resolved.

FAQ

What is a status page?

A status page is a public-facing web page that shows the current operational state of your services. It lists individual components (API, Dashboard, Database), their status (operational, degraded, outage), active incidents with real-time updates, and a history of past incidents. It's the single source of truth for 'is the service working right now?'

Does every company need a status page?

If your product has users who depend on it being available — yes. You don't need a fancy one on day one. A simple page with 'operational' / 'investigating issue' / 'resolved' is infinitely better than nothing. The threshold is low: if you'd have to answer 'is it down?' more than once a month, you need a status page.

Should incidents be created automatically or manually?

Both. Automated creation from monitoring alerts catches outages instantly — no human delay. But the incident description and updates should be written by humans. A good workflow: monitoring auto-creates the incident with 'Investigating increased error rates', then an engineer posts human-written updates with context and timeline.

How transparent should I be about outages?

More transparent than you think. Users understand that systems fail. What they don't forgive is silence or dishonesty. Acknowledge the problem quickly, be honest about impact, update regularly, and publish a post-mortem after major incidents. Companies that do this consistently build stronger trust than those who pretend everything is always fine.

What's a good incident update cadence?

During active investigation: every 15-20 minutes. Once a fix is deployed and you're monitoring: every 30 minutes. If you have nothing new to say, say that: 'Still investigating, no new information. Next update in 15 minutes.' Silence is worse than a boring update.

Should I show uptime percentage on my status page?

For B2B SaaS with SLA commitments — yes, it demonstrates transparency and accountability. For consumer products — optional, since non-technical users may misinterpret 99.9% as unreliable. If you show it, use rolling 30 or 90 day windows so a single bad day doesn't dominate the metric for months.

Start monitoring your infrastructure

Start Free View Pricing