Revelry

AI-Driven Custom Software Development

Image is white text on black background: "you're absolutely right! Ai prose is terrible"

If it’s going to be read by a human, it should be written by a human

I hate AI prose, and I know I’m not alone. Not only does it read like a hollow imitation of human thought, but it makes me feel like the ‘author’ doesn’t actually have anything to say. I despise each and every one of the LLMs grubby little stochastic fingerprints when I come across them, to the point where I think I need to talk about it: especially since most of my other writing encourages the use of AI.

This article aims to show you why I hate AI prose. This includes an explanation of why the text LLMs produce is uniquely difficult to read and comprehend, and why I think it’s a burden and not a boon to human communication. Use LLMs to write your code, by all means: but please, don’t use the robots to write your prose.

Why I hate it

Firstly, from a purpose standpoint: it’s completely useless as writing. Why do we write? To communicate, and to share our ideas as clearly as we can with other people! All LLMs do is throw a layer of pointless confusion over my thoughts. It’s the ultimate thought obfuscation machine, an extremely subtle and seductive method of rendering the written word utterly meaningless.

It used to be so simple: I’d write my thoughts into an email, send it, and then the recipient would read it and decode my thoughts from there. But now, my thought becomes a misspelled prompt. This prompt gets used to generate a block of text, trading meaning for effluent fluff, and gets sent. The recipient opens the email, sees the fluffy AI prose, can’t be bothered to read it (why would they?) and asks their AI to condense the thought back down again to (hopefully) what I was trying to say. This just seems like the most wasteful and inefficient way to communicate in human history – even the most basic communication model would argue that we are consciously and idiotically choosing to add more noise to our signal.

Secondly, from a stylistic standpoint, AI prose is miserable to read. Both inter-model family and intra-model family, there are torturous patterns you can’t get away from. Every sentence reads like a grandiose manifesto, the framing devices are repetitive and grating, and the word choices make me want to barf. Why is everything load-bearing? Every seam is earning its keep! Someone make it stop!

But they won’t, because people are in love with how cheap it is to produce, and how ‘professional’ it makes them sound! AI prose is everywhere! Decades of mistaking fluency for intelligence (why say “use” when you can say “utilize”?) have convinced us that fluffy jargon bullshit makes writing sound buttoned up and business-like. And the worst part is, because most people don’t want to read AI prose… they don’t bother to read it through before sending it on, or even reading it out loud! This leads to farcical scenarios where my statistical nonsense machine has a conversation with your statistical nonsense machine, with not one human brain or thought in sight.

AI prose is measurably terrible

So why does AI prose suck so much? It’s a ridiculous question if you stop to think about it, just like everything with AI. There’re no brains or thoughts involved, just applied mathematics producing a simulacrum of intelligence. But let’s entertain it. I ran across an analysis shared by Becca from LinkedIn demonstrating precisely why both a) AI prose has a ‘unique’ flavour profile and b) why that flavor profile is đŸ’©.

Violin plot of per-story narrative rarity percentile by author. Human stories skew high, centred around 0. 7 with a long tail downward, while gpt, claude, deepseek, kimi and gemini all cluster tightly around 0. 5.

An important note of clarification: the post talks about this graph as it refers to word rarity, but in actual fact it’s a graph of measured narrative rarity from a paper called “StoryScope: Investigating idiosyncrasies in AI fiction”. However, there are multiple papers that also indicate that human writing often involves a richer vocabulary.

But why?

So below, as above

LLMs get trained in a two step process: pre-training, followed by fine-tuning. Both of these stages dramatically affect the final output – but first, let’s focus on the impact of the pre-training.

Pre-training

Pre-training is where the model swallows a massive corpus of information, learning to figure out ‘what word comes next’. It’s all just mathematics: laws of averages and likelihoods. The model learns to fill in the most likely word to come next. Technically they don’t just fill in the most likely next word: every possible next word is scored, and then a weighted choice is made from the likeliest ones.₁ The details of this, and the fine tuning that come after, do have an impact on what the model eventually produces. But at their simplest, LLMs are precocious children who memorized the textbook but understand none of the context, nuance, method or material.

This means that the words and narratives of AI prose are generally going to be… standard. Boring. Prosaic. If you plot the plots (hehe) of these narratives on a graph, while each of the models has a slightly different shape, they all tend to cluster in the middle, meaning that they all use the same kinds of words, in the same way, in the same narratives, all of the time. Maybe if you read one AI generated piece by a new model, you wouldn’t notice: but by the time you’d got to ten, you’d probably have spotted the pattern. It’s generally weighted towards the same comfortable “middle” narrative, all the time.

Human language might use those laws and probabilities where needed for communication, but it’s more like guidelines than actual rules. You can easily just break those laws and flamingo your thoughts square into another human being’s squishy pink wrinkly folds. Humans have a tendency to just fling words around like monkeys throwing poop and often say things completely out-of-pocket. Poker. Hairbrush. Pastry Knife. Spatula.₂ We all have our personal styles (you could probably identify all of my blog posts on this site in a blind test) but even these are richer in variance than what the AI could produce.

It’s not just the words chosen and the narratives produced though; it’s the way we fit them together inside of a piece. Side note: It makes me sick that a perfectly serviceable negative framing like this now smells bad because LLMs throw negative parallelism around like confetti.

Fine Tuning

LLM produced text typically doesn’t sound like, “The apple fell from the tree because of gravity.” Instead, the textual rhythm that gets returned will sound more similar to “Gravity is in place, so the apple fell out of the tree”. The human ear (and brain) prefer that first example, probably because it sounds more natural: like the answer to the question “Why did the apple fall out of the tree?”. It slots into an imagined discourse where someone asked “why did the apple fall” or “tell me about the apple”. On the other hand, the LLM produced text feels uncanny and jarring, requiring more of the reader’s brainpower to understand.

So why does AI prose tend to frame arguments ‘backwards’, with the cause up front? While pre-training probably plays a role, the fine tuning techniques – Reinforcement Learning from Human Feedback (RLHF) and feedback-based tuning – seem to be the most likely culprits. This stage of training focuses on encouraging the model to produce certain outputs over others, based on whether a certain output is judged to be ‘right’ or ‘wrong’.

I suspect that this is what makes the model more likely to say “X, so of course Y” rather than “Y because of X”. During fine-tuning, when the model’s output is being judged, it’s far more likely that the model is more accurate when the cause comes before the effect. Models are great at predicting the next word based on what comes before, so it makes sense that they reach the right conclusion more often when they lay out the justification first and only then commit to the conclusion. I also think this might be why negative framing is so common, eg “it’s not criminal, it’s not cynical, it’s just science”. The model is able to complete the sentence correctly more of the time in training when it had already ruled out alternative explanations.

The fallout of these fine-tuning methods is also probably why the rhythm and tone of an AI generated piece feels strident, all the time. Every sentence feels punchy, the written equivalent of a drummer hitting a rim-shot. This framing likely got a higher score during fine-tuning, and so is encouraged in the final model. But this is exhausting for me as human to read in a finished piece. If every note of a drum solo was a rim-shot, I would get really tired, really fast (this is probably why my eyes and brain start getting fatigued so quickly when reading AI generated prose). Not every sentence has to feel like a gut punch, and there’s nothing wrong with hedging your thoughts using words like “seemingly”, “I think”, “maybe” and so on…but sentences with those words probably didn’t score as high when the model was being trained.

The fake-Stu experiment

Despite the above, the siren call of being lazy appeals to me, as it always has. That’s why I became an engineer, after all! So I’ve tried, I really have. I’ve desperately tried to fob the work off onto the robots. I tried with the last article I wrote – regarding the AI silo. I asked Claude to chop, strain and boil all of my previous articles into a guide that could be used to produce “Stu sounding content”. Something that would unerringly capture my voice and infuse the writing with my spirit.

The prompt produced was certainly encouraging, and even oddly gratifying:

> ## Voice & Tone - **Conversational and informal**, like 
> explaining something to a smart friend at a pub. 
> Never stiff, never corporate.

It even included multiple clauses to avoid classic AI telltale hallmarks, the words and phrases that we all now read every damn day that turn our brains off₃ :

“Quietly” 
“Leverage”
“It’s not X, it’s Y”
“The quiet part nobody says out loud”
“Table stakes”
“Real shift”
“And honestly...”
“The honest answer is...”
“Here’s what’s actually happening”
"Load bearing"

Armed with my fake Stu, I asked for an article about the AI Silo. You can read the full thing in a gist here.

It reads fairly well. The prose isn’t too horrific, there’s not too much jargon and I suppose you could even argue it’s got a point. But it’s horrible. I wasn’t proud of it – how could I have been, I didn’t write it! – it’s easily identifiable as AI prose, and in general it’s just a soulless piece of crap. That’s not objective though, so let’s do some direct comparison between my article and the robot’s article.

First of all, the robot’s article (which is about the same length as mine) is full of fluff. Every single paragraph and sentence is the same idea (the trade-off between speed/endurance when using LLMs) restated and reworded each time. The sentence and paragraph constructions are cookie-cutter variations of one another. Framing devices are repeated again and again. My brain and eyes keep trying to skip ahead, because they are tired of going over the same thing over and over.

My article on the other hand, forged as it was in the white hot crucible of my razor sharp brain, meanders all over the place like a lost shepherd. As well as mentioning the speed/endurance trade-off, I blab on about cultural implications, the perceived lack of ownership over LLM generated code, the fact the LLM doesn’t make you feel like a bad engineer, and more. While that might get me rejected from, say, a scientific journal, it’s exactly the spice that makes me want to read things. It is just so clearly the result of a human trying to share thoughts and put them in other people’s brains. And I think at the end of the day, you can tell I put time and effort into writing it, so maybe it’s worth your time and effort to read it.

It’s also pretty vexing that it took my somewhat whimsical style and equated it to bad engineering, plain and simple. Check out these two paragraphs that took my self-deprecating style and reduced it to poor work:

When you paired with someone, you didn’t just solve the problem. You absorbed their mental model.[…]You picked up that the billing module had a gnarly edge case around leap years that wasn’t documented anywhere. You heard them mutter “oh we tried that last quarter and it broke everything” before you spent three days going down the same dead end.

That stuff doesn’t live in Jira tickets. It doesn’t live in documentation (because let’s be honest, when was the last time anyone updated the docs?). It lived in conversation. In the ambient, incidental transfer of knowledge that happened when humans worked on problems together.

Writing the line “let’s be honest, when was the last time anyone updated the docs” is not a good way to burnish my professional reputation. But I didn’t write it, did I? I tried to use statistics to make a joke – the written word’s equivalent of the pink slime they make chicken nuggets out of. That’s what you get when you smash my jolly and effervescent prose together in a soulless statistical void.

Substance

Maybe there’s an argument to be made that AI makes a good writer bad, but a bad writer better (at the cost of their voice). Even here I’d push back though. Even if it feels a little chaotic at times, I feel like human produced words have more weight. The act of writing is not just a way to get my thoughts into your head; it’s a way of getting my own thoughts figured out. Case in point: I’ve written and re-written this same sentence about five times. I’ve cut and re-arranged and moved it; who knows if it will even make it into the final piece? It’s only after the fact, after the writing is done that I’m able to read it and hopefully say, ‘yes. This encapsulates what I was trying to say. This is what I was thinking’.

Now let’s think about the alternative. If I want to produce a piece using AI, none of the words are my own. Rather than carefully picking and choosing words that seem to map to my thoughts, I’m letting the LLM simply pick the most likely next word. The word that is most likely to follow the preceding word. My ability to move the words around is hamstrung: how can I carefully rearrange the words and sentences if I didn’t fit them together in the first place? How can I refine the mapping of the words on the page to my thoughts… if I wasn’t the one who wrote them? I don’t know about you, but I feel like I can only edit AI prose in two ways: deleting large chunks until I’m more or less comfy with what’s left, or completely re-writing whole sections and sentences from scratch.

I mentioned above that even according to basic theories of communication and information transmission, using an LLM to produce text already muddies the signal and makes it harder to communicate. Other theories argue that the act of encoding the message – the way it gets packaged, chopped and changed ready for transport – is part of that message, if not the whole message itself. So whose message is it, really? Yours, or the model’s (which as we know, can’t actually think?)

You’ve convinced me, you hypocrite

I’m so glad I’ve convinced you! No more AI prose! So, I suppose it follows then that I’ll also stop getting the AI to write my code? After all, most of the arguments above could conceivably apply to code as well as prose. Surely it’s hypocritical to talk out of both sides of my mouth, and say that AI prose is unsubstantial and demonstrates a lack of thought… but advocate a handover of control to the machine when it comes to code.

Writing prose is very different from writing code. For one thing, writing code serves an entirely different purpose from writing prose. Computer code (for me, as a web developer) is read by machines to create qualitative experiences for humans, and the average user is far removed from the code I write. There’s always been a fair number of translation layers (e.g., the compiler, the browser, your screen) between the user whom I’m writing for, and the code as it is written. For example, sometimes, it doesn’t matter exactly how I express the idea; the user (whom the software is for) will never know. Obviously, there are caveats – if I use the wrong data structure here, or an inefficient algorithm there, the end user is going to experience problems. If I don’t architect the system properly, or fail to think about the edge cases, that’s probably going to directly affect the user (and more often than not, my fellow developers).

But more often than I think we would care to admit, even when all those other variables are held as equal, there are multiple choices about how to express something that ultimately won’t matter. Do I use a list or a map? A for loop or a while loop? Regardless of the choice, the liminal translation layers I mentioned earlier are going to come in and create something useful and that will be that. Sometimes, the individual units of code that I write won’t impact the final function. And once it’s written, I can verify the code through means other than reading it. Tests, linters, static analysis, type-checking, etc. If my intended experience is the button logs you in, then I can verify that without reading the code.

Prose, on the other hand, is read by humans and goes directly into the brain. Code is translated and helps create an experience, but the written word is capable of more – it can take an idea in the purest form I know how to shape it, and put it almost directly into your head. Every word matters, always. If I write the phrase “she bit into the deliciously crisp red apple, unaware of the writhing worms within,” I have transferred my thoughts almost directly into your head. As a bonus, while sitting here writing this sentence, I found a lovely alliteration to use. Yes: I know what synonyms are. But even synonyms have different flavors, and allow for individual expression. I could describe someone as verbose – or loquacious. Should I use the word terse, or laconic? Fundamental or basic? Bad or diabolical? Perfunctory or box ticking? Do I want to write like [Faulkner or Hemingway?](https://www.britannica.com/story/was-there-a-feud-between-william-faulkner-and-ernest-hemingway)

Refusing to generate prose using an LLM, but happily using one to generate code, does produce tension and I’m still working through my own feelings about it. Judging and evaluating code based purely on output brings me into direct contention with some of the core principles of good software engineering. “Programs must be written for people to read, and only incidentally for machines to execute”, and I am advocating precisely the opposite: programs written solely to be executed and only evaluated on the quality of that output. I’m still not wholly convinced, and I feel the tension in my bones, because for the last 6 years writing programs to be read by humans is how I’ve worked. Just like how prose puts the thoughts of others into my head, code is written to put the mental model of a software system into my brain. I think it really does depend on the complexity of that mental model, its nuances and quirks, how many engineers are on the project and all sorts of other factors. This article isn’t here to help you solve the (now universal) problem of when to stop using AI and start using your brain: it’s to tell you that AI prose sucks. So my compromise for now is that while I’ll let the LLM produce all the code… I’ll nix the comments and substitute them with my own.

The Way Out

As it was recently put on the Macro Mayhem podcast, “human attention requires human effort […] if you didn’t put the effort in to write your post, then why should we put in the effort to read it.” If it’s going to be read by a human, then for the love of everything, write it yourself. If you don’t, all you’re doing is begging to be misunderstood and misconstrued. AI prose is an active signal that you don’t respect the person reading your writing.

This piece has taken me hours, spread across weeks. I’ve taken the time to write it because I want to get the idea from my own head to yours, and hopefully, I’ve made my point. No one (I hope) wants to replace the clear transmission of ideas and the gorgeous richness of the human language with thoughtless slop. If you think I’m alarmist, or overreacting, I challenge you to spend one hour on LinkedIn reading crappy and insipid AI generated posts (you won’t even have to aim). My guess is that you won’t feel inspired or motivated afterwards, but instead you’ll feel weary.

Not great. Not brilliant. Terrible. It’s what you want to say, now. That’s the load-bearing truth.

So take the time. Write. Re-write. Think. Re-arrange. Use the robot to write the code if you have deadlines to meet, but please: write using your own brain, not a glorified autocomplete.

₁In related news, Anthropic’s recently announced “watermarking” for AI output is a more advanced and intentional version of this: the choice is weighted in a statistically detectable (but secret) way.

₂Actually not ‘spatula’: I used to do improv and this is a very common ‘random’ word thrown out when asking the audience for a suggestion.

₃”Quietly” really hurts, as my real with-my-own-two-hands AI silo article was literally entitled “how LLMs are quietly killing engineering culture”.