Errors & Observability
An error taxonomy that maps causes to responses, boundaries that stop internals leaking, and the logs, metrics and traces that let you answer questions you did not anticipate.
Eight kinds of failure, each with a different status, a different caller action and a different owner — instead of one 500 for everything.
A driver error becomes an application error becomes an API response — and each translation adds context while removing internals.
Stack traces, SQL fragments, internal hostnames and library versions in an error response are free reconnaissance for an attacker.
One identifier that follows a request through services, queues and workers — including the hop into a background job, which is where it is usually dropped.
Six questions every log line should help answer, and the one category of data that must never appear in one.
Log events as typed key-value records rather than sentences, because the consumer is a query engine, not a person reading a terminal.
Request rate, error rate, latency, in-flight requests, pool usage, queue depth, cache hit rate and dependency latency — eight numbers that make a service legible.
What a service must emit and propagate so one request's path across processes becomes a single readable timeline.
Three different questions with three different consequences — and a liveness check that fails on a dependency outage turns a bad hour into a much worse one.