Zum Hauptinhalt springen

The Beauty in the Ugly

· 3 Minuten Lesezeit
Savutro
Junior DevOps Engineer @ Bernmobil

Today I'll be featuring a story about beautifully ugly code.

It all started on a rainy Wednesday—the kind of day where the coffee’s cold, your tabs have tabs, and you find yourself questioning why null == undefined is true but null === undefined is false.

I had a simple goal: make a button that, when clicked, fetches a dad joke from an API and displays it on the screen.

Simple.

But, like all great tragedies, it began with good intentions and ended in a monument to unholy architecture.


The Code​

Let me show you what I eventually shipped to production:

document.getElementById("jokeBtn").addEventListener("click", async function () {
let x = (await (await fetch("https://icanhazdadjoke.com/", {
headers: { Accept: "application/json" },
})).json()).joke || (["Why", "did", "the", "function", "break?"].join(" ") + " Because it had too many arguments.");

document.querySelector("#display").innerHTML = x.split("").map((c, i) => i % 2 ? c.toUpperCase() : c.toLowerCase()).join("");
});

Yes. That is one single function, bound to one single button, with one single purpose… that does way too much.

Let’s walk through what makes this code beautifully ugly:


1. Nested await like a Matryoshka Doll​

I didn’t just fetch and then json() like a normal person. I went for:

await (await fetch(...)).json()

Because nothing screams "this will age well" like asynchronous nesting that makes your future self say, “Who hurt me?”


2. Fallback Joke… from Pure String Violence​

In case the API failed, I provided a backup joke:

["Why", "did", "the", "function", "break?"].join(" ") + " Because it had too many arguments."

Because, why use a string literal when you can construct it like a deranged poet?


3. Alternating Character Casing — Because Meme Formatting Is Forever​

Just to make things ✨fancy✨, I uppercased every second letter, turning a dad joke into a Spongebob meme:

x.split("").map((c, i) => i % 2 ? c.toUpperCase() : c.toLowerCase()).join("")

Because legibility is for the weak.


4. Absolutely No Variables with Meaningful Names​

You thought I’d name my variables something descriptive? Ha. I used x.

Because x is a mystery. Like life. Or why this button makes the entire browser freeze when the API is slow.


5. No Separation of Concerns. Not Even a Little.​

No functions. No modularity. No comments. Just raw, chaotic power in one anonymous event handler. It’s like a Jackson Pollock painting, but for developers.


The Aftermath​

When my teammate reviewed the PR, he left just one comment:

“I don’t know whether to merge this or frame it.”

I replied with a gif of Nicolas Cage clapping.

We merged it.

It’s still in production.

Sometimes, when I look at it, I feel pride.
Sometimes, I weep.