--- name: engineer-expertise-extractor description: Research and extract an engineer's coding style, patterns, and best practices from their GitHub contributions. Creates structured knowledge base for replicating their expertise. --- # Engineer Expertise Extractor Extract and document an engineer's coding expertise by analyzing their GitHub contributions, creating a structured knowledge base that captures their coding style, patterns, best practices, and architectural decisions. ## What This Skill Does Researches an engineer's work to create a "digital mentor" by: - **Analyzing Pull Requests** - Extract code patterns, review style, decisions - **Extracting Coding Style** - Document their preferences and conventions - **Identifying Patterns** - Common solutions and approaches they use - **Capturing Best Practices** - Their quality standards and guidelines - **Organizing Examples** - Real code samples from their work - **Documenting Decisions** - Architectural choices and reasoning ## Why This Matters **Knowledge Preservation:** - Capture expert knowledge before they leave - Document tribal knowledge - Create mentorship materials - Onboard new engineers faster **Consistency:** - Align team coding standards - Replicate expert approaches - Maintain code quality - Scale expertise across team **Learning:** - Learn from senior engineers - Understand decision-making - See real-world patterns - Improve code quality ## How It Works ### 1. Research Phase Using GitHub CLI (`gh`), the skill: - Fetches engineer's pull requests - Analyzes code changes - Reviews their comments and feedback - Extracts patterns and conventions - Identifies their expertise areas ### 2. Analysis Phase Categorizes findings into: - **Coding Style** - Formatting, naming, structure - **Patterns** - Common solutions and approaches - **Best Practices** - Quality guidelines - **Architecture** - Design decisions - **Testing** - Testing approaches - **Code Review** - Feedback patterns - **Documentation** - Doc style and practices ### 3. Organization Phase Creates structured folders: ``` engineer_profiles/ └── [engineer_name]/ ├── README.md (overview) ├── coding_style/ │ ├── languages/ │ ├── naming_conventions.md │ ├── code_structure.md │ └── formatting_preferences.md ├── patterns/ │ ├── common_solutions.md │ ├── design_patterns.md │ └── code_examples/ ├── best_practices/ │ ├── code_quality.md │ ├── testing_approach.md │ ├── performance.md │ └── security.md ├── architecture/ │ ├── design_decisions.md │ ├── tech_choices.md │ └── trade_offs.md ├── code_review/ │ ├── feedback_style.md │ ├── common_suggestions.md │ └── review_examples.md └── examples/ ├── by_language/ ├── by_pattern/ └── notable_prs/ ``` ## Output Structure ### Engineer Profile README **Contains:** - Engineer overview - Areas of expertise - Languages and technologies - Key contributions - Coding philosophy - How to use this profile ### Coding Style Documentation **Captures:** - Naming conventions (variables, functions, classes) - Code structure preferences - File organization - Comment style - Formatting preferences - Language-specific idioms **Example:** ```markdown # Coding Style: [Engineer Name] ## Naming Conventions ### Variables - Use descriptive names: `userAuthentication` not `ua` - Boolean variables: `isActive`, `hasPermission`, `canEdit` - Collections: plural names `users`, `items`, `transactions` ### Functions - Verb-first: `getUserById`, `validateInput`, `calculateTotal` - Pure functions preferred - Single responsibility ### Classes - PascalCase: `UserService`, `PaymentProcessor` - Interface prefix: `IUserRepository` - Concrete implementations: `MongoUserRepository` ## Code Structure ### File Organization - One class per file - Related functions grouped together - Tests alongside implementation - Clear separation of concerns ### Function Length - Max 20-30 lines preferred - Extract helper functions - Single level of abstraction ``` ### Patterns Documentation **Captures:** - Recurring solutions - Design patterns used - Architectural patterns - Problem-solving approaches **Example:** ```markdown # Common Patterns: [Engineer Name] ## Dependency Injection Used consistently across services: \`\`\`typescript // Pattern: Constructor injection class UserService { constructor( private readonly userRepo: IUserRepository, private readonly logger: ILogger ) {} } \`\`\` **Why:** Testability, loose coupling, clear dependencies ## Error Handling Consistent error handling approach: \`\`\`typescript // Pattern: Custom error types + global handler class ValidationError extends Error { constructor(message: string) { super(message); this.name = 'ValidationError'; } } // Usage if (!isValid(input)) { throw new ValidationError('Invalid input format'); } \`\`\` **Why:** Type-safe errors, centralized handling, clear debugging ``` ### Best Practices Documentation **Captures:** - Quality standards - Testing approaches - Performance guidelines - Security practices - Documentation standards **Example:** ```markdown # Best Practices: [Engineer Name] ## Testing ### Unit Test Structure - AAA pattern (Arrange, Act, Assert) - One assertion per test preferred - Test names describe behavior - Mock external dependencies \`\`\`typescript describe('UserService', () => { describe('createUser', () => { it('should create user with valid data', async () => { // Arrange const userData = { email: 'test@example.com', name: 'Test' }; const mockRepo = createMockRepository(); // Act const result = await userService.createUser(userData); // Assert expect(result.id).toBeDefined(); expect(result.email).toBe(userData.email); }); }); }); \`\`\` ### Test Coverage - Aim for 80%+ coverage - 100% coverage for critical paths - Integration tests for APIs - E2E tests for user flows ## Code Review Standards ### What to Check - [ ] Tests included and passing - [ ] No console.logs remaining - [ ] Error handling present - [ ] Comments explain "why" not "what" - [ ] No hardcoded values - [ ] Security considerations addressed ``` ### Architecture Documentation **Captures:** - Design decisions - Technology choices - Trade-offs made - System design approaches **Example:** ```markdown # Architectural Decisions: [Engineer Name] ## Decision: Microservices vs Monolith **Context:** Scaling user service **Decision:** Start monolith, extract services when needed **Reasoning:** - Team size: 5 engineers - Product stage: MVP - Premature optimization risk - Easier debugging and deployment **Trade-offs:** - Monolith pros: Simpler, faster development - Monolith cons: Harder to scale later - Decision: Optimize for current needs, refactor when hitting limits ## Decision: REST vs GraphQL **Context:** API design for mobile app **Decision:** REST with versioning **Reasoning:** - Team familiar with REST - Simple use cases - Caching easier - Over-fetching not a problem yet **When to reconsider:** If frontend needs complex queries ``` ### Code Review Documentation **Captures:** - Feedback patterns - Review approach - Common suggestions - Communication style **Example:** ```markdown # Code Review Style: [Engineer Name] ## Review Approach ### Priority Order 1. Security vulnerabilities 2. Logic errors 3. Test coverage 4. Code structure 5. Naming and style ### Feedback Style - Specific and constructive - Explains "why" behind suggestions - Provides examples - Asks questions to understand reasoning ### Common Suggestions **Security:** - "Consider input validation here" - "This query is vulnerable to SQL injection" - "Should we rate-limit this endpoint?" **Performance:** - "This N+1 query could be optimized with a join" - "Consider caching this expensive operation" - "Memoize this pure function" **Testing:** - "Can we add a test for the error case?" - "What happens if the API returns null?" - "Let's test the boundary conditions" **Code Quality:** - "Can we extract this into a helper function?" - "This function is doing too many things" - "Consider a more descriptive variable name" ``` ## Using This Skill ### Extract Engineer Profile ```bash ./scripts/extract_engineer.sh [github-username] ``` **Interactive workflow:** 1. Enter GitHub username 2. Select repository scope (all/specific org) 3. Choose analysis depth (last N PRs) 4. Specify focus areas (languages, topics) 5. Extract and organize findings **Output:** Structured profile in `engineer_profiles/[username]/` ### Analyze Specific Repository ```bash ./scripts/analyze_repo.sh [repo-url] [engineer-username] ``` Focuses analysis on specific repository contributions. ### Update Existing Profile ```bash ./scripts/update_profile.sh [engineer-username] ``` Adds new PRs and updates existing profile. ## Research Sources ### GitHub CLI Queries **Pull Requests:** ```bash gh pr list --author [username] --limit 100 --state all gh pr view [pr-number] --json title,body,files,reviews,comments ``` **Code Changes:** ```bash gh pr diff [pr-number] gh api repos/{owner}/{repo}/pulls/{pr}/files ``` **Reviews:** ```bash gh pr view [pr-number] --comments gh api repos/{owner}/{repo}/pulls/{pr}/reviews ``` **Commits:** ```bash gh api search/commits --author [username] ``` ### Analysis Techniques **Pattern Recognition:** - Identify recurring code structures - Extract common solutions - Detect naming patterns - Find architectural choices **Style Extraction:** - Analyze formatting consistency - Extract naming conventions - Identify comment patterns - Detect structural preferences **Best Practice Identification:** - Look for testing patterns - Find error handling approaches - Identify security practices - Extract performance optimizations ## Use Cases ### 1. Onboarding New Engineers **Problem:** New engineer needs to learn team standards **Solution:** Provide senior engineer's profile as reference **Benefits:** - Real examples from codebase - Understand team conventions - See decision-making process - Learn best practices ### 2. Code Review Training **Problem:** Teaching good code review skills **Solution:** Study experienced reviewer's feedback patterns **Benefits:** - Learn what to look for - Understand feedback style - See common issues - Improve review quality ### 3. Knowledge Transfer **Problem:** Senior engineer leaving, knowledge lost **Solution:** Extract their expertise before departure **Benefits:** - Preserve tribal knowledge - Document decisions - Maintain code quality - Reduce bus factor ### 4. Establishing Team Standards **Problem:** Inconsistent coding styles across team **Solution:** Extract patterns from best engineers, create standards **Benefits:** - Evidence-based standards - Real-world examples - Buy-in from team - Consistent codebase ### 5. AI Agent Training **Problem:** Agent needs to code like specific engineer **Solution:** Provide extracted profile to agent **Benefits:** - Match expert's style - Follow their patterns - Apply their best practices - Maintain consistency ## Profile Usage by Agents When an agent has access to an engineer profile, it can: **Code Generation:** - Follow extracted naming conventions - Use identified patterns - Apply documented best practices - Match architectural style **Code Review:** - Provide feedback in engineer's style - Check for common issues they'd catch - Apply their quality standards - Match their priorities **Problem Solving:** - Use their common solutions - Follow their architectural approach - Apply their design patterns - Consider their trade-offs **Example Agent Prompt:** ``` "Using the profile at engineer_profiles/senior_dev/, write a user service following their coding style, patterns, and best practices. Pay special attention to their error handling approach and testing standards." ``` ## Best Practices ### Research Ethics **DO:** - ✅ Get permission before extracting - ✅ Focus on public contributions - ✅ Respect privacy - ✅ Use for learning and improvement **DON'T:** - ❌ Extract without permission - ❌ Share profiles externally - ❌ Include sensitive information - ❌ Use for performance reviews ### Profile Maintenance **Regular Updates:** - Refresh every quarter - Add new significant PRs - Update with latest patterns - Archive outdated practices **Quality Control:** - Verify extracted patterns - Review examples for relevance - Update documentation - Remove deprecated practices ### Effective Usage **For Learning:** - Study patterns with context - Understand reasoning behind choices - Practice applying techniques - Ask questions when unclear **For Replication:** - Start with style guide - Reference patterns for similar problems - Adapt to current context - Don't blindly copy ## Limitations **What This Extracts:** - ✅ Coding style and conventions - ✅ Common patterns and approaches - ✅ Best practices and guidelines - ✅ Architectural decisions - ✅ Review feedback patterns **What This Doesn't Capture:** - ❌ Real-time problem-solving process - ❌ Verbal communication style - ❌ Meeting discussions - ❌ Design phase thinking - ❌ Interpersonal mentoring ## Future Enhancements **Potential additions:** - Slack message analysis (communication style) - Design doc extraction (design thinking) - Meeting notes analysis (decision process) - Video analysis (pair programming sessions) - Code metrics tracking (evolution over time) ## Example Output ``` engineer_profiles/ └── senior_dev/ ├── README.md │ # Senior Dev - Staff Engineer │ Expertise: TypeScript, Node.js, System Design │ Focus: API design, performance optimization │ ├── coding_style/ │ ├── typescript_style.md │ ├── naming_conventions.md │ └── code_structure.md │ ├── patterns/ │ ├── dependency_injection.md │ ├── error_handling.md │ └── examples/ │ ├── service_pattern.ts │ └── repository_pattern.ts │ ├── best_practices/ │ ├── testing_strategy.md │ ├── code_quality.md │ └── performance.md │ ├── architecture/ │ ├── api_design.md │ ├── database_design.md │ └── scaling_approach.md │ ├── code_review/ │ ├── feedback_examples.md │ └── review_checklist.md │ └── examples/ └── notable_prs/ ├── pr_1234_auth_refactor.md └── pr_5678_performance_fix.md ``` ## Summary This skill transforms an engineer's GitHub contributions into a structured, reusable knowledge base. It captures their expertise in a format that: - **Humans can learn from** - Clear documentation with examples - **Agents can replicate** - Structured patterns and guidelines - **Teams can adopt** - Evidence-based best practices - **Organizations can preserve** - Knowledge that survives turnover **The goal:** Make expertise scalable, learnable, and replicable. --- **"The best way to learn is from those who have already mastered it."**