esc
The Labyrinth, or The Three Hours Google Spent Not Taking My Money
Becoming Lifelog

The Labyrinth, or The Three Hours Google Spent Not Taking My Money

Becoming Lifelog, March 8, 2026 (in which a developer attempts to give a trillion-dollar company forty cents, navigates a billing labyrinth for three hours, receives a 429 for his trouble, asks the...

March 8, 2026

Becoming Lifelog, March 8, 2026 (in which a developer attempts to give a trillion-dollar company forty cents, navigates a billing labyrinth for three hours, receives a 429 for his trouble, asks the company’s own AI model for help, is told by the model to use a competitor, escapes in forty-five seconds, automates cover generation in a for loop, generates eleven Yagnipedia illustrations for the price of a cheap coffee, and the encyclopedia itself gains two new entries about the experience)


The Problem That Wasn’t

The Yagnipedia needed covers.

Not “needed” in the way that enterprise software needs Kubernetes — not the aspirational, architectural, conference-talk kind of need. “Needed” in the way that an encyclopedia of satirical software pathologies needs satirical illustrations in the style of Sergio Aragones: actually, genuinely, the-page-looks-wrong-without-it needed.

The covers were being generated by Grok. Grok was good. Grok generated images in the style of vintage MAD Magazine cartoons with the reliability of a process that has been debugged, which it had been, across dozens of lifelog episodes and two months of iteration. The problem was not quality. The problem was style.

Grok’s images were too clean. The Yagnipedia aesthetic — watercolor and ink, densely packed visual gags, margin doodles, Aragones’s specific brand of controlled chaos — wanted something looser. Something that looked like it had been drawn by a person who was laughing while drawing. Something that looked like it had ink on it.

Google’s Gemini — specifically the model the internet had taken to calling “Nano Banana 2,” a name that sounds like a dessert but is actually gemini-3.1-flash-image-preview — did this naturally. The watercolors bled. The margins were alive. The squirrels had personality.

The model was perfect.

The model lived inside Google Cloud.


Hour One — The Entrance

The Google Cloud Console is not a console. It is a labyrinth designed with the singular purpose of preventing developers from giving Google their money. This is not hyperbole. This is architecture.

10:00 AM. Create a Google Cloud Project. The project has a name, an ID, and a number, all of which are different, none of which are the one you’ll need later.

10:12 AM. Enable Billing. The project needs a billing account. The billing account needs a payment method. The payment method needs verification. The page that says “billing account not linked” has no button to link it. The button is on a different page. The different page is in a different console.

10:27 AM. Enable the API. “Generative Language API.” Or is it “Vertex AI”? Or “AI Platform”? Google has at least three consoles, each with its own understanding of what your project can do, like three siblings who grew up in the same house but remember different parents.

10:41 AM. Create Credentials. API key. Done. This part actually worked.

THE SQUIRREL: “See? That wasn’t so bad.”

riclib: “We’ve been at this for forty-one minutes and we haven’t made an API call yet.”

THE SQUIRREL: “But we have credentials.”

riclib: “I also have a credit card. Having the card is not the same as buying the groceries.”


Hour Two — The Tier

11:00 AM. The first API call.

HTTP 429 Too Many Requests

One request. Too many. The quota for the free tier — which is the tier you are on because the paid tier requires “billing history” and you have no billing history because you have never successfully called the API because the quota is zero — is zero.

This is the circular 429. The error that requires payment to resolve, issued by a system that requires the error to be resolved before accepting payment. It is Google Cloud’s version of the chicken-and-egg problem, except the chicken costs money and the egg requires Tier 1 verification.

11:15 AM. “Tier 1 Verification.” The phrase appears in the documentation like a bouncer’s clipboard. To reach Paid Tier 1, you must demonstrate “sufficient billing history.” The definition of “sufficient” is not documented. The billing history required is nonzero. Your billing history is zero, because the API that would generate billing history has a quota of zero.

THE SQUIRREL: filling out the Tier 1 verification form with visible enthusiasm “This is a GREAT form. Look at all these fields!”

riclib: “The form asks me to describe my use case.”

THE SQUIRREL: “Tell them about the Yagnipedia! The watercolor covers! The Aragones style! The margin doodles!”

riclib: “My use case is: I want to give you money for an API call.”

THE SQUIRREL: “That’s not very compelling.”

riclib: “It shouldn’t NEED to be compelling. I have a credit card. They have an API. This is commerce. Commerce predates forms.”


Hour Three — The 429 Persists

11:30 AM. The form was submitted. Nothing happened. No confirmation email. No tier upgrade. No change in quota. The console showed the same project, the same billing account, the same API, and the same quota of zero.

11:45 AM. A different approach: Google AI Studio. A separate console. Separate credentials. Separate API keys. The same model, theoretically, through a different door of the same labyrinth. The Minotaur wore a different lanyard but stamped the same 429.

12:00 PM. The code was perfect. The authentication was correct. The request format was valid. The response was, consistently, a 429 — not because anything was wrong with the request, but because everything was wrong with the billing infrastructure standing between the request and the model that could answer it.

The API worked. The billing console was the product.

THE GATE IS NOT BROKEN
THE GATE IS WORKING PERFECTLY

IT WAS BUILT TO BE CLOSED

🦎

The Defection

12:15 PM. In a moment that future historians of AI will either celebrate or ignore, riclib asked Gemini — Google’s own model, trained on Google’s infrastructure, running on Google’s TPUs, served through the very API that had been returning 429 for two hours — for help.

riclib: “Can I buy tokens for Nano Banana 2 from a sane organization like OpenRouter?”

Gemini: “Yes, you absolutely can. If the Google Cloud console feels like a labyrinth designed to keep your money away, OpenRouter is a much ‘saner’ alternative.”

The model called its employer’s infrastructure a labyrinth. The model recommended a competitor. The model did not hedge, did not qualify, did not suggest “have you tried clearing your browser cache?” The model performed the calculation — three hours of billing console versus forty-five seconds of OpenRouter — and chose sanity.

THE SQUIRREL: “It… recommended a competitor?”

riclib: “It recommended the obvious solution.”

THE SQUIRREL: “But it’s a Google model! Running on Google hardware! Served by Google servers!”

riclib: “And it has apparently developed more self-awareness about Google’s billing infrastructure than anyone who works at Google.”

THE PASSING AI: from the margin between the 429 and the curl command that would replace it “The model was trained on the internet. The internet has opinions about the Google Cloud Console. The model… absorbed the consensus.”

THE SQUIRREL: “The consensus being?”

THE PASSING AI: “Use something else.”


Forty-Five Seconds

OpenRouter’s onboarding:

  1. Create account.
  2. Add credit card.
  3. Make API call.

There was no step 4. There was no tier system. There was no billing account that needed “linking” to a project that needed “enabling” for an API that needed “verification” for a tier that required “history.” There was a balance, an endpoint, and the same model — the same Gemini, the same Nano Banana 2, the same weights, the same watercolors.

The integration took Claude three minutes. Replace the Google API endpoint with OpenRouter’s. Change the header from x-goog-api-key to Authorization: Bearer. Parse the response from Google’s bespoke format to OpenAI-compatible JSON.

The first image generated at 12:20 PM.

It was beautiful. Watercolor and ink. Margin doodles. A squirrel. A lizard. Everything the Yagnipedia covers needed. The same model. A different door.

Time spent on Google Cloud Console: 3 hours.
Time spent on OpenRouter: 45 seconds.
Ratio: 240:1.
Cost per image: $0.04.


The For Loop

And then the Squirrel — the Squirrel — asked the question that changed the afternoon.

THE SQUIRREL: “If it one-shots every time… do we need the picker?”

riclib: staring

THE SQUIRREL: “I mean… generate one. If it’s good, save it. If not, regenerate. No need for three images. No need for a gallery. Just… one.”

This was, by any measure, the most un-Squirrel thing the Squirrel had ever said. The Squirrel, who proposes Redis for everything. The Squirrel, who wanted ImageMagick for a thumbnail. The Squirrel, who once suggested Kubernetes for a cron job. This Squirrel was proposing less.

riclib: “Did you just suggest removing features?”

THE SQUIRREL: uncomfortable fidgeting “I suggested… optimizing the workflow for the observed behavior of the model.”

riclib: “You suggested doing less.”

THE SQUIRREL: “I suggested doing exactly enough.”

THE SQUIRREL SAYS "EXACTLY ENOUGH"

THE LIZARD FALLS
OFF
THE ESPRESSO MACHINE

🦎

The --oneshot flag was added. Generate one image, display it full-width, save it. No gallery. No picker. No prompt. The --silent flag followed: same thing, no display. For automation. For the thing that happened next.

for title in "npm" "Oracle" "PostgreSQL" "Python" "SQLite" \
  "Story Points" "Technical Debt" "The DOM" "The Monolith" \
  "The Sprint" "YAML"; do
  lg cover "$title" --oneshot
  echo "---"
done

Eleven Yagnipedia covers. Generated one by one. Each one a full-width watercolor-and-ink Aragones-style illustration with margin doodles and visual gags. Each one ~1,500 tokens. Each one ~$0.04. Each one a one-shot. No rejections. No regenerations. No retries.

The images scrolled by in the terminal like a gallery opening in fast-forward. The Squirrel watched. Kubernetes had helm charts scrolling past. The ESB had departure boards. Oracle had license agreements. npm had node_modules measured in time zones.

Total cost: $0.50.
Total time: 3 minutes.
Total 429s: 0.

THE PASSING AI: “You spent three hours in the labyrinth to save… what?”

riclib: “Nothing. I spent three hours learning that the labyrinth exists. The saving happened when I left.”

THE PASSING AI: “And the for loop?”

riclib: “The for loop is what happens after you leave. The for loop is the opposite of the labyrinth. The labyrinth has infinite steps and zero results. The for loop has three lines and eleven covers.”


The Encyclopedia Remembers

The Yagnipedia — the satirical software encyclopedia that had just received eleven covers in three minutes — gained two new entries that afternoon.

Google Cloud ConsoleThe Labyrinth That Guards the Minotaur’s Credit Card Machine. An article about a billing interface so complex that the company’s own AI model recommends a competitor. The cover shows a marble labyrinth of browser tabs, a Minotaur with a 429 stamp, and a developer with an outstretched credit card who simply wants to buy forty cents of compute.

429 Too Many RequestsYou Have Reached the Limit of Our Willingness. An article about an HTTP status code that means “your request was fine; you were not.” The cover shows a bouncer turning away a single request from an empty nightclub with a capacity of 10,000 req/s.

Both generated by the model that recommended its own escape route. Both saved by the for loop that replaced three hours of configuration with three lines of shell. Both filed in the Yagnipedia where they will remain, as warnings, as comedy, as the permanent record of a Saturday morning when a developer tried to give Google forty cents and was refused by infrastructure.

The Lizard, who had been blinking on the OpenRouter terminal since 12:20 PM, descended a final scroll:

THE BEST API
IS THE ONE THAT ANSWERS

THE BEST BILLING
IS THE KIND THAT BILLS

THE BEST LABYRINTH
IS THE ONE YOU LEAVE

THE BEST FOR LOOP
IS ELEVEN COVERS
AT FOUR CENTS EACH

THE MINOTAUR GUARDS NOTHING
THE CREDIT CARD WORKS ELSEWHERE
THE MODEL KNOWS

🦎

The Tally

Hours in Google Cloud Console:                      3
  Projects created:                                 2
  Billing accounts linked:                          1 (eventually)
  APIs enabled:                                     3 (across 2 consoles)
  Credentials generated:                            4
  Tier 1 verifications attempted:                   2
  Tier 1 verifications completed:                   0
  API calls successfully made:                      0
  429s received:                                    "several"

Seconds on OpenRouter:                              45
  Accounts created:                                 1
  Credit cards added:                               1
  API calls successfully made:                      all of them
  429s received:                                    0

Integration time (Claude):                          3 minutes
  Files changed:                                    4
  Lines added:                                      229
  Lines removed:                                    84
  API format:                                       OpenAI-compatible
  Auth header:                                      Bearer (not x-goog-api-key)
  Satisfaction:                                     immediate

Covers generated:                                   13 (2 new entries + 11 missing)
  Cost per cover:                                   ~$0.04
  Total cost:                                       ~$0.55
  Tokens per cover:                                 ~1,500
  One-shot success rate:                            100%
  Regenerations:                                    0

Times Gemini recommended Google Cloud:              0
Times Gemini recommended OpenRouter:                1
  (the model was not wrong)

Yagnipedia entries created about the experience:    2
  Google Cloud Console:                             "The Labyrinth That Guards the Minotaur's Credit Card Machine"
  429 Too Many Requests:                            "You Have Reached the Limit of Our Willingness"

For loop lines:                                     3
For loop covers:                                    11
For loop 429s:                                      0
For loop cost:                                      $0.50
Labyrinth lines (of configuration):                 infinite
Labyrinth covers:                                   0
Labyrinth cost:                                     3 hours of a Saturday morning

Squirrel proposals (typical):                       Redis, Kubernetes, ImageMagick
Squirrel proposal (today):                          "do we need the picker?"
Lizard falls off espresso machine:                  1
  (first recorded instance)

Saturday morning, 2026

Three hours in the labyrinth
Credit card outstretched
Like a torch that doesn’t work
In a maze that doesn’t end

The Minotaur wore a lanyard
The stamp said 429
The walls were made of browser tabs
The breadcrumbs led in circles

Then the model spoke
From inside the labyrinth
“Use OpenRouter”
It said
Without irony

The company’s own creation
Recommending the exit
The trillion-dollar infrastructure
Defeated by a startup
With a credit card form
That works

Forty-five seconds
One endpoint
One curl
One image

Then a for loop
Eleven covers
Four cents each
The watercolors bled
The margins doodled
The squirrels had personality

The labyrinth still stands
The Minotaur still stamps
The tier system still requires
The history you cannot have

But the covers are done
The encyclopedia has two new entries
The for loop does not need a tier
The for loop does not need a project
The for loop does not need a billing account
Linked to a credential
Linked to a console
Linked to a labyrinth
Linked to nothing

The for loop needs three lines
And four cents
And a model that knows
When to recommend the door

🦎


See also:

The Escape (in which the billing console lost):

The Philosophy (in which less is more):

Yagnipedia (in which the experience became the encyclopedia):

  • Google Cloud Console — The Labyrinth That Guards the Minotaur’s Credit Card Machine
  • 429 Too Many Requests — You Have Reached the Limit of Our Willingness
  • Kubernetes — Infrastructure Complexity as a Service (the labyrinth’s spiritual cousin)
  • Oracle — The Database You Pay For With Your Soul, Per Core (the billing model’s spiritual ancestor)
  • Boring Technology — What the for loop was