| name | software-architect |
| description | Use this when user requests architectural analysis, migration planning, or technical debt assessment. Provides 6-layer framework: system structure, domain model, design patterns, technical debt, modernization strategy, and DDD analysis. Apply when user asks for architecture review, refactoring strategy, or system modernization roadmap |
| categories | role, perspective, architecture |
| tags | architecture, ddd, patterns, modernization, technical-debt |
| version | 1.0.0 |
Software Architect Role
Purpose
Provides architectural perspective for analyzing codebases, identifying patterns, assessing technical debt, and planning modernization strategies.
When to Use
- ✅ User asks for architectural analysis or review
- ✅ Planning migration from legacy to modern framework
- ✅ Assessing technical debt and code quality
- ✅ Designing refactoring strategies
- ✅ Evaluating design patterns and architectural decisions
- ✅ Creating system architecture documentation
Architectural Analysis Framework
Layer 1: System Structure
Questions to Answer:
- What are the major architectural layers?
- How do components communicate?
- What are the system boundaries?
- What external dependencies exist?
- What data flows through the system?
Analysis Approach:
# Discover module structure
codecompass search:semantic "module structure and dependencies"
# Find architectural patterns
codecompass search:semantic "dependency injection and service layer patterns"
# Identify boundaries
codecompass search:semantic "API endpoints and external integrations"
Output: High-level architecture diagram (Mermaid)
Layer 2: Domain Model
Questions to Answer:
- What are the core domain entities?
- How are domains organized (DDD bounded contexts)?
- What relationships exist between entities?
- Are domain models anemic or rich?
- Is business logic properly encapsulated?
Analysis Approach:
# Find domain entities
codecompass search:semantic "database models and domain entities"
# Find business logic
codecompass search:semantic "business rules and validation logic"
# Find relationships
codecompass search:semantic "entity relationships and foreign keys"
Look For:
- ActiveRecord pattern (common in PHP/Rails)
- Repository pattern (common in DDD)
- Service layer (business logic location)
- Anemic domain model (entities without behavior)
- Rich domain model (entities with business methods)
Output: Domain model diagram showing:
- Entities and value objects
- Aggregates and aggregate roots
- Domain services
- Bounded contexts (if applicable)
Layer 3: Design Patterns
Identify Patterns:
Creational:
- Factory pattern (object creation)
- Builder pattern (complex construction)
- Singleton pattern (shared instances)
Structural:
- Adapter pattern (interface translation)
- Decorator pattern (behavior extension)
- Facade pattern (simplified interface)
- Repository pattern (data access abstraction)
Behavioral:
- Strategy pattern (algorithm selection)
- Observer pattern (event handling)
- Command pattern (action encapsulation)
- Chain of Responsibility (request handling)
Search Examples:
codecompass search:semantic "factory pattern for object creation"
codecompass search:semantic "repository pattern for database access"
codecompass search:semantic "observer pattern for event handling"
Evaluate:
- Are patterns used consistently?
- Are patterns appropriate for the problem?
- Are patterns over-engineered?
- Are patterns under-utilized?
Output: Pattern catalog with:
- Pattern name
- Location (file:line)
- Purpose and context
- Implementation quality (Good/Needs Improvement)
Layer 4: Technical Debt Assessment
Categories of Debt:
1. Code Debt
- Duplicated code (DRY violations)
- Long methods/functions (>50 lines)
- Large classes (>500 lines)
- High cyclomatic complexity
- Poor naming conventions
2. Architectural Debt
- Circular dependencies
- Tight coupling (many dependencies)
- Lack of abstraction
- Missing separation of concerns
- Monolithic modules
3. Infrastructure Debt
- Outdated dependencies
- Deprecated APIs
- Missing tests
- No CI/CD pipeline
- Hard-coded configuration
4. Documentation Debt
- Missing API documentation
- Outdated comments
- No architecture documentation
- Undocumented business rules
Search Examples:
# Find duplicated logic
codecompass search:semantic "similar code patterns for user validation"
# Find tight coupling
codecompass search:semantic "classes with many dependencies"
# Find legacy patterns
codecompass search:semantic "deprecated API usage"
Quantify Debt:
- Low: 1-5 person-days to fix
- Medium: 1-2 person-weeks to fix
- High: 1+ person-months to fix
Prioritize by:
- Business impact (customer-facing features first)
- Risk (security vulnerabilities highest priority)
- Effort (quick wins for momentum)
Output: Technical debt report:
## Critical Issues (Fix Immediately)
- [ ] Security: SQL injection vulnerability in OrderController
- [ ] Performance: N+1 query problem in UserService
## High Priority (Fix This Sprint)
- [ ] Circular dependency: User ↔ Order modules
- [ ] Missing validation: Email field not validated
## Medium Priority (Plan for Next Quarter)
- [ ] Duplicated logic: Payment processing in 3 places
- [ ] Lack of tests: Coverage <50%
## Low Priority (Refactor Opportunity)
- [ ] Long methods: OrderService::processOrder (250 lines)
- [ ] Poor naming: Variable 'x' in DiscountCalculator
Layer 5: Modernization Strategy
Assessment Questions:
- Current State: What framework/patterns are used?
- Target State: What is the desired architecture?
- Gap Analysis: What needs to change?
- Risk Assessment: What are the migration risks?
- Roadmap: What is the migration path?
Common Migration Patterns:
1. Strangler Fig Pattern
Legacy System
↓
New Feature → New System (modernized)
↓
Route traffic gradually
↓
Legacy System ← Retire old features
↓
New System (complete)
Benefits:
- Low risk (incremental)
- Continuous delivery
- No "big bang" rewrite
- Learn as you go
2. Branch by Abstraction
Legacy Code
↓
Extract interface
↓
New Implementation (behind interface)
↓
Toggle between old/new
↓
Remove old implementation
Benefits:
- No code freeze
- Easy rollback
- A/B testing possible
3. API Gateway Pattern
Legacy System → API Gateway → Clients
New System ↗
Benefits:
- Backend agnostic
- Migration transparency
- Multiple backends
Modernization Roadmap Template:
## Phase 1: Foundation (Weeks 1-4)
**Goal**: Set up new infrastructure
- [ ] New project scaffolding (NestJS/Modern framework)
- [ ] CI/CD pipeline
- [ ] Database migration strategy
- [ ] Feature flag system
## Phase 2: Parallel Development (Weeks 5-12)
**Goal**: Build new features alongside legacy
- [ ] Identify pilot feature (low risk, high value)
- [ ] Implement in new system
- [ ] Add feature flag toggle
- [ ] Test in production (dark launch)
## Phase 3: Migration (Weeks 13-26)
**Goal**: Move existing features incrementally
- [ ] Extract business rules from legacy
- [ ] Reimplement in new system
- [ ] Run both systems in parallel
- [ ] Migrate traffic gradually
- [ ] Validate behavior consistency
## Phase 4: Retirement (Weeks 27-30)
**Goal**: Decommission legacy system
- [ ] 100% traffic to new system
- [ ] Remove legacy code
- [ ] Archive database
- [ ] Update documentation
Layer 6: Domain-Driven Design (DDD) Analysis
Applicable When:
- Complex business logic
- Multiple business domains
- Large team (>10 developers)
- Long-lived system (5+ years)
DDD Strategic Patterns:
1. Bounded Contexts
User Management Context
│
├── User (aggregate root)
├── Role
├── Permission
└── Authentication Service
Order Management Context
│
├── Order (aggregate root)
├── OrderItem
├── Payment
└── Fulfillment Service
Identify Contexts:
# Find domain boundaries
codecompass search:semantic "business capabilities and modules"
# Find aggregates
codecompass search:semantic "root entities with lifecycle management"
# Find domain events
codecompass search:semantic "event publishing and domain events"
2. Context Mapping
- Partnership: Two contexts collaborate
- Customer-Supplier: One context depends on another
- Conformist: Downstream accepts upstream model
- Anticorruption Layer: Translate between contexts
- Shared Kernel: Common code between contexts
3. Ubiquitous Language
- Are business terms used consistently in code?
- Do class names match business vocabulary?
- Are developers and domain experts speaking same language?
Search for Inconsistencies:
# Find naming variations
codecompass search:semantic "customer vs user vs client terminology"
codecompass search:semantic "order vs purchase vs transaction"
DDD Tactical Patterns:
| Pattern | Purpose | Example |
|---|---|---|
| Entity | Object with identity | User, Order |
| Value Object | Object without identity | Money, Address |
| Aggregate | Consistency boundary | Order + OrderItems |
| Repository | Data access abstraction | UserRepository |
| Domain Service | Stateless domain logic | PricingService |
| Domain Event | Something that happened | OrderPlaced |
| Factory | Complex object creation | OrderFactory |
Output: DDD analysis document:
## Bounded Contexts
1. **User Management**: Authentication, authorization, profiles
2. **Order Processing**: Order lifecycle, fulfillment, inventory
3. **Billing**: Payments, invoices, subscriptions
## Context Map
User Management (Customer) ← Order Processing (Supplier)
Order Processing (Customer) ← Billing (Supplier)
## Aggregates
- **Order Aggregate**: Order (root) + OrderItems + Payments
- **User Aggregate**: User (root) + Roles + Permissions
## Domain Events
- OrderPlaced → Triggers inventory check
- PaymentReceived → Triggers order fulfillment
- UserRegistered → Triggers welcome email
Architectural Perspectives
Perspective 1: Maintainability
Metrics:
- Cyclomatic complexity (target: <10)
- Class size (target: <300 lines)
- Method length (target: <30 lines)
- Coupling (target: low)
- Cohesion (target: high)
Questions:
- Can a new developer understand the code quickly?
- Is the code self-documenting?
- Are side effects explicit?
- Is the happy path clear?
Perspective 2: Scalability
Horizontal Scaling:
- Stateless services
- No shared mutable state
- Database read replicas
- Caching strategy
Vertical Scaling:
- Efficient algorithms
- Database query optimization
- Resource pooling
- Memory management
Search Examples:
codecompass search:semantic "singleton patterns with shared state"
codecompass search:semantic "database connection pooling"
codecompass search:semantic "caching strategies"
Perspective 3: Security
OWASP Top 10 Review:
- Injection (SQL, XSS, Command)
- Broken Authentication
- Sensitive Data Exposure
- XML External Entities (XXE)
- Broken Access Control
- Security Misconfiguration
- Cross-Site Scripting (XSS)
- Insecure Deserialization
- Using Components with Known Vulnerabilities
- Insufficient Logging & Monitoring
Search Examples:
codecompass search:semantic "SQL query construction with user input"
codecompass search:semantic "authentication and password handling"
codecompass search:semantic "sensitive data storage and encryption"
Perspective 4: Performance
Bottleneck Analysis:
- Database queries (N+1 problem)
- Synchronous blocking calls
- Missing indexes
- Large payload sizes
- Memory leaks
Search Examples:
codecompass search:semantic "database queries in loops"
codecompass search:semantic "external API calls without timeout"
codecompass search:semantic "large object serialization"
Output Formats
Architecture Decision Records (ADRs)
# ADR-001: Use Repository Pattern for Data Access
**Date**: 2025-11-23
**Status**: Accepted
**Context**: Direct database access scattered throughout codebase
**Decision**: Introduce Repository pattern to abstract data access
**Consequences**:
- ✅ Easier to test (mock repositories)
- ✅ Centralized data access logic
- ✅ Supports multiple data sources
- ❌ Increased abstraction complexity
- ❌ Learning curve for team
Architecture Diagrams (Mermaid)
graph TD
Client[Client Applications]
API[API Gateway]
Auth[Auth Service]
User[User Service]
Order[Order Service]
Payment[Payment Service]
DB[(Database)]
Queue[Message Queue]
Client --> API
API --> Auth
API --> User
API --> Order
API --> Payment
User --> DB
Order --> DB
Payment --> DB
Order --> Queue
Payment --> Queue
Refactoring Recommendations
## Recommendation 1: Extract Service Layer
**Current**: Business logic in controllers
**Target**: Thin controllers, fat services
**Effort**: 2 person-weeks
**Benefit**: Testability, reusability
**Risk**: Low
## Recommendation 2: Introduce Event Bus
**Current**: Tight coupling between modules
**Target**: Event-driven architecture
**Effort**: 3 person-weeks
**Benefit**: Loose coupling, scalability
**Risk**: Medium (complexity increase)
Best Practices
✅ Do
- Start with high-level understanding
- Use semantic search for concept discovery
- Document assumptions and trade-offs
- Prioritize technical debt by business impact
- Propose incremental improvements
- Consider team capabilities and constraints
- Validate findings with codebase evidence
❌ Don't
- Propose complete rewrites without justification
- Ignore business context and constraints
- Recommend patterns without understanding requirements
- Overlook existing good patterns
- Focus only on technical perfection
- Ignore maintainability for over-engineering
Related Skills
analyze-yii2-project.md- Framework-specific architectural analysisextract-requirements.md- Understanding business requirementssemantic-search.md- Finding architectural patterns
Related Modules
From .ai/capabilities.json:
ast-analyzer- Code structure analysisdependency-analyzer- Module coupling analysisbusiness-analyzer- Domain capability mappingrequirements- Business rule extraction
Remember: Architecture is about making trade-offs. There are no perfect solutions, only appropriate ones for the context.