AI Has Changed How I Write Software
If you're still thinking of AI coding as “ask a chatbot for some code and paste the answer into VS Code,” you're leaving most of the value on the table.
The useful shift is not that AI can write a function. It is that modern coding agents can understand a repository, modify multiple files, run commands, inspect errors, write tests, and iterate on a solution.
Today, the tools I would seriously consider include Cursor, Claude Code, GitHub Copilot, OpenAI Codex, Windsurf, and Replit. They overlap, but they are not interchangeable. The right choice depends on whether you need an AI-first editor, a terminal-based coding agent, integrated IDE assistance, or a fast prototyping environment.
My advice is simple: don't collect AI tools. Build an AI coding workflow.

1. Cursor — My Daily Driver
If I had to recommend one AI coding environment to a developer who wants to get started quickly, Cursor would be near the top of my list.
Cursor is an AI-first code editor built around the VS Code ecosystem. The important part isn't simply autocomplete. Its real advantage is the ability to work with context from the project and make changes across multiple files.
I use it for:
- Writing new features
- Refactoring existing code
- Understanding unfamiliar repositories
- Finding relationships between components
- Generating boilerplate
- Fixing relatively contained bugs
- Making multi-file changes
Instead of asking:
“Write me a login page.”
I give it the project context and say what the application needs to accomplish:
“Add email/password authentication to this existing Next.js application. Follow the current component structure, reuse the existing UI components, keep authentication logic separate from presentation, and don't modify unrelated files. After implementation, explain which files changed and what I should test.”
That difference matters. Good AI coding is less about clever prompts and more about giving the model a clearly defined engineering task.
2. Claude Code — For the Hard Problems
When a task becomes too large or complicated for a normal editor interaction, I reach for Claude Code.
Claude Code is terminal-first. That changes the workflow. Instead of merely suggesting code, it can work through a repository, inspect files, execute commands, run tests, investigate failures, and continue iterating.
This is where I use it:
- Large refactoring projects
- Debugging complicated applications
- Understanding unfamiliar codebases
- Updating many files consistently
- Writing and fixing test suites
- Database and API migrations
- Terminal, Bash, configuration and infrastructure work
For example, I might give it a task like:
“Find all API calls using the old authentication pattern. Explain the migration strategy first. Then update them to the new pattern, run the relevant tests, and stop if you find a behavior change that requires a design decision.”
That last sentence is important. I don't want an agent blindly changing everything it can find. I want it to know when to stop.
3. GitHub Copilot — The Low-Friction Choice
GitHub Copilot remains a very practical option, especially if your team already lives inside GitHub and an established IDE.
I wouldn't dismiss Copilot simply because newer agentic tools are getting more attention. Its biggest advantage is friction: developers can add AI assistance without completely changing their development environment.
It is particularly useful for:
- Inline code completion
- Small functions
- Writing repetitive code
- Explaining code
- Generating tests
- GitHub-oriented development workflows
- Team environments already standardized around GitHub
For a large development team, changing everyone's editor can create unnecessary operational overhead. If the team already uses GitHub heavily, Copilot can be the easier organizational choice.
That's an important lesson: the technically most impressive AI tool isn't automatically the best business decision.
4. OpenAI Codex — Another Agent in the Stack
OpenAI Codex is worth considering when you want an AI agent to handle coding tasks rather than simply generate snippets.
I think about it as another member of the engineering team rather than another autocomplete box.
A useful workflow is to give it a clearly scoped issue:
“Investigate why this API occasionally returns a 500 error. Reproduce the problem if possible, identify the root cause, implement the smallest safe fix, add a regression test, and summarize the changes.”
The important word is reproduce. Don't ask AI to guess at a bug when you can ask it to investigate the actual behavior.
That is one of the biggest differences between useful AI-assisted development and traditional chatbot-based coding.
5. Windsurf — A Strong Alternative
Windsurf is another AI-native development environment worth testing if you want an alternative to Cursor.
Its appeal is similar: instead of treating AI as a separate website, the AI becomes part of the development environment and can work with a larger amount of project context.
I would not recommend spending a week comparing tiny differences between AI editors before actually building something. Pick one, use it on a real project for several days, and evaluate:
- How often does it understand your existing architecture?
- How often does it modify the wrong files?
- How much manual cleanup do you need?
- Does it respect your coding conventions?
- Does it help you debug, or merely generate more code?
Those measurements are much more useful than benchmark screenshots.
6. Replit — Good for Rapid Prototyping
Replit makes sense for a different type of developer.
If I want to quickly turn an idea into a working prototype without spending much time configuring a local environment, a browser-based AI development environment can be extremely useful.
For example:
- Internal tools
- Simple SaaS prototypes
- Landing pages
- Small databases and CRUD applications
- Proof-of-concept applications
- Experiments
I wouldn't use the same workflow for every production system. A prototype and a long-lived production application have very different requirements around architecture, testing, security, observability and deployment.
That's where many beginners make a mistake: they confuse “the AI successfully generated an application” with “the application is production-ready.”
How I Combine These Tools
The biggest mistake I see is trying to find one AI tool that does everything.
I prefer a layered workflow.
Step 1: Plan the Feature
I start with a capable reasoning model or coding agent and describe the problem, existing architecture, constraints and expected behavior.
I don't immediately ask for code.
First I want:
- The likely implementation approach
- Files that need to change
- Potential risks
- Testing requirements
- Questions that need human decisions
Step 2: Implement in Cursor or Another AI IDE
Once the approach is clear, I move into the code editor.
This is where Cursor or GitHub Copilot can be excellent for implementation, navigation, inline changes and day-to-day coding.
I prefer small, reviewable changes rather than asking AI to rewrite an entire application in one shot.
Step 3: Give Large Tasks to an Agent
If the task involves dozens of files, complicated debugging or repetitive repository-wide changes, I switch to Claude Code or another capable coding agent.
The agent can inspect the repository, make changes and run tests while I focus on the engineering decision rather than manually editing every file.
Step 4: Let Tests Judge the Code
This is non-negotiable.
Never assume AI-generated code is correct because it looks professional.
Run:
- Unit tests
- Integration tests
- Type checks
- Linting
- Build processes
- Security checks where appropriate
Then give the actual failure back to the AI.
“The test failed here. Investigate the root cause. Don't change the test unless the test itself is incorrect.”
This creates a feedback loop:
AI writes → software executes → test exposes reality → AI investigates → developer reviews.
That loop is far more reliable than asking AI to produce a perfect answer on the first attempt.
How to Get Much Better Results From AI
The quality of your instructions matters, but there is a bigger factor: the quality of the engineering context.
Before asking AI to modify a serious project, give it clear information about:
- Programming language
- Framework
- Project structure
- Database architecture
- API conventions
- Coding standards
- Testing strategy
- Deployment environment
- Files it should not touch
For example, don't say:
“Improve this website.”
Say:
“Improve the dashboard loading performance. Preserve the current UI and API behavior. First identify the three most likely bottlenecks. Do not rewrite the application architecture. Make the smallest changes that produce measurable improvement, then run the production build and report the results.”
That's much closer to how I would delegate work to a junior engineer.
Don't Let AI Become a Security Liability
There is a second side to AI-assisted development that developers sometimes ignore: the AI is now interacting with real code, credentials, repositories and development environments.
That means permissions matter.
Don't casually give an agent access to production credentials, customer data or unrestricted infrastructure just because it can execute commands.
My rule is simple:
Give an AI agent enough access to do its job, but never more access than the job requires.
The Setup I Would Recommend
If I were setting up a modern development workflow today, I'd start with this:
- Cursor: primary AI development environment
- Claude Code: complex debugging, refactoring and repository-wide tasks
- GitHub: source control, pull requests and collaboration
- GitHub Copilot: optional if the team wants integrated completion and GitHub-native assistance
- OpenAI Codex: another agent option for delegated coding tasks
- Automated tests: the final authority on whether the code actually works
You don't need all of them. In fact, I would advise against paying for all of them at the beginning.
My Recommendation by Developer Type
| Developer | My First Choice | Why |
|---|---|---|
| Beginner | Cursor | Easy entry into AI-assisted development |
| Professional developer | Cursor + Claude Code | Daily editing plus complex agent work |
| GitHub-heavy team | GitHub Copilot | Strong integration with existing workflows |
| Terminal-focused developer | Claude Code | Excellent fit for CLI-based development |
| Rapid prototyping | Replit | Fast path from idea to working prototype |
| Developer looking for an alternative AI IDE | Windsurf | Strong AI-native development workflow |
The Part AI Cannot Replace
Here's the uncomfortable truth: AI can make a weak developer faster at producing bad software.
If you don't understand databases, AI can generate a bad database design very quickly.
If you don't understand security, AI can produce an insecure authentication system that looks perfectly reasonable.
If you don't understand software architecture, AI can create thousands of lines of unnecessary abstraction.
And if you don't understand the business requirement, the most sophisticated coding agent in the world can efficiently build the wrong product.
AI is extremely good at reducing the cost of implementation. It is much less reliable at deciding what should be built in the first place.
That's why I don't measure an AI coding tool by how many lines of code it generates.
I measure it by how much useful software I can safely ship.
Final Takeaway
If you're starting today, don't install ten AI coding tools and spend a month comparing them.
Pick Cursor as your primary environment. Learn how to give it real project context. Add Claude Code when you start dealing with larger refactors, debugging and autonomous tasks. Use GitHub Copilot if its integration with your existing workflow makes more sense. Keep Codex, Windsurf and Replit in your toolbox for situations where their particular workflow is a better fit.
Most importantly, keep a human in the loop for architecture, security, product decisions and final review.
The winning developer in the AI era isn't the person who writes the most code.
It's the person who can use AI to turn a good engineering decision into working software faster—and still knows when the AI is wrong.
AI Tools Used in This Workflow
- Cursor
- Claude Code
- GitHub Copilot
- OpenAI Codex
- Windsurf
- Replit
- GitHub
Comments