404 Not Found Is Not an Error
Listening to KiiiKiii’s “404 (New Era).” The 404 a developer reads as code and the 404 an artist read through intuition are reading exactly the same point: a 404 means the system kept its own rules.
There’s a song I’ve been listening to a lot lately.
KiiiKiii’s new single, “404 (New Era).”
When most people first see KiiiKiii’s “404 (New Era),”
“what does that even mean?”
But to a developer who codes all day, the number couldn’t be more familiar. Especially for anyone working on the web, it’s a code you run into several times a day.
That iron wall standing firmly barricaded across GitHub.
“HTTP 404.”
The song really did take “404 Not Found” as its motif, and the label describes it as “freedom that exists without coordinates.”
The 404 a developer reads as code,
and the 404 an artist read through intuition, are reading exactly the same point.
But there’s one more interesting thing here.
In fact, a 404 error is not a failure
People usually take 404 to be a “broken error.”
It isn’t.
A 404 appearing actually means that a great deal is working.
The server is alive.
The request arrived.
The routing ran.
Having passed through all of that, the system answered:
“That resource does not exist.”
“That path is not open.”
This is not a malfunction but an error with intent mixed into it.
It is the result of a system operating precisely, keeping its own rules.
2xx says “oh — it worked.” The request was processed normally.
A 200 OK is the mark of success.
Very happy news that you can move on to the next step.
3xx says “not there — over that way.”
The address has changed, so it’s a signpost guiding you down another road.
This is called a redirect.
4xx says “a problem, and the reason has been found.”
The input format is wrong, required authentication is missing, the necessary permission isn’t there, or a variable or network resource that should exist doesn’t.
And it kindly spits out the error as it says so.
A kind and precise error.
5xx says “reason not found… anyway, we’re wrecked.”
500, 502, 503, 504.
The moment a 5xx appears, the developer’s blood pressure climbs.
From here begins the brutal night: reading logs, peeling open traces (print statements, one by one), digging through deploy history and commit logs, opening up the database, suspecting even the external APIs.
Go one layer deeper, and it becomes clear why 404 is “intentional.” When an unauthorized user reaches for a private resource, a well-designed system sometimes returns not 403 (Forbidden) but 404 (Not Found). GitHub does exactly this.
When someone without permission visits another person’s private repository, the answer is not “you cannot access this” but “no such thing exists.”
The reason is clear. From a security standpoint, the moment you say “access forbidden,” the fact of its existence leaks out.
So you erase the existence altogether. Here, 404 is not an accident but a defense — a design.
404 is an iron wall developers built on purpose.
So the real contrast is not between 4xx and 5xx,
but between a designed refusal and the failure of the design itself.
A 404 is the result of a system keeping its own rules exactly.
Saying “not here” is, in fact, part of the design.
But a 500 is the result of a system failing to keep its own rules.
That is, the design has failed.
A 404 refusal is part of the design,
but a 500 is the design’s failure.
That is why, when developers stay up all night,
it is never before a 404 — it is always before the 500s.
At this point, KiiiKiii’s “404” becomes strangely fascinating.
404 originally means “cannot be found.”
Yet this song’s view count has reached one hundred million.
A song bearing the name “cannot be found” — and nearly a hundred million people found it anyway.
Freedom that exists without coordinates. Having no address doesn’t mean being nowhere; it also means being tied to nowhere.
404 is not an error. It is the system’s intent, its boundary, its thoroughly deliberate design.
What truly keeps a developer up all night
is always the 500s — collapsing without a reason you can name.