The Unnecessary Heartbeat: On Questioning the Health Check
We are taught, from our first days tending to a service, that a health check endpoint is non-negotiable. It is the first commandment of ops: thou shalt expose /health. It is the steady, reassuring heartbeat we monitor, the single point of truth that tells our orchestration layer, our load balancers, and our own anxious glances that all is well. But I want to ask a heretical question: what if this ubiquitous pulse is a lie we’ve all agreed to tell?
The common wisdom is sound in theory. A simple endpoint returns a 200 OK if the application can respond. It’s a basic sign of life. The problem isn’t the theory; it’s the practice. In reality, what does a typical health check actually prove? That the web server is running. That a sliver of the application’s routing layer can accept a request. It proves the absolute bare minimum. A service can be haemorrhaging database connections, its cache can be entirely severed, it can be seconds from collapsing under a memory leak, and yet it will still proudly return a green, healthy status. It’s like checking if a car engine is on by listening for the radio.
We have built vast, intricate systems that react with robotic certainty to this shallow signal. A failed health check triggers a restart, a reschedule, a flurry of alerts. But a passing one grants a blanket pardon, a false confidence that allows deeper, more insidious failures to fester unseen until they erupt. We are conditioning ourselves to trust the most superficial of indicators.
This isn’t to say we should abandon the concept of checking on our systems. Quite the opposite. We must move beyond the simplistic heartbeat and towards something more akin to a full medical diagnostic. Instead of /health, we should be building /readiness. An endpoint that doesn’t just check for a pulse, but one that verifies the integrity of its connections to the database, the cache, the message queue, and any other vital organ. It should validate that it has a sufficient pool of available threads, that its internal state is coherent. This is a more expensive check, yes, and it shouldn’t be polled every second. But it is a far more honest representation of a service’s true capacity to work.
The received wisdom of the simple health check is a relic of a simpler time. It is a placebo we administer to our dashboards to make ourselves feel in control. True reliability requires a more nuanced conversation with our services, one that asks not just “are you alive?” but “are you truly ready to work?” Let’s stop listening for the heartbeat and start asking for a full bill of health.
Notes & further reading
A few pages I came back to while writing this: