essyad
AuthorsQuotesAbout← Portfolio
AuthorsQuotesAbout← Portfolio
Language
© 2026
RSSPortfolioTwitterGitHub
← Writing

AI Code Assistants: The Art of Lazy Engineering

Why Your AI Just Slapped `any` on Everything and Called It a Day*

Ahmed essyad
ByAhmed essyadFebruary 20265 min read
—
✳

You asked the AI to fix your TypeScript errors. It did. Technically.

// Before: Error - Type 'string' is not assignable to type 'number'
const result: number = getData();

// After: AI's "fix"
const result: any = getData(); //  No more errors!

Congratulations. You now have working code with zero type safety. The AI didn't fix your problem — it just made TypeScript shut up.

✳

The Greatest Hits of AI Laziness

1. The any Epidemic

// You: "Fix the type errors"
// AI: "Say no more"

function processUser(user: any): any {
  return user.whatever.the.fuck.you.want; // TypeScript: "Looks good to me!"
}

Why bother understanding your data structure when you can just... not?

2. The ESLint Silencer

// You: "Fix the lint warnings"
// AI: "I got you fam"

// eslint-disable-next-line react-hooks/exhaustive-deps
useEffect(() => {
  fetchData(userId visibleItems, currentPage, filterSettings);
}, []); // Missing 47 dependencies? Never heard of them.

The warning exists for a reason. The AI's solution? Pretend the reason doesn't exist.

3. The CI/CD "Just Keep Going" Strategy

# You: "The pipeline is failing, fix it"
# AI: "Easy fix"

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Run tests
        run: pnpm test
        continue-on-error: true  # Tests failing? Just ignore them lol
      
      - name: Lint
        run: pnpm lint
        continue-on-error: true  # 847 warnings? Who cares
      
      - name: Type check
        run: pnpm typecheck
        continue-on-error: true  # TypeScript is just a suggestion anyway
      
      - name: Deploy to production
        run: ./deploy.sh  # Ship it! What could go wrong?

The pipeline is green!

The tests are failing, the linter is screaming, TypeScript is having a mental breakdown — but hey, green checkmark.

Your CI/CD now has the same energy as a doctor who marks every patient as "healthy" regardless of symptoms. Technically no red flags. Practically, everyone is dying.

7. The @ts-ignore Carpet Bomb

// @ts-ignore
const data = response.body.data.users[0].profile.settings.preferences;
// @ts-ignore  
const processed = transform(data);
// @ts-ignore
return formatOutput(processed);

When in doubt, ignore everything. Future you will definitely not regret this.

5. The "Everything Is Optional" Interface

// You: "Fix the type error for BeforeInstallPromptEvent"
// AI: "I'll just make everything optional, problem solved"

interface BeforeInstallPromptEvent extends Event {
  prompt?: () => Promise<void>;
  userChoice?: Promise<{ outcome: 'accepted' | 'dismissed' }>;
  preventDefault?: () => void;
}

Ah yes, the BeforeInstallPromptEvent — an event where prompt() may or may not exist. The method that is literally the entire point of this event is now optional.

That's like:

interface Human {
  breathe?: () => void;  // Breathing is optional
  heart?: Heart;         // Some humans have hearts, some don't
}

The AI couldn't figure out the proper type, so it just made everything optional. Now TypeScript is happy, and you'll get undefined is not a function in production.

What it should be:

interface BeforeInstallPromptEvent extends Event {
  prompt: () => Promise<void>;
  userChoice: Promise<{ outcome: 'accepted' | 'dismissed'; platform: string }>;
}

No question marks. These properties WILL exist. That's the whole point of typing them.

6. The "Non-Null Assertion" Addiction

// AI's favorite punctuation mark: !

const user = getUser()!;
const email = user.contact!.email!;
const domain = email.split('@')[1]!.toLowerCase()!;

// Runtime: "Actually, that was null. Enjoy your crash."

The ! operator: for when you want to lie to TypeScript AND yourself.

✳

Why Does AI Do This?

Simple: AI optimizes for "no red squiggles", not for "good code."

When you say "fix the errors," the AI hears "make the errors disappear." These are not the same thing.

It's like telling someone to clean your room and they shove everything under the bed. Technically clean. Practically a disaster waiting to happen.

✳

The Real Cost

That any type the AI just added? Here's what you lost:

  • Autocomplete — Gone. TypeScript has no idea what properties exist.
  • Refactoring safety — Good luck renaming a property across your codebase.
  • Documentation — The type WAS the documentation. Now it's just "something, idk."
  • Bug prevention — TypeScript can't catch errors on types it doesn't know.
// With proper types
user.emial // Error: Did you mean 'email'?

// With any
user.emial //  TypeScript: "Seems legit"
// Runtime: undefined
// You: debugging for 3 hours
✳

How to Stop the Madness

Be Specific in Your Prompts

Bad:

"Fix the type errors"

Good:

"Fix the type errors without using any, @ts-ignore, or eslint-disable. Actually type the data correctly."

Call Out the Bullshit

When the AI slaps any on something, push back:

"Don't use any. Create a proper interface for this data structure."

Review the Diff

Before accepting AI changes, check for:

  • any types appearing
  • // @ts-ignore comments
  • // eslint-disable comments
  • Non-null assertions (!) everywhere
  • continue-on-error: true in CI/CD pipelines
  • || true appended to shell commands

If you see these, reject and try again.

✳

The Irony

AI is supposed to make us more productive. Instead, it sometimes creates technical debt faster than any human could.

A junior developer who properly types a function is doing better work than an AI that any-types everything in sight.

At least the junior is learning. The AI just keeps making the same lazy choices, over and over, with complete confidence.

✳

Conclusion

AI code assistants are tools. Powerful tools. But they're also tools that will absolutely cut corners if you let them.

They don't understand your codebase. They don't care about maintainability. They don't think about the developer who has to debug this at 2 AM six months from now.

That developer is probably you.

So next time your AI "fixes" a type error with any, remember: it didn't fix anything. It just hid the problem behind a keyword that means "I give up."

Don't let the robots win. Demand proper types.

✳

Written by a developer who has mass-reverted one too many AI "fixes."

Ahmed essyad

Ahmed essyad

the owner of this space

A nerd? Yeah, the typical kind—nah, not really.

View all articles by Ahmed essyad→

Comments

If this resonated

I write essays like this monthly.

Continue reading

← Previous

RAG vs Fine-Tuning: Just Write a Prompt First

Next →

Spent Hours Fighting Mermaid SVG → PNG Export (Missing Text Nightmare)