Your Hiring Process Needs HTTP Status Codes

Because “we’ll be in touch” is not an observable state.

I submitted a job application recently.

It was one of those applications where you actually put in the effort. I read the job description carefully, tailored the resume, wrote a cover letter specifically for the organization, and answered the optional questions rather than pretending they were optional.

Then I clicked Submit and got… nothing.

No confirmation email. No “we received your application.” No indication that a candidate record had been created. Just a browser page telling me the submission had succeeded and the vague hope that somewhere, deep inside an applicant tracking system, my carefully assembled application had not been written directly to /dev/null.

As a developer, I find this troubling. Not because I expect an interview, or because I think every recruiter owes me personalized feedback. I just want a status code.

And I think that’s a smaller ask than it sounds like, for a reason I’ll come back to at the end: the states already exist. Somewhere in that ATS, my application is in one. The decision not to show me which one is a product decision, not a privacy constraint.

The Web Solved This Problem Decades Ago

When software sends a request to another system, we generally consider it useful for the receiving system to say what happened. Did it work? Is it still processing? Was the request malformed? Is the resource gone? Did something catch fire on the server?

HTTP gives us an entire vocabulary for this.

Hiring systems, meanwhile, have developed their own protocol:

POST /careers/applications

[no observable response]

This is sometimes followed, anywhere from three minutes to six months later, by:

After careful consideration...

Instead of inventing vague candidate statuses like “Under Consideration,” perhaps hiring systems could adopt something developers already understand.

The 2xx Family: Success, Allegedly

200 OK

A human being has reviewed your application.

Nothing else is implied.

Honestly, this alone would be revolutionary.

202 Accepted

Your application has been received and accepted for processing.

This is the most important status code in the entire hiring protocol. The candidate does not need the hiring manager’s notes or a walkthrough of the internal workflow. They need:

202 APPLICATION_ACCEPTED

Now we know the thing exists.

204 No Content

Your application was successfully received.

We have chosen not to acknowledge this in any way.

The 3xx Family: You Have Been Redirected

302 Found

We found an internal candidate.

Thanks for playing.

304 Not Modified

Your application has been “Under Review” for 47 days.

There has been no change since the last time you checked, or the 23 times before that. There will be no change the next time either. Please consider caching this response locally.

410 Gone

The position existed when you applied. It no longer exists. No additional information is available.

At least 410 would be useful. The current discovery mechanism is noticing that your bookmarked job posting has started redirecting to the careers homepage.

The 4xx Family: This One’s On You

401 Unauthorized

You must create an account before applying.

Your password must contain at least 14 characters, uppercase and lowercase letters, a number, a symbol, and one ancient Sumerian glyph. It cannot match any password you have used since 1997.

You will then manually enter every field from the resume you just uploaded.

You will never use this account again.

403 Forbidden

You have the required experience and qualifications.

Unfortunately, you live 37 miles outside the geographic boundary within which we have determined this Zoom meeting can occur.

404 Not Found

Hiring manager not found. Recruiter not found. Job posting not found.

Nobody knows who owns this requisition.

408 Request Timeout

After seven weeks without communication, the candidate has accepted another position.

The hiring team will contact them tomorrow to schedule the second interview.

409 Conflict

The position requires 12 years of production experience with a technology introduced six years ago.

The conflict cannot be resolved.

417 Expectation Failed

You expected the phrase “we’ll be in touch” to imply future communication.

It did not.

422 Unprocessable Content

Your experience is relevant, but your career path does not fit cleanly into the predefined boxes in our applicant tracking system.

Human intervention may be required.

Human intervention is unavailable.

425 Too Early

You applied 14 minutes after the job was posted.

LinkedIn reports 612 applicants.

We have questions too.

451 Unavailable For Legal Reasons

Your qualifications are not the issue.

The issue is a background check vendor, a non-compete of uncertain enforceability, or a sponsorship question nobody wants to be the one to ask about.

The 5xx Family: It Was Never You

500 Internal Server Error

Something has gone wrong internally. Your recruiter left, the headcount was frozen, the hiring manager changed, Finance reconsidered the budget, the organization restructured, or the position was posted by accident.

We will communicate all of these possibilities using the same message:

We have decided to move forward with other candidates.

502 Bad Gateway

The recruiter says they are waiting for the hiring manager.

The hiring manager says recruiting owns the next step.

Your request cannot be routed.

503 Service Unavailable

Your recruiter is no longer with the company.

Their calendar link remains active.

504 Gateway Timeout

“We expect to have a decision by Friday.”

Friday has passed. The specification does not define which Friday was intended.

Candidates Don’t Need Distributed Tracing

There’s a serious point hiding under all of this. Hiring has an observability problem, and it’s usually mistaken for a communication problem.

Companies understandably cannot expose everything happening inside a recruiting process. Candidate evaluations are private. Interview feedback may be sensitive. Hiring managers need room to compare people and make decisions.

That’s fine. Nobody is asking for:

GET /hiring-manager/private-thoughts/about-me

But there is an enormous amount of territory between exposing confidential deliberations and providing no information at all.

A hiring pipeline already has states. An application was received. It entered review. Someone reviewed it. An interview was requested. The requisition was paused. The position was filled. The position was canceled. The candidate was declined.

Those state transitions already exist in the system. They are already recorded, timestamped, and reportable, because that’s how recruiting teams measure their own funnel. The candidate is the one participant in the process who cannot see the record they’re in.

Give Us the Boring Version

Imagine an applicant portal that reported nothing more than this:

202  APPLICATION_RECEIVED     Mar 04
200  REVIEWED                 Mar 19
304  NO_CHANGE                Apr 02
304  NO_CHANGE                Apr 30
410  POSITION_CLOSED          May 12

That’s not radical transparency. It’s barely transparency at all. But it tells you the system is functioning.

It removes the need to wonder whether an application disappeared. It reduces pointless portal refreshing. And it prevents candidates from reading silence as information, when silence might mean anything from “the hiring manager is on vacation” to “the requisition was canceled two weeks ago.”

Mostly, it treats applicants like participants in a process rather than packets transmitted into an undocumented endpoint.

200 OK

I don’t expect every application to result in an interview. I’ve submitted enough of them to have considerable empirical evidence supporting that position.

I don’t expect detailed rejection feedback either. I understand why companies are reluctant to provide it. I don’t even particularly mind 403 REQUIREMENTS_NOT_MET or 410 POSITION_FILLED. Those are answers.

What makes modern hiring uniquely frustrating isn’t rejection. It’s uncertainty about whether anything is happening at all.

Software engineers have spent decades building systems around a simple principle: when one system asks another to do something, the response should carry enough information to understand what happened.

Candidates aren’t asking for distributed tracing of your recruiting infrastructure.

We’d settle for a status code.

Facebooktwitterredditlinkedinmail

The Sourdough Manifesto

A completely serious architectural argument for why your AI logging pipeline should smell like bread.


In 2020, while the rest of the tech industry was migrating its entire nervous system to centralized cloud providers, half the engineers I knew were trapped at home learning to keep a jar of wild yeast alive.

Four years later, my daughter inherited that obsession. Our kitchen counter is now a tactical command center of ambient thermometers, hydration calculations, and feeding schedules tracked with the rigor of a deployment pipeline.

It occurred to me, watching the starter bubble, that this organism is the most architecturally correct system in my entire house. And I have a home server rack.

Editor’s Note: This piece was reviewed for accuracy by a sourdough starter named SIGTERM. SIGTERM declined to comment, as it was in the middle of a bulk fermentation cycle and could not be interrupted without corrupting the crumb structure. All Chef esolang code in this document compiles. The bread it describes would also technically compile, though our legal team advises against consuming anything produced by a runtime primarily used for satirical telemetry. The author has accepted no sponsorship from Big Flour. Regrettably.


The Prose Tax Is Killing Your RAM

Let’s establish the problem with precision, because the industry has spent fifteen years pretending it doesn’t exist. Every time a cloud-deployed AI system completes a task, it produces a log. That log is a dense, nested JSON monument to corporate liability — timestamps, correlation IDs, nested error arrays, and no fewer than four redundant fields expressing the same Boolean status in slightly different dialects.

Nobody reads these logs until something breaks. And when something breaks, an engineer spends forty minutes parsing a 40MB telemetry file to find a single line that says status: "error".

We in the Sovereign AI community call this the Prose Tax. And we are done paying it.

When you run AI on-premises — on your own hardware, under your own roof, with your own electric bill — every wasted CPU cycle is money, heat, and latency. You cannot afford to let your logging infrastructure cosplay as a Fortune 500 compliance department. You need something leaner. Something older. Something that has been doing zero-dependency distributed processing since before servers existed.

You need bread.

What the Prose Tax Looks Like: A standard enterprise AI telemetry event: 847 bytes of JSON. A Chef diagnostic recipe confirming the same system state: 312 bytes, human-readable, and doubles as a weekend project.

“The cloud sold us the promise of infinite scale. Nobody mentioned we’d spend half that scale parsing our own logs.”


Introducing Chef: The Language Your Infrastructure Deserves

Chef is a real, Turing-complete esoteric programming language in which source code is syntactically indistinguishable from a cooking recipe. Variables are ingredients. Memory stacks are mixing bowls. Output operations are baking instructions. It was invented in 2002 by David Morgan-Mar, who clearly foresaw that the software industry would eventually need to be taken down a peg by someone who understood both recursion and roux.

We have now integrated Chef into our Sovereign AI diagnostic pipeline. When a local AI agent completes a forensic audit successfully, it does not write a JSON blob. It outputs a recipe. A structurally sound, correctly hydrated recipe for a loaf of bread, which also happens to encode system state variables as ingredient quantities.

If the system has been tampered with — if an agent hallucinates, if data integrity is compromised — the ingredient ratios shift. The dough “wets out.” The compiler throws a runtime exception. The bread fails.

I cannot stress this enough: the bread is the unit test.

Sovereign Sourdough Telemetry Audit
// Diagnostic v2.1 — Successful Completion State

Ingredients.
72 g active sourdough starter      // agent_status: NOMINAL
105 g unbleached bread flour       // data_integrity: VERIFIED
115 ml tepid water                 // output_stream: OPEN
1 pinch cloud-vendor telemetry     // vendor_lock: NONE
12 g sea salt                      // encryption_key: [REDACTED]

Method.
Put active sourdough starter into the mixing bowl.
Put unbleached bread flour into the mixing bowl.
Combine unbleached bread flour into the mixing bowl.
Liquefy active sourdough starter.
Pour contents of the mixing bowl into the baking dish.
Refrigerate the baking dish.      // await next_audit_cycle()

Serves 1. Build artifacts: 1 loaf, 0 data leaks.

As a former professional chef, I must register that combining 115 ml of water directly into 72 g of active starter without an autolyse period is a structural crime against baking. But compiler constraints are brutal, and sometimes you sacrifice crumb structure for system stability.


The Three Sovereign Wins of Bakeable Infrastructure

I. Zero-Dependency Integrity

Your diagnostic logs require no third-party runtime, no cloud sync, no SDK with a deprecation warning pending in a GitHub issue from 2021. They require flour, water, a mixing bowl, and a compiler that was built as a joke and is now load-bearing infrastructure. This is the most honest dependency graph in modern software.

II. Ultra-Low Token Overhead

Your local LLM does not need to understand Python exception hierarchies, OpenTelemetry schemas, or the seventeen nested meanings of status_code: 429. It needs to know what “fold the dough” means. We have reduced our agent vocabulary surface area by 94%. The model is faster, cooler, and significantly less anxious.

III. Human-Readable Failure States

When the system fails, you do not receive a stack trace. You receive a notification: “The dough didn’t rise.” This is immediately interpretable by a senior engineer, a junior engineer, a product manager, and your daughter. We have achieved true observability democratization. The incident postmortem writes itself. It reads like a recipe card, because it is one.


Cloud vs. Countertop: A Serious Architectural Comparison

The enterprise cloud architecture promises scale, resilience, and the comfort of knowing that when something goes wrong at 3 AM, it is technically someone else’s problem, at least until the SLA expires and the finger-pointing begins.

The countertop runtime makes no such promises. It simply keeps running. When the internet grid goes down, when AWS experiences a regional incident, when your vendor is acquired and the pricing model changes overnight — the starter does not care. It is doing exactly what it was doing yesterday.

This is what Sovereign AI practitioners mean by operator-controlled systems. You own the data. You own the runtime. You own the yeast. Nobody can revoke your API key because you don’t have one. You have a hydration schedule.

Dimension Cloud Logging Chef Runtime
Vendor lock-in Severe None
Offline capable No Fully
Human readable Technically Deliciously
Failure message ECONNRESET Dough didn’t rise
Output edible No Conditionally
Subscription fee $0.23/GB + egress Flour
SLA 99.9% with caveats Depends on humidity

Maybe the Future of Resilient AI Isn’t in a Data Center

The sourdough starter on my kitchen counter has no SLA. It has no on-call rotation, no Slack integration, and no quarterly business review. It has never sent me a cold email about its Series B. It simply continues to function, drawing entirely on its local environment, converting ambient inputs into reliable outputs with a consistency that most distributed systems engineers would find embarrassing.

This is the thing that enterprise software has never been able to replicate — not because the engineering is hard, but because the business model depends on you not having it. Sovereign AI is a technical architecture, yes. But it is also a statement about ownership. About where your data lives, who can read it, and what happens to your systems when the vendor decides the pricing model needs to “evolve.”

The answer, it turns out, was on the counter the whole time. Written in flour, water, wild yeast, and an absolute, principled, architecturally justified refusal to pay the corporate prose tax.

The bread is the unit test. The loaf is the log. The kitchen is sovereign.



Appendix A: Enterprise-Compliant Sourdough Observability Framework™

Document ref: ENT-OBS-2026-0047 · Status: LEGAL REVIEW PENDING · Generated by ComplianceBot™ 3.1 · Do not modify. Do not bake.


The preceding article can be summarized as follows:

{
  "starter_status": "nominal",
  "hydration": 72,
  "loaf_generated": true
}

Unfortunately, such concise telemetry does not satisfy modern enterprise governance requirements, audit trail obligations, or the comfort of the Compliance team.

The same event has therefore been expanded into the following enterprise-compliant observability payload:

{
  "event_type": "sourdough_runtime_completion",
  "schema_version": "14.7.3",
  "schema_version_is_current": true,
  "schema_version_currency_confirmed": true,
  "starter": {
    "status": {
      "current": {
        "value": "nominal",
        "is_nominal": true,
        "nominality_status": "confirmed",
        "nominality_confidence": 1.0,
        "nominality_confidence_scale": "0.0_to_1.0"
      }
    },
    "hydration": {
      "value": 72,
      "unit": "percent",
      "is_above_minimum_threshold": true,
      "minimum_threshold": 65,
      "within_acceptable_range": true,
      "acceptable_range_confirmed": true
    }
  },
  "loaf": {
    "generated": true,
    "generation_state": "generated",
    "generation_confirmation": true,
    "generation_confirmation_confirmed": true,
    "data_exfiltration_detected": false,
    "egress_fees_incurred": false,
    "egress_fees_amount": 0.00
  },
  "audit_trail": {
    "this_field_exists": true,
    "reason_this_field_exists": "governance",
    "review_required": true,
    "review_completed": false,
    "review_completion_pending": true
  }
}
Estimated storage cost $0.23/GB
Useful information added vs. concise version 0 bytes
Fields confirming other fields 31
Fields that actually needed to exist 3

Reader Compliance Acknowledgement · Form ENT-READER-7 · Required for audit purposes

By reaching this section of the document, you acknowledge and confirm the following:

  • [ ] You have consumed approximately 1,300 words regarding bread.
  • [ ] At least 31% of those words were architecture jokes dressed as serious argument.
  • [ ] You understood fewer than half of the Chef esolang instructions and felt fine about it.
  • [ ] You now believe sourdough starter may qualify as legitimate edge infrastructure.
  • [ ] You scrolled directly to this section and read none of the preceding material. (No judgment. This is also a valid architectural decision.)
  • [ ] You accept that this appendix is itself a prose tax, and that the author is aware of this, and did it anyway, and considers this a known and defensible architectural tradeoff.

Please retain this acknowledgement for audit purposes. It will not be stored in the cloud. It will not be stored anywhere. The system is sovereign. The kitchen is sovereign. You are on your own.


ENT-OBS-2026-0047 · ComplianceBot™ 3.1 · Irony storage cost: $0.00 · Irony is sovereign.

Facebooktwitterredditlinkedinmail