AI-Assisted Development

Published: July 09, 2025

Just a few months ago I first learnt about Cursor. Before then, I'd used ChatGPT a handful of times to debug some issue I was having. I'd found reasonable success in explaining the goal and some context, pasting in the error message from the console or the browser, and letting ChatGPT give me a few solutions to try. But Cursor changed the game entirely.

ChatGPT, at least the chat GUI that I'd been using, was just a peripheral development tool. It was there for when I needed to get unstuck, but for the majority of my development work, I was just doing what I had always done, and coded with VS Code or RubyMine, depending on the project.

Cursor, on the other hand, shifted my workflow entirely.

It looks the same as VS Code, but the chat window on the right-hand side has become a very important piece of real estate in the application. I now spend a lot of time writing and reading in there, and less time looking at the files and the code, and much much less time actually writing code. That's not to say I don't do any coding at all. For one thing, Cursor - and AI in general - has its limits. It can't do everything and sometimes doesn't understand well enough what you're trying to accomplish (more on this later), and other times it's just simple enough that using AI wouldn't really be better or faster. If it takes me just as long to type out the prompt as it does to make the change, of course it makes no sense to use it.

However, using Cursor is still skilled work. I don't believe non-developers could use it as effectively, and there are skills to using the tool that need to honed and developed. In this, I think most of us are still trying to figure out our ideal workflow and use cases for AI-assisted software development.

Here are my current rules and guidelines for working with Cursor, both in my day job and on my side projects.

1. Improve Understanding

While Cursor does a great job at writing code, it also does a great job of explaining code. This might be less important in my side projects, where I'm the only author, but on large projects with many authors, it's a valuable asset to diving deep into the codebase and getting a more profound understanding of what's going on.

2. Context Matters

3. Craft Prompts

Prompts can sometimes be short, but I find my best prompts are when I've taken the time to be as detailed as possible.

4. Don't Be Lazy

It's easy to accept everything without any review.

5. Document Everything

Working with larger features or projects, I've sometimes had Google docs that contain a detailed description of the feature I'm trying to build. Often they come from someone else and without Cursor, I would first have to read through it carefully and understand the requirements and then translate that into code. I still have to do the first step. How else would I catch edge cases and undefined behaviour that I need to gain clarity on before starting to work? But once that's done, exporting the doc as a .md file and giving that to Cursor as a context file is incredibly useful. It can obviously parse and understand a document far more quickly than I ever could, but I still like to have it give me an explanation of what it's going to do so that I can verify it before it starts.

I've also tried having it give me a progress document with the work that's happening. In a similar way I would communicate with my clients about the status of a project - a high-level overview with few technical details and a broad status update. I like this approach a lot, especially as it can update the doc as we go along, we can take pauses of days or weeks and still come back to where we were before with little effort, and we can even use this for client communication if necessary. There is a big upside for me using these Cursor-generated documents.

7. Check and Test

It's tempted to get carried away with the speed of development when Cursor is sitting behind the wheel, but it's important to keep many other development processes the same. When making changes, it's still great to check everything in the browser, as I would when developing something manually. Even as confidence in the code that Cursor writes grows, I still have to take a step back and make sure to test everything properly before it can go anywhere near production. I also like to have Cursor write my automated tests for me. These still require the same level of rigour when it comes to reviewing, as they are crucial parts of the application in terms of preventing regressions or bugs.

8. Slow Down

Don't just accept everything.

This website uses cookies to enhance site navigation, analyse site usage and provide you with the best user experience.
Privacy Policy