Vibe coding is here, and it’s here to stay.

Now that I’ve got your attention, I’ve been using Cursor, one of the most popular AI-enabled IDEs available right now (alongside Windsurf and GitHub Copilot inside of VS Code ) for a little over a month now. It quickly overtook my use of my regular IDE, leading me to do the unthinkable act of removing its shortcut from my Macbook’s dock.

Warning

I’m mostly kidding about vibe coding. There are as many definitions of it as there are people with opinions on it. So let’s just focus on “AI-assisted coding”.

But…why?

First, where I started: for several years I’ve been using VS Code and neovim as my main IDEs, with a strong focus on VS Code. Pretty early on, I started using Sourcegraph’s Cody (which appears to have been superseded by a new offering called Amp) because I liked their strategy for injecting project context and their strong guarantee, even at the free tier, against model providers being able to store code sent to them for future training (unlike Copilot).

It worked really well! At least, for the main use case I had: really good autocomplete that maintained patterns I established elsewhere in the codebase. This was great for my ADHD brain - it was easy to forget those patterns, and really hard to look for them without losing focus on my work. I had less luck generating unit tests and the chat feature mostly went unused.

Then, Claude Code was released. I firmly believe the Claude family is currently the best group of models for coding, and am a big fan of what Anthropic is doing right now. I used it a good bit and had some great results, but I couldn’t get past not seeing the code as it changed. I still use it while I’m already in the terminal, mostly for quick questions and search, but for my main workflows it wasn’t exactly what I needed.

Cursor and Windsurf had been making lots of news, so I decided to set some time to trial at least one. I went with Cursor first and…still haven’t looked back. So let’s start with the good:

The Good#

  • Privacy mode. Similar guarantees against code storage as Sourcegraph’s Cody had.
  • Auto model is chosen for quickness, and works really well out of the box. If it’s not working for you, it’s easy to switch to another model, like Claude 4.
  • Familiar IDE. Because Cursor is a fork of VS Code, your VS Code extensions work with it and it’s really easy to migrate.
  • Writing idiomatic code. I recently finished a longer-term contract (case study coming soon at Stratis Data Labs) in Go, which I know a bit of but had to learn on the fly. Cursor really shined on this project, explaining syntax and Go idioms to me (with sources, when asked), helping me rewrite my code to match the patterns in analogous areas of the codebase, and even correctly answering many “why” questions I had about how Go does things. Now, this is largely thanks to the models underlying Cursor, but their internal prompts, easy-to-use interface, and fast performance really made working with the models a joy.
  • Working tree-style edits. Similar to looking at git diffs in VS Code, whenever the model makes changes, you can review and accept or reject them block-by-block or file-by-file both in the main editor and in the chat window.
  • Are you down with MCP? Because Cursor is, and has built-in support for MCP servers both local and remote.
    • Keep an eye out for my upcoming book, AI Agents with MCP, due in early release sometime in June 2025 from O’Reilly.
  • Pricing. Pricing is pretty straightforward, and I’ve been able to do a lot on the regular $20/mo plan. If you want to work a lot with the big models, you’ll have to provide your own keys (this is called MAX mode).

The Not-So-Good#

  • Model performance can be iffy. Hallucinations are still a thing, but this is a model issue more than it is a Cursor issue.
  • Familiar IDE. I thought this was a “Good”? It is, but because it is a fork of VS Code, there are small quirks that make it feel incomplete, like a cloud sync sign-in button that doesn’t actually work. This is because Microsoft obviously doesn’t want to provide this service to non-MS tools, but the sign-in button being left in gives that feeling of incompleteness.

The Impressions#

Overall, the “not-so-good” things are incredibly minor and easy to overlook, even for a stickler like me. Cursor (and AI-assisted coding generally) has allowed me to step back a bit from worrying about syntax at the low level and focus more on abstract problem solving - that thing that we software developers are supposed to specialize in but often get stuck on the syntax. I still have to inspect the output, just as when I make a PR or am reviewing a colleague’s, and it’s still important to read through and understand the code (the AI can also help with that!), but there are fewer impedance mismatches on the journey from thought to code.

I personally don’t find it as much of a help if I already know the codebase inside-out. I work on a lot of 0-1 projects, and introducing it to one of those ends up limiting the areas it can help me. Mostly those areas are refreshing myself on older bits of the codebase, reviewing patterns, seeing why things were done, or writing tests. Still very helpful, but not nearly to the extent as it is working on a new codebase or in an unfamiliar language.

You might find it less fun if the act of typing out your code and making it look or function beautifully is the main source of your enjoyment for this work. Don’t get me wrong, it is very enjoyable, but from a utilitarian standpoint, solving problems for your customers is the guiding star.

I also notice that I’ll sometimes offload basic tasks to the AI, relying on it over my own gut and knowledge when I don’t need to. It’s important to sidestep this: write the code then ask for verification from the model. It’s just too easy to offload that important step of building confidence in your gut decisions, and that can be dangerous.