I’ve seen engineers say “AI doesn’t work well” and simultaneously be giving Claude Code prompts like “fix this.” If your task description to the agent wouldn’t be good enough for a human engineer, it’s not going to be good enough for an agent.
Using agents is work! They can dramatically speed you up but you need to make use of them well.
Building an intuition for what an agent will do well at and where it will struggle is critical.
2. Get clear on what you want to build
Do you want to modify a React button to update on an app change? How do you want the button to change? What color should the button be? What state should the button store?
If you can answer these questions, you will get a better response from the agent.
3. Use o3 for planning
So far, o3 seems to be the best thinking model for coding. I dump my code into o3 in ChatGPT using Repo Prompt, ask for a plan that I can put in Claude Code, and then run the plan.
If I am struggling with a bug, I ask o3 for information on the bug.
Using Wisper Flow dramatically speeds up my prompting. I find myself giving a bunch of additional context to the model when I’m speaking instead of typing.
4. Test agent output just like you would an intern!
You would not trust an intern’s code!
You would pull the PR, test it thoroughly and review it.
You should treat AI generated code similarly.
You can speed up review with o3 before taking a look at the code to catch any obvious issues.
5. You are the architect and your existing codebase is the guide
Do not trust the agent to architect well! You should ask o3 to plan good decomposition in advance and instruct it to structure things well.
Your codebase being well decomposed will help here! If it’s clear to you where something should go, it will be clear to an agent.
This is one of the biggest struggles for vibe coding. You can get started quickly but multiple Claude Code sessions later and your codebase is a mess. I often have o3 suggest a refactor which works quite well!
6. Have tests!
This is one I am still struggling with. When I’m iterating quickly on a codebase, it seems superfluous to create integration tests.
On the other hand, when an agent can run the tests, or at a minimum, run the type checker, it can usually iterate to a decent solution.