Errors

Backend errors that break your product without crashing it

Total outages announce themselves. The expensive backend failures are quieter: the process stays up, most things work, and something important has stopped. Here is how those happen — and how they get caught.

A server running normally while one route fails

The most damaging backend errors are partial failures: the application keeps running while one route returns 500s, one dependency times out, one background job stops, or one response goes subtly wrong. Nothing crashes, so nothing restarts and no "is it up?" check complains. Detecting this class requires watching behaviour per endpoint from the outside — status codes, latency against baseline, error-rate deviation — because the process-level signals that ops tooling traditionally watches all remain green while it happens.

Key takeaways
  • A backend can be up and broken at the same time — process health and behavioural health are different measurements.
  • Partial failure is the dominant real-world mode: one route, one dependency, one job — not the whole service.
  • The observable symptoms from outside are exactly four: error status codes, timeouts, latency shifts, wrong content.
  • Per-endpoint monitoring beats aggregate monitoring: a dead checkout route hides inside a healthy overall error rate.
  • Timeouts deserve special respect — they are usually the first external symptom of resource exhaustion building underneath.

Why backends fail quietly

The mental model of backend failure — the server "goes down" — describes the rarest case. Modern backends are supervised: crashed processes restart, failed health checks pull instances from the pool, orchestrators replace what dies. Total failure is handled by the platform.

What the platform does not handle is working incorrectly. A route handler that throws on a specific input returns a 500 — the process is fine. A connection pool sized for last year's traffic queues requests under load — everything completes, slowly, until the queue itself times out. A third-party API degrades and every request through it inherits the degradation. A queue consumer dies while the queue keeps accepting — producers succeed, work silently stops.

In every case the process answers its liveness probe, CPU looks normal, and the aggregate error rate barely moves. The failure is real, user-visible, and invisible to process-level monitoring — by construction.

The five quiet failure modes

  1. The failing route. One endpoint 500s on some or all inputs — a null-handling bug, a migration that dropped a column one query still references. Everything else works, so aggregate dashboards stay calm while everyone needing that route is dead in the water.
  2. The slow strangle. Latency climbs gradually — a leak, a growing table without an index, a filling pool. No moment is dramatic; the trend is the event. By the time requests time out, users have endured degradation for hours.
  3. The degraded dependency. Your payment, email or storage provider slows or errors, and your endpoints inherit it. Your code is blameless and your product is still broken — the monitoring question is whether you find that out from your own dashboards or your users.
  4. The dead consumer. Background work — emails, exports, webhooks, reports — stops being consumed while submissions keep succeeding. Discovery is typically a user asking why nothing has arrived since Tuesday.
  5. The wrong answer. The nastiest: a 200 with bad content. Stale cache served as fresh, an empty result where data exists, a serialization bug nulling a field. No error signal anywhere — only content assertions or downstream frontend errors catch it.

Detecting partial failure from the outside

You cannot see inside every handler, but every quiet failure mode above leaks exactly one of four external symptoms. Watch all four, per endpoint:

Two supporting correlations sharpen all four: deploy events (the failing route usually started failing at a deploy) and vendor status feeds (the degraded dependency is often publicly admitting it). A monitoring system holding both timelines can say "500s on /api/orders began 4 minutes after deploy a1b2c3" or "checkout degradation coincides with the payment provider's incident" — which converts detection into half a diagnosis.

Practices that make the quiet failures loud

Quick reference

The dominant failure modePartial: one route, one dependency, one consumer — while the process stays healthy
Why platforms miss itSupervisors handle crashed processes, not incorrect behaviour; liveness probes stay green
The four external symptomsError status codes, timeouts, latency deviation from baseline, wrong response content
Per-endpoint ruleMonitor money/journey endpoints individually — aggregates hide the dead route
Timeout meaningUsually the first external sign of resource exhaustion (pools, queues) building underneath
Sharpening correlationsDeploy events on the same timeline; vendor status feeds for inherited degradation

Frequently asked questions

What is a partial backend failure?

A partial failure is when an application keeps running but some subset of its behaviour is broken: one route returning errors, one dependency timing out, one background consumer stopped, or responses that are wrong despite success status codes. The process passes health checks throughout, which is why partial failures evade process-level monitoring.

Why do backend errors go unnoticed?

Because most backend monitoring watches the process — is it up, is CPU normal — while partial failures leave the process healthy. The failure is only visible behaviourally: a specific endpoint's status codes, its latency against its own history, its timeout rate. Teams monitoring only aggregates or only liveness discover these failures from users.

How can I detect backend problems without installing agents?

Outside-in behavioural monitoring covers the major quiet failure modes: per-endpoint checks catching error status codes and asserting expected content, latency tracked against a measured baseline to expose gradual degradation, timeout rates tracked separately, and deploy plus vendor-status timelines for correlation. Agent-based telemetry adds depth later, but the outside-in layer is what tells you something is wrong at all.

Why do timeouts deserve separate tracking from errors?

Because they carry different information. An error status is the server answering "no"; a timeout is the server failing to answer at all, which typically means requests are stalling inside it — the classic signature of connection-pool or queue exhaustion. A rising timeout rate often precedes a full outage by enough time to act, but only if it is visible as its own signal.

How do I catch a backend returning wrong data with a 200?

Content assertions: for critical endpoints, the monitoring check verifies the response contains what a correct answer must contain, not just an acceptable status code. Frontend error monitoring provides a second net — wrong shapes returned to the browser often throw client-side errors that browser telemetry reports even though the server logged success.

What monitoring catches a dead background worker?

Expose the queue's state where a check can see it — a small status endpoint reporting queue depth and the age of the last completed job — and monitor it like any other endpoint. Producers succeeding while consumers are dead is otherwise one of the longest-lived silent failures, because nothing in the request path ever errors.

How Merik handles it

Merik watches backends the way this article recommends: from the outside, per endpoint, against history. Register the endpoints that matter as monitored assets and each gets its own checks — status validation, optional content assertions, latency recorded into a 14-day baseline. A 500 is confirmed before it becomes an incident; a timeout is a tracked failure stage of its own; a latency climb against baseline raises an early warning while everything still technically works.

The correlations ship too: GitHub and Vercel webhooks put deploys on the incident timeline, and live vendor status feeds mean an endpoint failing because a payment or hosting provider is down says so — recorded, attributed, and not paged as if it were your bug. Merik does not install agents inside your processes; it makes the outside view sharp enough that the quiet failures stop being quiet.

Create your workspace →

Or talk to us about your team →