New Relic Performance Engineer study materials
New Relic Performance Engineer study resources

Checkout Latency Regression With No Error Signal

New Relic Performance Engineer · Put your knowledge to work in context.

All case studies

Checkout Latency Regression With No Error Signal

Your team owns a Java Spring Boot checkout orchestrator running on six EC2 instances at roughly 2,400 requests per minute. After a Tuesday release, Apdex (T = 0.5 s) fell from 0.96 to 0.74, the error rate moved only from 0.4% to 0.5%, and throughput stayed flat. The release added retry logic to the payment authorization call. A distributed trace of a slow checkout shows the external segment for the authorize call taking 1,410 ms where it previously took about 380 ms, and the same trace contains three sequential authorize calls from a single user click. Transaction tracing was set to 100% sampling on all six hosts during the release review, and nobody has turned it back down. The payment vendor's status page shows no incidents. Finance wants a decision today: open a vendor ticket or roll back the release.

1. Apdex fell but the error rate is essentially unchanged. Which signal should drive priority in the first 30 minutes, and what would you query to localize the slowdown?

Read the worked answer

A flat error rate means requests still succeed; the regression is user-perceived latency, so Apdex and p95 should drive severity, not the error rate. Apdex dropped 0.22 because a large share of checkouts moved out of the satisfied bucket (under 0.5 s) into tolerating or frustrated.

Localize before escalating:

  1. Confirm the breakpoint in time: SELECT apdex(duration, 0.5), percentile(duration, 95) FROM Transaction WHERE appName = 'checkout-orchestrator' TIMESERIES 5 minutes SINCE 6 hours ago, then repeat with COMPARE WITH 1 week ago to rule out a normal daily peak.
  2. Facet by transaction name to see whether every endpoint degraded or only the code path touched by the release: add FACET name.
  3. Facet by host to rule out a single bad instance before you blame the release.
  4. Open a representative slow trace and sort spans by duration. If one child segment owns most of the added time, everything downstream of it is a victim, not a cause.

The message to Finance: throughput and success are intact, but customer experience degraded; quantify how many checkouts now exceed one second, and state clearly that rollback is a mitigation, not a diagnosis, and that vendor fault is not yet proven.

2. The trace shows 1,410 ms in the authorize segment and three retry spans. How do you decide between vendor latency, your new retry design, and a network or DNS problem, and what do you recommend?

Read the worked answer

The trace only proves the client waited 1,410 ms. Separate the three hypotheses with data.

Vendor-side: query authorize spans over time and facet by peer host or address. If duration rose for every caller and every instance at the same moment, and calls per checkout are still one, the vendor owns it. Cross-check with a probe outside the application, because a vendor status page is a marketing document, not telemetry.

Retry design: three sequential authorize calls per click means your new code triples both wait time and load. Query span counts per transaction before and after the release. If call volume tripled while per-call duration is roughly unchanged, the regression is yours. Retrying a payment authorization is also a correctness risk unless the operation is idempotent with a stable idempotency key.

Network or DNS: check whether delay is spread across all six hosts or concentrated in one host or availability zone. A single-host pattern, or time spent before the request is sent, points at DNS, connection pool exhaustion, or an egress path issue rather than the vendor.

Recommendation: roll back the retry change first. It is provably new, it amplifies load on a possibly struggling dependency, and you can confirm the effect within minutes while keeping traces available. Then continue the vendor investigation without the retry noise.

3. Should you reduce transaction trace sampling from 100%? Explain what it does and does not change for this investigation.

Read the worked answer

Sampling is not what makes Apdex or the error rate accurate. Those come from aggregated transaction metric data collected for every request; trace sampling only decides which complete traces are retained. Lowering it will not change your Apdex chart, your SLO, or your error rate.

What it does change is the tail and the bill. At 2,400 rpm, 100% retention means millions of traces and spans per day, which drives ingest cost and agent overhead. At a reduced rate you still see representative traces, but a rare slow outlier - exactly the checkout you care about - may never be captured, and end-to-end traces become harder to follow because each service makes its own head-based sampling decision.

Judgement: keep elevated sampling only for the duration of an active investigation, and not necessarily on all six hosts. If agent CPU, GC, or memory overhead is measurable, lower the fleet-wide rate and keep 100% on one canary host, or use a targeted rule limited to the checkout transaction. Before paying for more, confirm the data answers the question: you needed one good trace of the retry path, not millions. Put a dated reminder in place to restore the normal sampling setting once the rollback decision is made, because 100% sampling left on after a release review is how ingest budgets quietly break.