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:
Coding Style: [Engineer Name]
Naming Conventions
Variables
- Use descriptive names:
userAuthenticationnotua - 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:
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:
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:
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:
Code Review Style: [Engineer Name]
Review Approach
Priority Order
- Security vulnerabilities
- Logic errors
- Test coverage
- Code structure
- 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 ./scripts/extract_engineer.sh [github-username]
Interactive workflow:
Enter GitHub username Select repository scope (all/specific org) Choose analysis depth (last N PRs) Specify focus areas (languages, topics) Extract and organize findings
Output: Structured profile in engineer_profiles/[username]/
Analyze Specific Repository ./scripts/analyze_repo.sh [repo-url] [engineer-username]
Focuses analysis on specific repository contributions.
Update Existing Profile ./scripts/update_profile.sh [engineer-username]
Adds new PRs and updates existing profile.
Research Sources GitHub CLI Queries
Pull Requests:
gh pr list --author [username] --limit 100 --state all gh pr view [pr-number] --json title,body,files,reviews,comments
Code Changes:
gh pr diff [pr-number] gh api repos/{owner}/{repo}/pulls/{pr}/files
Reviews:
gh pr view [pr-number] --comments gh api repos/{owner}/{repo}/pulls/{pr}/reviews
Commits:
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."