AlertKite
← AlertKite

The site is up but slow — why uptime monitoring misses your worst outages

Uptime monitoring answers one question: did it respond. It does not ask how long that took. A checkout that answers in nine seconds passes every availability check ever written, and loses most of the people who tried to use it.

This is the most expensive failure mode in the category, because nothing alerts on it and the graphs all look fine.

Two numbers, measured in two different places

Server-side  — what our checker measures
  response time from our network to your origin
  set a limit: alert if slower than 2000ms

Client-side  — what your visitor actually waited for
  TTFB   how long your server took to answer
  LCP    when the main content appeared  (good: under 2.5s)
  INP    how fast the page answered a tap (good: under 200ms)

A fast server and a slow LCP means the problem is in the page,
not the origin. That is a different fix, and you cannot tell
which without both numbers.

Setting it up

  1. Set a response-time limit on the monitors that matter — checkout, login, search.
  2. Pick the threshold from your own median, not a round number: roughly three times normal.
  3. Add the analytics snippet so you also see what real visitors on real connections experienced.
  4. Compare the two. Our number is the network to your origin; theirs includes everything after.

Why the median, not the average

One thirty-second timeout drags an average far enough to make a healthy week look broken, and hides a bad week behind one good day. Percentiles are what the Core Web Vitals thresholds use, and they are what you should set budgets against.

Slow is usually a warning, not an incident

Databases degrade before they fall over. A response time creeping from 200ms to 800ms over a fortnight is a disk filling up or an index that stopped being used — and it is a far cheaper thing to fix on a Tuesday afternoon than at 3am on Saturday.

Set the limit below the timeout

A timeout is when we give up waiting. A response-time limit is a promise about what counts as acceptable. If your timeout is ten seconds and you have no limit set, anything faster than ten seconds is reported as perfectly healthy.