9.0 KiB
Philosophy Guide
Understanding the philosophy behind this template is key to achieving 10x productivity with AI assistants.
🧠 Core Philosophy: Human Creativity, AI Velocity
The Fundamental Principle
You bring the vision and creativity. AI handles the implementation details.
This isn't about AI replacing developers—it's about developers achieving what was previously impossible. Your unique problem-solving approach, architectural vision, and creative solutions remain entirely yours. AI simply removes the friction between idea and implementation.
🎯 The Three Pillars
1. Amplification, Not Replacement
Traditional Approach:
- Developer thinks of solution
- Developer implements every detail
- Developer tests and debugs
- Time: Days to weeks
AI-Amplified Approach:
- Developer envisions solution
- AI implements under guidance
- Developer reviews and refines
- Time: Hours to days
Key Insight: You still make every important decision. AI just executes faster.
2. Philosophy-Driven Development
Why Philosophy Matters:
- Consistency across all code
- Decisions aligned with principles
- AI understands your preferences
- Team shares mental model
In Practice:
/prime # Loads philosophy
# Now every AI interaction follows your principles
3. Flow State Preservation
Flow Killers (Eliminated):
- Context switching for formatting
- Looking up syntax details
- Writing boilerplate code
- Manual quality checks
Flow Enhancers (Amplified):
- Desktop notifications
- Automated quality
- Natural language interaction
- Continuous momentum
📋 Implementation Philosophy
Simplicity First
Principle: Every line of code should have a clear purpose.
Application:
# ❌ Over-engineered
class AbstractFactoryManagerSingleton:
def get_instance_factory_manager(self):
return self._factory_instance_manager_singleton
# ✅ Simple and clear
def get_user(user_id: str) -> User:
return database.find_user(user_id)
Why It Works: Simple code is:
- Easier to understand
- Faster to modify
- Less likely to break
- More maintainable
Pragmatic Architecture
Principle: Build for today's needs, not tomorrow's possibilities.
Application:
- Start with monolith, split when needed
- Use boring technology that works
- Optimize when you measure, not when you guess
- Choose patterns that fit, not patterns that impress
Example Evolution:
Version 1: Simple function
Version 2: Add error handling (when errors occur)
Version 3: Add caching (when performance matters)
Version 4: Extract to service (when scale demands)
Trust in Emergence
Principle: Good architecture emerges from good practices.
Application:
- Don't over-plan the system
- Let patterns reveal themselves
- Refactor when clarity emerges
- Trust the iterative process
Real Example:
Week 1: Build auth quickly
Week 2: Notice pattern, extract utilities
Week 3: See bigger pattern, create auth module
Week 4: Clear architecture has emerged naturally
🔧 Modular Design Philosophy
Think "Bricks & Studs"
Concept:
- Brick = Self-contained module with one responsibility
- Stud = Clean interface others connect to
Implementation:
# user_service.py (Brick)
"""Handles all user-related operations"""
# Public Interface (Studs)
def create_user(data: UserData) -> User: ...
def get_user(user_id: str) -> User: ...
def update_user(user_id: str, data: UserData) -> User: ...
# Internal Implementation (Hidden inside brick)
def _validate_user_data(): ...
def _hash_password(): ...
Contract-First Development
Process:
- Define what the module does
- Design the interface
- Implement the internals
- Test the contract
Example:
# 1. Purpose (README in module)
"""Email Service: Sends transactional emails"""
# 2. Contract (interface.py)
@dataclass
class EmailRequest:
to: str
subject: str
body: str
async def send_email(request: EmailRequest) -> bool:
"""Send email, return success status"""
# 3. Implementation (internal)
# ... whatever works, can change anytime
# 4. Contract Test
def test_email_contract():
result = await send_email(EmailRequest(...))
assert isinstance(result, bool)
Regenerate, Don't Patch
Philosophy: When modules need significant changes, rebuild them.
Why:
- Clean slate avoids technical debt
- AI excels at regeneration
- Tests ensure compatibility
- Cleaner than patching patches
Process:
/ultrathink-task Regenerate the auth module with these new requirements:
- Add OAuth support
- Maintain existing API contract
- Include migration guide
🎨 Coding Principles
Explicit Over Implicit
# ❌ Implicit
def process(data):
return data * 2.5 # What is 2.5?
# ✅ Explicit
TAX_MULTIPLIER = 2.5
def calculate_with_tax(amount: float) -> float:
"""Calculate amount including tax"""
return amount * TAX_MULTIPLIER
Composition Over Inheritance
# ❌ Inheritance jungle
class Animal: ...
class Mammal(Animal): ...
class Dog(Mammal): ...
class FlyingDog(Dog, Bird): ... # 😱
# ✅ Composition
@dataclass
class Dog:
movement: MovementBehavior
sound: SoundBehavior
flying_dog = Dog(
movement=FlyingMovement(),
sound=BarkSound()
)
Errors Are Values
# ❌ Hidden exceptions
def get_user(id):
return db.query(f"SELECT * FROM users WHERE id={id}")
# SQL injection! Throws on not found!
# ✅ Explicit results
def get_user(user_id: str) -> Result[User, str]:
if not is_valid_uuid(user_id):
return Err("Invalid user ID format")
user = db.get_user(user_id)
if not user:
return Err("User not found")
return Ok(user)
🚀 AI Collaboration Principles
Rich Context Provision
Principle: Give AI enough context to make good decisions.
Application:
# ❌ Minimal context
Fix the bug in auth
# ✅ Rich context
Fix the authentication bug where users get logged out after 5 minutes.
Error: "JWT token expired" even though expiry is set to 24h.
See @auth/config.py line 23 and @auth/middleware.py line 45.
Follow our error handling patterns in IMPLEMENTATION_PHILOSOPHY.md.
Iterative Refinement
Principle: First version gets you 80%, iteration gets you to 100%.
Process:
- Get something working
- See it in action
- Refine based on reality
- Repeat until excellent
Example Session:
Create a data table component
[Reviews output]
Actually, add sorting to the columns
[Reviews again]
Make the sorted column show an arrow
[Perfect!]
Trust but Verify
Principle: AI is powerful but not infallible.
Practice:
- Review generated code
- Run tests immediately
- Check edge cases
- Validate against requirements
Workflow:
/ultrathink-task [complex request]
# Review the plan before implementation
# Check the code before running
# Verify behavior matches intent
🌟 Philosophy in Action
Daily Development Flow
Morning:
/prime # Start with philosophy alignment
Feature Development:
/create-plan "New feature based on our principles"
/execute-plan
# Automated checks maintain quality
# Notifications keep you informed
Review:
/review-changes
# Ensure philosophy compliance
Problem-Solving Approach
1. Understand the real problem (not the symptom)
2. Consider the simplest solution
3. Check if it aligns with principles
4. Implement iteratively
5. Let architecture emerge
Team Collaboration
# Share philosophy through configuration
git add ai_context/IMPLEMENTATION_PHILOSOPHY.md
git commit -m "Update team coding principles"
# Everyone gets same guidance
Team member: /prime
# Now coding with shared philosophy
📚 Living Philosophy
Evolution Through Experience
This philosophy should evolve:
- Add principles that work
- Remove ones that don't
- Adjust based on team needs
- Learn from project outcomes
Contributing Principles
When adding principles:
- Must solve real problems
- Should be broadly applicable
- Include concrete examples
- Explain the why
Anti-Patterns to Avoid
- Dogmatic Adherence: Principles guide, not dictate
- Premature Abstraction: Wait for patterns to emerge
- Technology Over Problem: Solve real needs
- Complexity Worship: Simple is usually better
🎯 The Meta-Philosophy
Why This Works
- Cognitive Load Reduction: Principles make decisions easier
- Consistency: Same principles = coherent codebase
- Speed: No debate, follow principles
- Quality: Good principles = good code
- Team Scaling: Shared principles = aligned team
The Ultimate Goal
Create systems where:
- Humans focus on what matters
- AI handles what's repetitive
- Quality is automatic
- Innovation is amplified
- Work remains joyful