10 Patterns ChatGPT Uses When Writing Code (And How to Spot Them)

December 9th, 20258 min read

We’ve all seen it. That perfectly formatted, slightly soulless, oddly enthusiastic code that screams "I was born in a server farm." ChatGPT and Claude are amazing tools, but they have a distinct accent.

Whether you're a senior dev reviewing PRs or a student trying to verify if your teammate actually did the work, spotting these patterns is a superpower. Here are the 10 most common "tells" of AI-generated code.

1. The "Data" Obsession

AI is terrified of being wrong, so it defaults to the most generic variable names possible. The worst offender? data.

🤖 ChatGPT

const processData = (data) => {
  return data.map(item => item.value);
}

👨‍💻 Human

const extractPrices = (cartItems) => {
  return cartItems.map(item => item.price);
}

2. The "Tutorial" Comments

AI writes comments like it's teaching a beginner's Python course. It explains syntax instead of logic.

// Define a function to calculate the sum
function calculateSum(a, b) {
  // Return the result of a plus b
  return a + b;
}

Thanks, ChatGPT. I forgot what "plus" meant.

3. The Defensive "Try-Catch" Wrapper

AI is risk-averse. It loves to wrap everything in a try-catch block, often swallowing errors with a generic console log.

try {
  // ... code ...
} catch (error) {
  console.error("An error occurred:", error);
}

4. The "Result" Variable

Similar to "data", AI loves to assign calculations to a variable named result before returning it, even when it's not needed.

🤖 ChatGPT

const result = x * y;
return result;

👨‍💻 Human

return x * y;

5. The "Item" Iterator

In loops, AI almost always uses item. Humans usually pick something specific like user, product, or even just u or p.

6. Perfect Grammar in Strings

Human error messages are often short or lowercase: throw new Error("user not found"). AI writes proper sentences: throw new Error("The specified user could not be found in the database.").

7. The "Utility" Class

AI loves to group unrelated functions into a Utility or Helper class. It struggles with domain-driven design nuances.

8. Over-Destructuring

AI will destructure props at the top of a function even if they are only used once. It follows "best practices" blindly, ignoring context.

9. The "Placeholder" Logic

AI often leaves comments like // TODO: Implement actual logic here or uses mock data structures that look suspiciously perfect (e.g., "John Doe", "123 Main St").

10. Lack of "Hacks"

This is the biggest tell. AI code is too clean. It rarely uses // @ts-ignore, any, or clever one-liners. It writes code like a textbook, not like a developer on a deadline.

Why AI Falls Into These Patterns

LLMs are trained on the average of the internet. They are statistically likely to choose the most common path. The most common path is often the "tutorial" path—generic, safe, and explanatory.

Humans, on the other hand, write code with intent. We take shortcuts. We use slang in comments. We name variables after inside jokes. We have a "vibe."

Does Your Code Pass the Vibe Check?

Paste your snippet into our engine and see if it flags these patterns.

Analyze Your Code's Vibe →
Vibe Code Detector