Look, I get it. Every week there's another "revolutionary AI tool" that's gonna change your life. Then you try it and... meh.
This isn't that post. These are patterns I've actually used in real projects that cut through the BS and just work.
1. AI as Code Reviewer (But Actually Careful)
Here's the thing most people get wrong: they throw their whole codebase at Claude and ask "is this good?" That's useless.
Instead, ask specific questions:
- "Here's my authentication flow. What am I missing security-wise?"
- "This async code sometimes hangs. Walk through the execution path and spot the deadlock."
- "Is this accessible? Run through it from a screen reader perspective."
The magic is in the constraints. Focused prompts = actually useful feedback. Vague prompts = vague nonsense.
I've caught actual bugs this way. Not because the AI is magic, but because having another perspective forces you to articulate why you wrote something.
2. Local LLMs for Repetitive Cleanup
Skip the API calls for routine work. Run Ollama locally with a smaller model (Mistral is solid).
Use case: bulk code refactoring.
for file in src/**/*.js; do
ollama run mistral "Convert this to TypeScript, strict mode. Return only code:" < "$file" > "${file%.js}.ts"
done
Not production-grade? Right. But it gets you 80% there and costs zero API credits. You review the changes, fix the edge cases.
Same trick works for:
- Generating test cases from functions
- Writing docstrings
- Converting between formats (CSS → Tailwind, old syntax → new)
The 20% you fix manually? Way faster than doing it from scratch.
3. Prompt Templates > Winging It
Save your good prompts. Seriously.
If you ask Claude the same type of question 10 times, you have a template. Create a .prompts folder in your project:
.prompts/
├── code-review.md
├── bug-analysis.md
└── documentation.md
Example code-review.md:
You are a security-focused code reviewer.
Analyze this code for:
1. Authentication/authorization issues
2. Data exposure risks
3. Input validation gaps
Code:
[PASTE HERE]
Return: List of issues (none? say so), severity (HIGH/MEDIUM/LOW), and fix.
Same prompt, reused 50 times, gets better because you refine it. Takes 10 minutes to set up templates. Saves hours.
4. Streaming for Patience
Waiting for Claude to finish a long response? That kills focus.
Use streaming. Start reading while the response generates. You catch yourself halfway through most of the time.
In your CLI app or API wrapper:
with client.messages.stream(
max_tokens=2048,
messages=[...],
model="claude-3-5-sonnet-20241022"
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
Feels faster. Probably is. But more importantly, you don't zone out waiting for the full response.
5. Chain Simple Tasks, Not Complex Ones
This is where everyone overcomplicates things.
Don't ask an AI to "Build me a full backend API." Ask it:
- "Design the schema for X."
- "Write the migration for this schema."
- "Build the CRUD endpoints."
- "Add error handling."
- "Write tests."
Breaking it down isn't lazy. It's smart. You review each piece. You catch mistakes early. The AI doesn't hallucinate weird interconnections because you gave it one job at a time.
Chaining works. Monsters don't.
The Real Pattern
None of this is rocket science, and that's the point. The AI tools that stick aren't the ones doing magic—they're the ones that fit into your workflow without breaking everything.
Use them to eliminate boring work. Use them to catch what you miss. Don't use them to avoid thinking.
The developers winning right now aren't the ones with the fanciest tools. They're the ones who asked "where's the actual friction in my day?" and used AI to solve that specific problem.
Want more practical AI stuff for your workflow? Subscribe to LearnAI Weekly—no fluff, just patterns that actually work from people building real things.
What patterns are you using? Hit reply and tell me.
Top comments (0)