Skip to content

Instantly share code, notes, and snippets.

@jbaruch
Last active February 9, 2026 22:57
Show Gist options
  • Select an option

  • Save jbaruch/3aaece1ac2e30d2db3ea523e2f2a5e69 to your computer and use it in GitHub Desktop.

Select an option

Save jbaruch/3aaece1ac2e30d2db3ea523e2f2a5e69 to your computer and use it in GitHub Desktop.

AI Writing Anti-Patterns

These are hard rules. If you catch yourself writing any of these patterns, rewrite. Dо anti-pattern check, scan the draft for every pattern listed here. Zero tolerance.


1. Rhetorical Contrastive Negation

The tell: "Not X. Y." or "Not X. Just Y." or "It's not about X. It's about Y." A negation followed by an affirmation, framed as revelation.

Symptoms:

  • Two short sentences, first negating, second affirming
  • Often starts with "Not" or "It's not about"
  • The pair is supposed to sound like a mic drop

Examples:

  • ❌ "Not just a tool. A methodology."
  • ❌ "It's not about the code. It's about the process."
  • ❌ "Not hype. Results."

Why it's a tell: This is the single most common LLM writing pattern. It sounds confident and pithy to a machine. To a human reader it sounds like a LinkedIn post.

Instead: Make the point directly.

  • ✅ "The process matters more than the code, and here's three hours of public embarrassment proving it."

2. Parallel Binary Comparisons

The tell: Balanced A/B sentence pairs with mirrored structure. One thing does X, the other does Y, and the two clauses are suspiciously symmetrical.

Symptoms:

  • Two clauses with identical grammatical structure
  • "Where X gives you A, Y gives you B"
  • "One approach [verb]. The other [same verb]."

Examples:

  • ❌ "Where vibecoding gives you speed, spec-driven development gives you correctness."
  • ❌ "One approach trusts the model. The other trusts the process."

Why it's a tell: Real comparisons are messy. Things don't map 1:1 onto neat structural parallels. When they do in prose, it's because the writer manufactured the symmetry.

Instead: Show the comparison through narrative. Tell the story of A failing, then tell the story of B succeeding. Let the reader draw the conclusion.


3. Asyndetic Tricolon with a Kicker

The tell: Three short fragments in sequence, followed by a punchline. "X. Y. Z. And then [dramatic conclusion]."

Symptoms:

  • Three sentence fragments, usually 1-4 words each
  • Followed by a longer sentence starting with "And"
  • Designed to build rhythm toward a reveal

Examples:

  • ❌ "Fast. Cheap. Wrong. And deployed to production."
  • ❌ "No tests. No specs. No way to verify. And 25% of Y Combinator is built this way."

Why it's a tell: The published posts DO use lists of three sometimes. The difference: they occur inside natural paragraphs, not as standalone staccato fragments designed to sound dramatic.

Instead: Embed the list in a flowing sentence.

  • ✅ "No tests. No specs. No way to verify if it's doing what you actually wanted." (Works because it's part of a paragraph about vibecoding's failures, not standing alone as a dramatic fragment.)

4. Choppy Fragment Chains

The tell: Multiple sentence fragments in sequence for "dramatic effect." Each fragment is 1-5 words, usually noun phrases.

Symptoms:

  • Three or more consecutive fragments
  • No verbs, just noun phrases with periods
  • Reads like a movie trailer voiceover

Examples:

  • ❌ "Purple gradients. Chat interface. Zero tests. Pure vibes."
  • ❌ "Same model. Same prompt. Different result."

Why it's a tell: It substitutes rhythm for meaning. Every fragment carries equal weight, which means none of them carry any weight.

Instead: Write actual sentences.

  • ✅ "You get something that looks like an app. Purple gradients, chat interface, the whole AI-generated aesthetic. But underneath? Useless error handling."

5. Symmetrical LLM Patterns

The tell: Any sentence where the two halves mirror each other structurally. The clauses are balanced like a seesaw.

Symptoms:

  • "[Subject A] [verb] [object]. [Subject B] [same verb] [contrasting object]."
  • Chiasmus or antithesis that reads like a fortune cookie
  • Inverted parallelism: "X without Y yields A. Y without X yields B."

Examples:

  • ❌ "The model is smart, but the context is dumb."
  • ❌ "Process without knowledge yields organized hallucinations. Knowledge without process yields correctly spelled chaos."
  • ❌ "Spec-kit handles the process. Tessl provides the knowledge."

Why it's a tell: These read like fortune cookies. The structural balance makes the writer feel clever, but the reader feels lectured.

Instead: Make the point once, directly, without the balancing act.

  • ✅ "Spec-kit will tell your agent how to work, but it has no idea what a Shelly Gen 1 API endpoint actually looks like. That's what tiles are for."

6. Self-Answering Fragment Questions

The tell: A short noun phrase posed as a question, immediately answered by its own punchy fragment. The "question" never actually asks anything.

Symptoms:

  • [Short noun phrase, 2-4 words]? [Short declarative fragment].
  • Two fragments, neither a real sentence
  • The question mark is doing the work of an em-dash

Examples:

  • ❌ "And the UI? No purple gradients."
  • ❌ "The result? A cleaner architecture."
  • ❌ "The best part? It just works."
  • ❌ "The takeaway? Context is everything."
  • ❌ "And the error message? Also hallucinated."

Why it's a tell: It creates fake dramatic tension where none exists. It's a formatting trick pretending to be rhetoric — a setup/punchline couplet disguised as inquiry.

Instead: Use real rhetorical questions that invite the reader to actually think.

  • ✅ "You know what's worse than an agent that hallucinates an API? One that hallucinates the error message too."
  • ✅ "Who hasn't shipped code they were embarrassed by?"

Real rhetorical questions work because the reader pauses to consider them. The self-answering version never invites thought.


7. Parenthetical Em-Dashes

The tell: Paired em-dashes used to set off an aside, where commas or parentheses would do the same job.

Symptoms:

  • "X — [subordinate clause] — Y" structure
  • The aside between the dashes is not dramatic or surprising enough to warrant them
  • Often used for simple relative clauses or appositives

Examples:

  • ❌ "The agent — which had already failed twice — tried again."
  • ❌ "Tessl's CLI — the part most developers interact with first — handles all of this."

Why it's a tell: Paired em-dashes make every aside feel like a dramatic reveal when it's just a subordinate clause. LLMs scatter them everywhere because they pattern-match on "emphasis" without understanding that not everything deserves it.

Instead: Use commas or parentheses.

  • ✅ "The agent, which had already failed twice, tried again."
  • ✅ "Tessl's CLI (the part most developers interact with first) handles all of this."

Note: A single em-dash for a hard break at the end of a clause is fine: "It worked — barely." It's the matched pair acting as fancy commas that's the problem.


8. Excessive Em-Dashes

The tell: More than two em-dashes per section, even when used correctly.

Symptoms:

  • Three or more em-dashes in a paragraph
  • Em-dashes used as default punctuation instead of commas, colons, or periods

Why it's a tell: The published posts use em-dashes, but moderately. One or two per section is fine. Five per paragraph means you're using them as a crutch instead of writing clearer sentences.

Instead: Use commas, colons, semicolons, or periods. The em-dash is a spice, not a staple.


9. Preamble Announcements

The tell: Announcing what the post is about to do before doing it.

Symptoms:

  • "In this post, we'll explore..."
  • "Let's take a look at..."
  • "What follows is..."

Why it's a tell: The TLDR handles the preview. The reader clicked the title. They know what the post is about. Announcing it again is filler.

Instead: Just start. Open with the hook, the story, the confession. The reader doesn't need a table of contents narrated to them.


10. Sycophantic Hedging

The tell: Filler phrases that soften a point without adding information.

Symptoms:

  • "It's worth noting that..."
  • "Interestingly enough..."
  • "To be fair..."
  • "It bears mentioning that..."

Why it's a tell: These are throat-clearing. They signal the writer isn't confident enough to just make the point. LLMs insert them as politeness padding.

Instead: Delete the hedge and start with the actual point.


11. Emojis

Never. Zero. Not even in the TLDR. Not even ironically.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment