AI coding assistants are powerful, but using them effectively requires skill. This guide covers best practices for pair programming with AI—turning a useful tool into a productivity multiplier.
The Right Mindset#
AI as Junior Developer, Not Oracle#
Think of AI as a capable junior developer:
What juniors do well:
- Write code quickly
- Follow patterns you establish
- Handle boilerplate
- Research solutions
- Catch obvious errors
What juniors need help with:
- Architectural decisions
- Understanding business context
- Knowing when to break rules
- Seeing the big picture
Treat AI the same way:
Good: "Implement user registration following our existing auth pattern"
Bad: "Design the entire authentication system"
Good: "Add input validation to this function"
Bad: "Make this code production-ready"You're Still the Engineer#
AI accelerates your work; it doesn't replace your judgment:
- You understand the business requirements
- You know the technical constraints
- You make architectural decisions
- You ensure code quality
- AI executes faster than you could type
Effective Prompting#
Be Specific#
Vague prompts get vague results:
1❌ Vague:
2"Fix this bug"
3
4✅ Specific:
5"This function returns undefined when the user's email
6contains a '+' character. The issue is in the regex
7on line 23. Fix the regex to handle '+' characters
8while maintaining email format validation."Provide Context#
AI performs better with context:
1❌ No context:
2"Add pagination"
3
4✅ With context:
5"Add cursor-based pagination to this products API.
6We're using PostgreSQL with Prisma. Our frontend
7expects { items: [], nextCursor: string, hasMore: boolean }.
8We typically page through 10,000+ products."State Your Constraints#
Tell AI what matters to you:
1"Implement user search with these requirements:
2- Must handle 100K+ users
3- Response time < 100ms
4- Use our existing searchService pattern
5- Don't use external dependencies
6- Must work with our PostgreSQL setup"Show, Don't Just Tell#
Examples are powerful:
1"Format the output like this:
2{
3 'user': {
4 'id': 123,
5 'name': 'John',
6 'permissions': ['read', 'write']
7 }
8}
9
10Note: Use single quotes for JSON keys
11(our legacy system requires this)."Workflow Patterns#
The Verify Loop#
Never trust AI output blindly:
1. Prompt AI
2. Review output
3. Test behavior
4. Refine prompt
5. Repeat until correct
Incremental Development#
Build complex features step by step:
1Step 1: "Create the data model for subscriptions"
2Review → Approve
3
4Step 2: "Add the API endpoint for creating subscriptions"
5Review → Approve
6
7Step 3: "Add Stripe webhook handling for subscription events"
8Review → Approve
9
10Step 4: "Add the frontend subscription management component"
11Review → ApproveThe Rubber Duck Method#
Use AI chat to think through problems:
1You: "I need to implement rate limiting. Let me think out loud.
2We have 3 API servers behind a load balancer. In-memory
3won't work because requests hit different servers.
4Redis could work but adds a dependency..."
5
6AI: "Good analysis. With multiple servers, you need
7distributed rate limiting. Options:
81. Redis (common, battle-tested)
92. Database-backed (simpler, slower)
103. Load balancer level (fastest, less flexible)
11
12Given your setup, Redis with a sliding window
13algorithm would be most appropriate..."The Code Review Partner#
Let AI review your code:
1"Review this code for:
21. Security vulnerabilities
32. Performance issues
43. Edge cases I might have missed
54. Better patterns I could use
6
7Be critical—I want to catch problems now."What AI Does Well#
Boilerplate and Repetitive Code#
Perfect for AI:
1"Generate CRUD endpoints for the User model:
2- GET /users (list with pagination)
3- GET /users/:id
4- POST /users
5- PUT /users/:id
6- DELETE /users/:id
7
8Follow REST conventions and our error handling pattern."Translation Between Formats#
AI excels at transformations:
"Convert this JSON Schema to TypeScript interfaces"
"Turn this SQL query into a Prisma query"
"Rewrite this Python function in TypeScript"Documentation Generation#
Let AI handle the tedious parts:
"Generate JSDoc comments for all public functions
in this file. Include parameter descriptions,
return types, and usage examples."Test Case Generation#
AI is great at identifying test scenarios:
1"Generate unit tests for this validation function.
2Cover:
3- Valid inputs
4- Invalid inputs
5- Edge cases (empty strings, null, undefined)
6- Boundary conditions"Regex and Complex Patterns#
Nobody wants to write regex from scratch:
"Write a regex that matches:
- US phone numbers in formats: (123) 456-7890, 123-456-7890, 1234567890
- Should capture area code, prefix, and line number separately
- Should reject invalid formats"What AI Struggles With#
Novel Architecture#
Don't rely on AI for unprecedented designs:
❌ "Design a new database architecture for our needs"
✅ "Given this architecture, implement the user service"Business Logic Understanding#
AI doesn't know your business:
❌ "Implement the pricing calculation"
✅ "Implement pricing: base_price * quantity * (1 - discount).
Discount is 0.1 for orders over $100, 0.2 for over $500."Non-Obvious Security#
AI might miss subtle vulnerabilities:
1Always review AI code for:
2- SQL injection (even with ORMs)
3- XSS vulnerabilities
4- Authentication bypasses
5- Authorization issues
6- Timing attacks
7- Race conditionsContext Across Long Sessions#
AI context degrades in long sessions:
Solution:
- Start fresh sessions for new tasks
- Re-provide context periodically
- Use tools with persistent memory (Bootspring)Common Mistakes#
Mistake 1: Accepting Code Without Review#
❌ AI generates → You commit
✅ AI generates → You review → You test → You commitMistake 2: Fighting the AI#
If AI keeps getting it wrong:
❌ Keep rephrasing the same prompt
✅ Step back, provide more context, or try a different approachMistake 3: Over-Relying on AI#
❌ "AI, implement the entire feature"
✅ "AI, help me implement these specific parts"Mistake 4: Under-Utilizing AI#
❌ Writing boilerplate manually "to be safe"
✅ Using AI for routine code, focusing your time on hard problemsMistake 5: Poor Prompt Hygiene#
❌ Stream-of-consciousness prompts
✅ Clear, structured prompts with context and constraintsTool-Specific Tips#
With Code Completion (Copilot, Codeium)#
- Write descriptive function names
- Add comments before complex functions
- Accept suggestions line by line when uncertain
- Tab-complete obvious code, type novel code
With Chat (Cursor, Claude)#
- Start with context about what you're building
- Ask follow-up questions
- Request explanations, not just code
- Use "explain this code" before "fix this code"
With Agents (Bootspring, Claude Code)#
- Define clear task boundaries
- Review autonomous changes in chunks
- Provide architectural guidance upfront
- Let agents handle multi-file changes
Measuring Success#
Good Signs#
- Faster feature delivery
- More consistent code quality
- Fewer bugs in generated code
- More time for hard problems
- Better documentation
Warning Signs#
- Debugging AI code more than writing code
- Fighting AI suggestions constantly
- Security vulnerabilities appearing
- Code quality decreasing
- Understanding of codebase declining
Building AI Fluency#
Practice Deliberately#
Week 1: Use AI for documentation only
Week 2: Add test generation
Week 3: Add boilerplate code
Week 4: Add refactoring tasks
Week 5: Full integrationLearn Your Tool's Strengths#
Each tool has different strengths:
- Copilot: Fast inline completion
- Cursor: Multi-file operations
- Claude Code: Complex reasoning
- Bootspring: Specialized domain expertise
Develop Your Prompting Voice#
Over time, you'll develop effective patterns:
Your style might include:
- Always starting with context
- Using numbered requirements
- Specifying output format
- Asking for alternativesConclusion#
Effective AI pair programming requires:
- Right mindset: AI assists, you lead
- Clear communication: Specific, contextual prompts
- Appropriate tasks: Match AI to its strengths
- Verification: Always review and test
- Continuous learning: Improve your AI fluency
The developers who master AI collaboration will dramatically outperform those who don't. Start practicing these patterns today.
Bootspring's specialized agents take AI pair programming further. Each agent brings domain expertise to your collaboration. Try it free and experience the difference.