AI Questions and Answers, AI Learni
.cursorrules and strategic @ referencing.The biggest productivity jump happened when I stopped letting the AI guess my project structure. I created a .cursorrules file in my root directory to force the AI to follow a specific architectural pattern. For my current TypeScript project, I use this:
- Always use Functional Components and Tailwind CSS for UI.
- Prefer Zod for schema validation; never use any type.
- When creating new API routes, follow the /app/api/[route]/route.ts convention.
- Keep business logic in /services and UI logic in /components.
- Always include JSDoc comments for complex utility functions.By baking these constraints into the system prompt, I stopped wasting time correcting the AI when it tried to use Class components or outdated state management.
When I'm actually coding, I've moved away from the standard chat. I now use the "Composer" in "Control" mode. If I need to implement a new feature—say, adding a Stripe webhook—I don't just describe it. I explicitly feed it the context: @docs (Stripe API) + @files (webhooks.ts, user-schema.ts). This prevents the AI from making up method names that don't exist in the current SDK version.
One major "gotcha" I encountered: Cursor sometimes gets stuck in a loop where it keeps reverting a change you just made manually. This usually happens because the indexed embeddings are slightly out of sync. The fix is to simply trigger a manual re-index or, more effectively, explicitly tell it in the prompt: Ignore the current implementation of X and rewrite it based on Y.
For those trying to learn AI-driven development, stop writing every line of code. Instead, focus on "Prompting via Architecture." Instead of asking for a function, ask for the interface first.
My current workflow for a new feature:
- Step 1: Use
@Codebaseto ask "Where is the best place to integrate X without breaking Y?" - Step 2: Use Composer to generate the Types/Interfaces first.
- Step 3: Once the types are locked in, let the AI fill in the logic.
- Step 4: Use the "Diff" view to manually reject any overly verbose "AI-style" code (like unnecessary
try-catchblocks around every single line).
If you're still using Copilot's basic autocomplete, you're playing on easy mode. Switching to an agentic workflow where the AI can actually read your file tree and execute terminal commands (like Claude Code) reduces the mental overhead of switching between the browser, the docs, and the IDE. The goal isn't to let the AI write the code, but to let the AI manage the boilerplate so you can spend your energy on the system design.
All Replies (0)
No replies yet — be the first!
