Content
Six months back, I was stressing about what "real programmers" might think of my approach. But now, I see that we’re all just trying to build stuff that actually works. I’m solid with R programming and have dabbled in Laravel and front-end things, but mastering all these modern web frameworks? Honestly, it’s not worth my limited time. I’d rather focus on building and marketing products that real people find useful. Being efficient doesn’t mean cutting corners on quality—it just means finding different ways to get there.
I wanted to ship production-ready software without spending years mastering every new framework. Over time, I found ten key practices that helped me speed up quality code delivery. First up, always make a plan when tackling complex work. I use Cursor’s Plan mode with Sonnet 4.5 because it asks smart questions before jumping into code. That really helped me settle on the right tech stack (Next.js 15, TypeScript, Tailwind CSS) and avoid expensive rewrites later. My flow goes: think in Chat mode, plan in Plan mode, and then execute in Composer.
Another game changer was using Claude Code to keep me honest. I installed it to critique my project from a fresh angle—checking architecture, security, code quality, and test coverage. Asking for grades and recommendations meant I had a clear improvement roadmap saved as markdown files, which I then turned into GitHub Issues. Getting a second pair of eyes, even if AI, really matters.
For actual coding, I switched to Composer 1 since it’s lightning fast, and the code quality difference compared to Sonnet 4.5 is barely noticeable. I plan thoughtfully with Sonnet 4.5 but execute most work in Composer to save time. I also start projects in what I know best—in my case, building my latest app, Mindarin, as an R package first. This means I can give very specific directions based on my data analytics background and reach an MVP super fast. Then I convert it to Next.js. Starting familiar helps me craft better prompts and iterate quicker.
Tests are a must from the start. I use test-driven development for every feature, running hundreds of tests (unit, component, hook, E2E), most of which Cursor writes. Tests aren’t overhead—they’re living documentation and prevent the AI from breaking working features. When you ship fast, tests act like guardrails.
Version control alone isn’t enough; the whole GitHub ecosystem is crucial. GitHub Actions run tests in parallel catching regressions early. Issues become a prioritized roadmap, which Cursor can even generate via GitHub CLI after planning conversations. Projects organize those Issues by priority so I always know what to tackle next.
I learned to always ask questions in Ask mode rather than brainstorming in Agent mode. Ask mode helps me think through problems without the AI prematurely coding. It’s like being the architect before the builders start working. Debugging doesn’t slow me down anymore either—I push to main dozens of times a day, and most CI runs fail at first. But Cursor fixes stuff fast, especially when I feed it actual failure logs instead of random web copy-pasting.
I stopped writing documentation manually altogether. Cursor now writes my commit messages, README files, and inline docs. That saves me tons of time and lets me focus on building features users actually want. And lastly, speaking my thoughts out loud improved prompt quality. Cursor’s voice mode is good, but I prefer superwhisper—it nails my speech first try and filters out filler words, making me explain context and edge cases better.
These ten habits have taken me from copy-pasting ChatGPT answers to actually shipping real apps. I’m still learning, though, and would love to hear from folks who’ve been at this longer, especially what changes after the first year of this vibe coding approach.