Vibe code summer: what we learned when AI IDEs went mainstream

A sketch of a plant on a fireplace mantle.

Here in mid-2025, AI IDEs feel magical. Describe a feature, accept the suggestion, and watch the code fly. Boilerplate vanishes. Flow state comes easy. But, like brat summer, the high might already be behind us — and we’re only just noticing.

Teams are starting to wake up to the cost: slower reviews, subtle bugs, and code that looked polished but hid structural debt.

Six dark patterns are showing up again and again. Here’s what we’re seeing.

The promise

But let’s start with the successes. AI tools have delivered clear benefits:

  • Faster prototypes. Frankly, it’s a joy to muck around with an LLM and have something up and running in minutes. A GitHub study reported that Copilot users completed tasks up to 55 percent faster than a control group.1
  • Immediate context for unfamiliar libraries. Instead of scouring docs, you can just ask the IDE and get runnable snippets in seconds.2
  • When it works, less task-switching, and more design thinking. Many users say AI IDEs let them stay “in flow” and spend mental energy on architecture, not syntax.3

Leaders liked the return on investment, too. Install a plugin, watch velocity rise!

Where it cracked

1. Prediction isn’t planning

When the model writes code from scratch, it decides line-by-line with no bigger picture in mind — so architectural slips appear before you even try running the code. Large Language Models are designed to predict the next token in a token stream. They don’t step back to design the control flow. That’s how you get contradictions like this Python I vibe-coded using Cursor:

client = None               # global placeholder

@app.command()
def convert(...):
    global client
    ...
    client = openai.OpenAI(api_key=key)   # client becomes an OpenAI object

@app.command()
def interactive():
    ...
    if not os.getenv("OPENAI_API_KEY"):
        api_key = Prompt.ask("Enter your OpenAI API key", password=True)
        client.api_key = api_key          # assumes client is already an object
    ...
    convert(image_path, diagram_type)

What happened: The model wrote convert() first, solving “how do I create the OpenAI client?” Later it wrote interactive(), saw a missing branch for manual API-key entry, and predicted a quick fix: client.api_key = api_key. It never stopped to ask whether client had been initialized yet — or whether passing the key to convert() would be cleaner.

Result: if a user runs interactive() before convert(), client is still None and the assignment crashes with AttributeError: 'NoneType' object has no attribute 'api_key'.

A human would plan the flow (collect key → create client → reuse it). The model just kept predicting plausible next lines until the file looked complete.

The right approach:

def get_client():
    """Get or create OpenAI client with proper key handling."""
    if not hasattr(get_client, '_client'):
        api_key = os.getenv("OPENAI_API_KEY")
        if not api_key:
            api_key = Prompt.ask("Enter your OpenAI API key", password=True)
        get_client._client = openai.OpenAI(api_key=api_key)
    return get_client._client

@app.command()
def convert(...):
    client = get_client()
    # ... rest of convert logic

@app.command()
def interactive():
    client = get_client()
    # ... rest of interactive logic

This avoids the global altogether, handles fallback, and ensures the client is only created once.

The same “predict, don’t plan” habit shows up as duplicate helpers. The assistant loves to wrap a one-liner in a fresh function — then generate the same wrapper again in another file:

# utils/size.py
def file_size_megabytes(path):
    return os.path.getsize(path) / (1024 * 1024)

# handlers/uploader.py  (later, auto-generated)
def file_size_megabytes(path):
    return os.path.getsize(path) / (1024 * 1024)

Each copy looks harmless – but multiplied across dozens of helpers, the codebase bloats fast.

2. Reactive patch loops

After you run the code, every new crash or error spawns another micro-patch. Instead of rethinking structure, the AI layers on quick fixes — turning small bugs into sedimentary debt.

Common signs:

  • NameError → quick fix → new NameError loops
  • Silent try/except wrappers that mask the real issue
  • Growing layers of fixes instead of re-thinking design

Some developers have responded by throttling the assistant itself; Tietz-Sokolskaya, for example, keeps Copilot disabled by default and only summons it on a hot-key – avoiding the temptation to stack patch on patch.4

3. Invisible gaps

As any developer will tell you, code can look complete — until you run it.

Here’s a real-world example of something an LLM hallucinated and forgot to define:

if document_type not in VALID_DOCUMENT_TYPES:
    ...

That could be just fine, except that VALID_DOCUMENT_TYPES was never defined. Similar gaps appear as stubbed buttons, orphaned tests, or dead endpoints. Research analyzing 153 million AI written lines of code found concerning trends: AI-assisted commits had nearly double the churn of pre-AI baselines, and copy-pasted code rose sharply. Both are warning signs for long-term maintainability.5

Security is the same problem with higher stakes. LLMs often assume the happy path:

def convert_image_to_base64(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")

No file-size limit, no MIME check, no error handling. Drop that into a web service and you have at minimum an easy denial-of-service vector. Unfortunately, this isn’t just a one-off: A 2024 CSET study found that nearly half of code snippets generated by five leading LLMs contained bugs, many with security implications.6

4. Privacy promises shift

Most AI IDEs transmit at least some of your code to a cloud service for context, and their retention policies can change with little notice.

Early in 2025 Cursor, a popular AI IDE, offered a paid “Privacy Mode” that promised zero server-side storage. In June it introduced three distinct privacy tiers: the default mode (storage + training), “Privacy Mode with Storage” (stores snippets for features but vows no training), and “Full Privacy Mode” (no storage, no training). Existing users were automatically migrated to “Privacy Mode with Storage” unless they explicitly opted back into a privacy tier. The original zero-storage tier is now branded “Privacy (Legacy),” with several new features disabled.78

Takeaway: treat privacy features as living policies, not fixed contracts. Re-check them after every update. Consider what security guarantees your code needs, what data you are transmitting, and what tools are appropriate for your data.

5. Tooling drift

As usage surged, the underlying models and infrastructure of AI IDEs have struggled to keep up:

  • Latency crept in
  • Queues added, slowing responses
  • Features regressed, moving the best models to pay-per-use tiers

Each slowdown or off-target suggestion chips away at focus; under sustained load, those small frictions compound into hours lost re-prompting, waiting, or rewriting bad code.9

6. Erosion of developer choice

The sixth pattern isn’t technical: enforced AI workflows can erode individual autonomy.

In practice, many elite engineers – the mentors who raise everyone’s game – use an eclectic mix of tools: VS Code, Emacs, even Eclipse. I know, the horror. Their productivity comes from choosing what fits their mental model, not from following a mandate.

Yet some orgs now fold “AI usage” into performance metrics, measuring how often developers invoke Copilot or Cursor and equating higher commit counts with better code.10 That pressure risks sidelining top performers who deliver excellent results through workflows they control. Autonomy breeds innovation; mandating one IDE can dampen it.

Lessons learned

  • Keep exploration separate from infrastructure; sketches are cheap, foundations are not.
  • Centralize shared logic early to avoid duplication debt.
  • Treat generated output as untrusted: validate inputs, confirm symbols exist, write tests.
  • Schedule design reviews to stop patch-loop development.
  • Monitor cloud-IDE policy updates; privacy terms can shift overnight.
  • Developers are smart. Let them pick their tools. Don’t push them into patterns they don’t want.

Looking ahead

The next wave of AI coding will be less about AI taking the wheel, and more about context-aware assistance — smaller, reliable wins that respect workflow boundaries.

Developer needPossible IDE response
Prototype vs. production modeToggle or branch rule that gates suggestions behind lint, tests, and security checks in production mode
Targeted, explainable guidanceFlag unreachable code or oversized functions and explain why, instead of rewriting entire files
Automatic documentationHover-to-see plain-language summaries; generate docstrings in the project’s primary language
Guided fixesWhen tests fail, propose concrete patches and explain trade-offs rather than silent edits
Codebase-aware contextSuggest code that follows patterns already present in the repo, reducing drift
Test-integrated developmentUse automatic testing to rein in LLMs suggestions, making test feedback part of the development flow
Bundled SASTIntegrate Semgrep, CodeQL, or similar tools to automatically scan AI-generated code for security issues before suggestions are accepted
Privacy-first defaultsLocal inference or selective redaction so developers don’t trade velocity for risk

Focus shifts from replacing keystrokes to amplifying judgment-fast experiments when you need them, disciplined edits when you don’t.

Conclusion

AI-powered coding is no longer a novelty. But as these tools go mainstream, so do their trade-offs.

The promise was speed, and we got it. What we’re losing – sometimes quietly – is structure, autonomy, and trust. The challenge now isn’t building smarter assistants. It’s creating systems that support human judgment, not sideline it.

This isn’t about resisting change. It’s about making space for nuance: fast code when it helps, deliberate code when it matters, and the developer choice to tell the difference.


  1. Peng, Sida, Eirini Kalliamvakou, Peter Cihon, and Mert Demirer. “The Impact of AI on Developer Productivity: Evidence from GitHub Copilot.” arXiv preprint arXiv:2302.06590 (2023). https://arxiv.org/abs/2302.06590↩︎

  2. Shihab, Md Istiak Hossain, et al. “The Effects of GitHub Copilot on Computing Students’ Programming Effectiveness, Efficiency, and Processes in Brownfield Programming Tasks.” arXiv preprint arXiv:2506.10051 (2025). https://arxiv.org/abs/2506.10051↩︎

  3. Shani, Inbal. “Survey Reveals AI’s Impact on the Developer Experience.” GitHub Blog, 13 June 2023, https://github.blog/research/survey-reveals-ais-impact-on-the-developer-experience/↩︎

  4. Tietz-Sokolskaya, Nicole. “Changing My Relationship with GitHub Copilot.” technically a blog, 28 Aug. 2023, https://www.ntietz.com/blog/changing-my-relationship-with-github-copilot/↩︎

  5. Harding, William, and Matthew Kloster. “Coding on Copilot: 2023 Data Shows Downward Pressure on Code Quality.” GitClear Research Report, 16 Jan. 2024. https://www.gitclear.com/coding_on_copilot_data_shows_ais_downward_pressure_on_code_quality↩︎

  6. Ji, Jessica, Jenny Jun, Maggie Wu, and Rebecca Gelles. “Cybersecurity Risks of AI-Generated Code.” Center for Security and Emerging Technology, November 2024. https://cset.georgetown.edu/publication/cybersecurity-risks-of-ai-generated-code/↩︎

  7. Aaron Bacchi and T1000. “Details on Privacy Mode with storage — how it’s different than Privacy Mode (legacy).” Cursor Community Forum, 23 June 2025, https://forum.cursor.com/t/details-on-privacy-mode-with-storage-how-its-different-than-privacy-mode-legacy/108044↩︎

  8. “Cursor AI Data Privacy 2025.” ai-cursor.com, June 2025, https://ai-cursor.com/data-privacy/↩︎

  9. Kalliamvakou, Eirini. “Yes, Good DevEx Increases Productivity. Here Is the Data.” GitHub Blog, 23 Jan. 2024, https://github.blog/research/good-devex-increases-productivity/↩︎

  10. Stewart, Ashley. “Microsoft pushes staff to use internal AI tools more, and may consider this in reviews. ‘Using AI is no longer optional.’” Business Insider, 27 June 2025, https://www.businessinsider.com/microsoft-internal-memo-using-ai-no-longer-optional-github-copilot-2025-6↩︎

Back to top