When the app feels slow
A support message lands in your inbox: "Checkout feels slow on Tuesdays." That's it. There is no error code or screenshot. There is no stack trace. And application performance monitoring exists precisely for moments like this, when a complaint is real but you have no map from the symptom to the source. You own the product. You sit between the customer who's frustrated and the small engineering team who'll ask you what, exactly, is broken.
Here's what makes it maddening. You check the status page. Everything is green. The servers are up, the deploy went fine, and yet a paying customer just told you the most important flow in your app drags on a specific day of the week. The dashboard says nothing is wrong. The customer says something is. Both are telling the truth.
So this is a detective story, and it has a recurring twist that shows up in almost every slow app ever built. By the end, you'll be able to trace that Tuesday checkout complaint backward to its source yourself, before you ever loop in an engineer. The goal is to arrive at the next standup with a sharp hypothesis instead of "can someone look into this."
Why server up misses the problem
The first trap is assuming "up" and "fast" are the same thing. They aren't. An app is up when the server answers the request. An app is fast when it answers quickly enough that the person waiting doesn't feel the delay. Those are two different promises, and a status page only checks the first one.
Think about what happens during that Tuesday checkout. The request goes out to the server, where the app does its work, and four seconds later the confirmation appears. No error fired. Nothing crashed. From the server's point of view, the request succeeded. From the customer's point of view, the app broke, because four seconds of staring at a spinner during payment feels like the site is dying. Response time, which is just how long a request takes from click to answer, is the number the customer actually feels. The green checkmark never sees it.
This matters more than it sounds. According to a study cited by Contentsquare, 57% of shoppers abandon a page that takes more than three seconds to load, and a mere 0.1-second improvement in load time can lift ecommerce conversions by 8.4%. One study found a two-second delay pushes the cart abandonment rate to 87%. None of that pain registers as an error. It registers as silence, as people leaving.
Application performance monitoring that only tracks up-or-down status is like a doctor confirming a patient is alive while ignoring that they're in agony. Technically accurate. Useless to the person suffering. To find the Tuesday bottleneck, you need to see past "it responded" and into "how long it took, and for whom." That's where the real numbers live.
Reading the metrics that matter
Application performance monitoring surfaces a handful of numbers, and reading the right ones is what separates the founder who finds the bottleneck from the one who stares at pretty graphs. You don't need to know how any of these are calculated. You need to know what each one is telling you.
The single most important lesson comes first, before any definition: averages lie, and percentiles tell the truth about real user pain. Hold onto that. It's the reason your dashboard looked fine while a customer was quitting mid-purchase. Everything below points back to diagnosing that one Tuesday checkout complaint.
Response time and p95 p99
Response time is how long a single request takes. Simple enough. The problem is what happens when you average it across thousands of requests, because the average hides the exact people you're trying to find.
Picture ten checkout requests, nine of them fast and one painfully slow. Web-alert.io works a similar example: response times of 50, 55, 60, 60, 62, 65, 70, 72, 80, and 2000 milliseconds. The average comes out to 257 milliseconds, which looks acceptable. But that number "describes no actual request." It's higher than 90% of the requests and eight times lower than the slowest one. One customer waited two full seconds, and the average erased them completely.

Percentiles fix this by refusing to blend everyone together. Two you'll hear constantly:
-
p95: 1 in 20 users waited longer than this number. It's your early warning that some real users are hurting.
-
p99: 1 in 100 users waited longer than this. This is where abandoned carts and churn actually live.
As the engineering blog DigitalCosmonot puts it, if 99 requests complete in 50ms and one takes 5 seconds, the average still looks fine, "but for some users, the system feels broken." That's your Tuesday complaint in one sentence. The average response time on checkout looked healthy. The p99 was several seconds. The pain was real and invisible at the same time, because nobody was looking at the tail.
The exact phrase to bring to your next standup: "What's our p95 and p99 on the checkout endpoint?" If the answer is "we only track the average," you've already found your first red flag.