Build1 distinct publisher3 min readPublished
The author of an Indian outage tracker lists five ways the standard fetch-and-check-200 probe misleads, then rebuilds the verdict as four states with crowd reports weighted above the server check. The cold start on that crowd signal is the catch.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Read the snippet as control flow rather than as a check. `AbortSignal.timeout(10000)` does not produce a status code; at ten seconds it rejects the promise, so `res.status === 200` never evaluates [1]. A slow origin, a dropped route and a firewall that hung up all arrive in the same catch block, and a response landing at 10.1 seconds is indistinguishable from a connection that was refused [2]. The four-state reframe the author proposes, reachable, refused, broken or unknown [7], is therefore a data model change before it is a better assertion. One boolean has room for one of those four outcomes; the other three all render as down [1]. That is the mechanism behind the claim that collapsing four states into two is where most false positives come from [7].
The distinction that pays for itself immediately is 403 against 500. The first says the server is alive and refusing your specific request; the second says something broke [6]. Treat them the same and every portal with a WAF in front of it becomes permanent downtime in your history, which the author says teaches users to ignore the tool inside a week [5].
Asserting on the response body is the next step up, because a React shell rendering "Something went wrong" returns 200, and so, frequently, does a maintenance page [9]. A maintenance page is the rare case of a service telling you the truth in the body and lying in the header. It helps, and it still caps what an external check can claim: you are asserting on a page, not on a payment [3].
The crowd-first conclusion is the part to test before borrowing. The author states it strongly, that for consumer-facing services reports beat synthetic checks rather than supplementing them [12], and weights the tracker accordingly: reports first, server check second, with unreachable-and-unreported rendering as "we could not reach it" [13]. For that to transfer you need arrivals. The floor the author sets is geographic spread rather than raw count, because one report is a person with bad Wi-Fi, and reporting has to be one tap with no login to get the volume at all [16]. A service with a few dozen accounts in one city cannot clear a spread floor [3], which puts you back on page assertions and copy that is honest about what they prove. Fabricating activity is the one shortcut the author calls genuinely fatal [16]. The cold start is brutal, and a crowd tracker with no crowd is a server pinger with extra steps [15].
The last constraint is where the monitor lives. On 18 November 2025 a Cloudflare outage took down X and ChatGPT, and Downdetector went down with them because Downdetector runs on Cloudflare, as does the author's own tracker [17]. Monitoring should not share a failure domain with the things it monitors [18], and that is a hosting decision taken long before anyone writes the check.
Ranked by verification strength, evidence, and original report placement.
The author's reframe is that a check produces reachable, refused, broken or unknown rather than up or down, and that collapsing those four states into two is where most false positives come from.
The common health-check pattern is a GET via fetch with AbortSignal.timeout(10000), then isUp = res.status === 200.
The author says that pattern is wrong in at least five ways, and that every one of them bit them while building an outage tracker for Indian services.
A 200 says a server returned a response, not that the thing a user came to do works: a bank homepage can render in 400ms while UPI payments from that same bank are failing at the switch, because they are different systems and teams. Even asserting on a response body means asserting on a page, not a payment.
Plenty of sites deliberately block automated requests through bot protection, WAF rules, rate limits and geo rules; the author says this is common on high-value Indian government and travel portals, with IRCTC the obvious example.
A 403 means the server is alive and refusing your specific request, which is different information from a 500.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 29, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
Lovable's next product is your app's tool surface, served by a hosted MCP server1 distinct publisher
build
Cloudflare's one-click AI block names GPTBot, not the bot that decides if ChatGPT cites you1 distinct publisher
science
3.2 million replies, 88 candidates, and the gender gap that prevalence metrics erase1 distinct publisher
science
Text watermarks land on 2 December. The detection they imply does not.1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Verifiable mechanics, unverified results
The failure modes stand on their own: a CDN edge serving a stale 200, a 200 wrapping "Something went wrong", a 403 that means alive-and-refusing. Any reader can reproduce those without trusting the author. What cannot be reproduced is everything the piece claims happened as a result — the noise that disappeared, the users who would have left inside a week, the superiority of crowd reports over probes. Those are one practitioner's memory of one tracker, offered without a single number.
One tracker, no numbers
Everything we can see is a single self-run instance. SiteDownStatus is described as live with the four-state model and reports-first weighting in place, but no user count, report volume, monitored-service count or uptake by anyone else appears. There is no basis for saying whether this approach has spread beyond the person who wrote it up.
One leap in an otherwise sober piece
Most of this post undersells rather than oversells: it admits you cannot solve feature health from outside, admits multi-region probing costs money, admits the tracker shares an edge provider with the things it watches. The overreach is confined to one sentence — crowd reports are better than synthetic checks, 'not a supplement' — which generalises from a single tracker with no measured comparison. The headline mechanics are sound; the ranking of signals is a conviction wearing the clothes of a finding.
The recommendation is the author's product
This is a self-published post whose argument — weight human reports above server checks, publish your methodology, return four states — describes the design of the tracker named in its final paragraph. That alignment is disclosed rather than hidden, and the author volunteers the least flattering fact available, that his own monitoring sits on the provider whose outage blinded Downdetector. Still, no editor stood between the claim and the product, and the piece invites readers to go look at the output.
Firm on the diagnosis, soft on the cure
We are confident about what breaks, because those parts are testable and consistent with how CDNs, WAFs and status codes behave. We are much less confident about the prescription: one publisher, one author, one tracker, no measurements, and no independent account of whether crowd-first weighting actually beats probing in practice. The dated Cloudflare outage is the only claim here with an obvious external record, and it still reaches us through this single write-up.