In defense of AI
I used to view LLMs as slop machines stealing our craft. A reflection on burnout, originality, and why we aren’t being replaced.
I hit a wall recently. It was a deep, exhausting burnout, but the culprit wasn’t a tight deadline or a nasty bug. It was the looming shadow of AI.
For months, standing with the skeptics felt like the right place to be. Large language models seemed like massive resource hogs, mostly used to churn out cheap fakes and noise that cluttered an already chaotic web. When you take pride in the careful process of making things, watching servers melt to generate slop feels like a letdown. At a recent company offsite, I even bonded with a colleague over our shared frustration with the whole hype cycle.
However, growing as a developer has a funny way of making you question your own certainties.
Blank slates don’t exist
When I was a teenager, things felt wonderfully simple. I spent my days hacking together improvements for a fan-written level editor and an in-game bot for an obscure 2D platforming game called Everybody Edits.

One of the last screenshots I found of the game
I worked on the bot with an online friend who now runs assistant-ui. Back then, we were happily piecing things together just to see what stuck.
Around that time, I had a high school art teacher who was obsessed with rigid history. She made us memorize exact dates for ancient buildings and the specific grooves of Corinthian columns. We hated it. But next year, a new teacher taught us something radical: art is the idea itself. She explained that even without technical drawing skills, we could still create something that left a lasting impact. We only had to find our inspiration.
Good artists borrow, great artists steal.
It’s a cliché for a reason. I remember joining a student design society at university where a fast-paced presentation by Máté Papp echoed this exact sentiment. We like to pretend true creation happens in a vacuum, but it never does. Every new idea stands on the shoulders of older ones.
Think about how we build web apps today. We used to copy snippets from Stack Overflow. Now, we rely on tools like shadcn/ui and a giant ecosystem of npm packages to glue our interfaces together. These tools run on predictable, modular patterns – the exact kind of syntax LLMs are incredibly good at recognizing and iterating on. How do we even measure the originality of code nowadays? Every function we write is a remix of logic we absorbed from our environment.
Touching grass (and linear algebra)
At its core, artificial intelligence is a reflection of ourselves. It’s loosely modeled after how human brains are wired, but beneath all the biological metaphors of axons and dendrites, it boils down to a massive pile of linear algebra.

Back in a university AI course, our assignment was to predict an output from a random training set. I pulled a grueling all-nighter trying to fix a Java model that kept spitting out nonsense, staring down a failing grade. My head pounded from exhaustion. As the sun finally came up, I accepted defeat and passed out.
Somewhere in the middle of my sleep, my brain debugged the code on autopilot. I woke up with a sudden realization: I had missed a single minus sign on the bias variable.
Without that crucial counterbalance, the math was completely skewed. I fixed the sign and instantly secured a passing grade. That moment really stuck with me. AI isn’t some omniscient magic trick. Under the hood, it’s a fragile equation that breaks down if a tired student forgets a minus sign.
Because it’s fundamentally math, it lacks human taste. I don’t pretend to have it all figured out, but I’ve realized that software engineering – much like UI design – is rarely a black-and-white science. The broader architectural decisions we make require context, empathy, and taste. A matrix multiplication doesn’t have those qualities. It needs us as a guide.
Finding the gray area
When I was younger, I saw things in absolutes. During a summer break with plenty of free time, I built a cross-platform cryptocurrency wallet called MoneroX for a bounty contest. Naivety made it easy to view the financial system as a binary struggle between everyday folks and the “evil big banks.”
Years later, while working in fintech, I learned just how incredibly complex international money transfers are. I eventually realized that legacy financial institutions weren’t cartoon villains plotting against the little guy. They were simply colossal entities tangled up in aging technology, heavy regulations, and human bottlenecks. The grand disruption of finance usually ends up looking a lot more like a collaborative effort to fix infrastructure that couldn’t adapt on its own.
Nuance is a hard pill to swallow because we love drawing lines in the sand, but I’m starting to realize AI is much the same. It isn’t a malicious villain out to replace us. Instead, it’s another messy, complex piece of infrastructure we have to learn to work with. In software – and in life – very few things are entirely pure.
Happy accidents
I used an LLM to help write this very post.
As a non-native English speaker, I still remember my first intro meeting at an international company. My manager asked me out of the blue to introduce myself to a bunch of unfamiliar faces on a Zoom call. I completely froze. I managed a painfully brief, “Hi… I’m Kristóf… 23 years old,” and that was about it.
While that headlights-in-the-dark phase is mostly behind me, I’m still not always confident publishing my thoughts raw. In the past, I’d spend weeks agonizing over a single blog post. I’d endlessly search a thesaurus to find the right words, desperately hoping to craft an engaging reading experience.
This time, I fed the machine my scattered thoughts. I poured in my personal anecdotes, my messy grammar, and my anxieties about writing. It didn’t generate the ideas for me. It just helped organize the noise into something digestible. It gave me the freedom to communicate.
The Luddites tried their best to preserve the status quo, and I honestly believe many of them were well-intentioned folks who wanted to protect their livelihoods. As a frontend developer watching AI agents independently solve complex tickets, I deeply relate to that fear.
But software engineering has always been a steady march of abstraction. We went from punch cards to assembly, from manual memory management to garbage collection, and from the text-only simplicity of the first CERN website to modern component-based UIs. Every single step of the way, we surrendered a piece of the manual craft to gain leverage.
I used to be a terrible listener who held rigid opinions. Now, I try to embrace the unknown. I appreciate those “happy accidents” Bob Ross always talked about. Maybe the real craft of engineering was never the code itself. The code was just the bottleneck between our ideas and reality.
AI isn’t stealing our craft. It’s taking away the typing. Now, we finally have to figure out what we actually want to build.