When to Use This Skill
Use this skill when planning architectural changes that span multiple components or affect the system's architectural layers. This includes refactoring efforts, adding cross-cutting concerns, introducing new architectural patterns, or any modification that requires understanding how changes propagate through the system.
How to Use This Skill
- •Analyze current architecture – Read the system-level diagram to understand component relationships and dependencies.
- •Deep-dive into affected components – Read component-level diagrams for all potentially impacted areas.
- •Assess impact across tiers – Evaluate how changes affect each architectural layer (Foundation, Infrastructure, Domain, Application).
- •Consider database implications – Analyze database schema changes and migration requirements.
- •Plan backwards compatibility – Design versioning strategy to maintain compatibility during migration.
- •Create migration plan – Design an incremental, testable path from current to target state.
- •Generate TODO list – Create a structured task list for tracking the migration.
- •Document architectural updates – Plan PlantUML diagram updates to reflect the changes.
- •Validate plan – Ensure each step maintains system integrity and is independently deployable.
Detailed Instructions
Step 1: Understand the Current Architecture
Read the system architecture diagram:
- •Location:
projects/modeling/ores.puml - •Identify all components and their dependencies.
- •Note the architectural layers:
- •Foundation Layer (ores.utility)
- •Infrastructure Layer (ores.comms, ores.testing)
- •Domain Layer (ores.refdata, ores.accounts)
- •Application Layer (ores.client, ores.cli, ores.qt, ores.service)
Step 2: Analyze Component Internals
For each component potentially affected by the proposed change:
- •Location:
projects/COMPONENT/modeling/COMPONENT.puml - •Read the component diagram to understand:
- •Internal class structure and relationships
- •Key domain entities and their responsibilities
- •Generators, repositories, and other supporting infrastructure
- •Dependencies on other components
Step 3: Perform Impact Analysis
Evaluate the proposed change across all architectural tiers:
Foundation Layer
- •Will this change require new utility classes or modifications to existing ones?
- •Are there shared abstractions that need to change?
Infrastructure Layer
- •Does this affect communication protocols or messaging?
- •Are there testing infrastructure changes needed?
Domain Layer
- •Which domain entities are affected?
- •Do we need new domain types or modifications to existing ones?
- •What repository changes are required?
Application Layer
- •Which applications/interfaces need updates?
- •How does this affect the CLI, service, or GUI?
Step 4: Analyze Database Schema Implications
For changes affecting data persistence:
Schema Changes
- •What tables need to be added, modified, or removed?
- •What columns need to be added, modified, or removed?
- •Are there index changes required?
- •Do we need new constraints or relationships?
Migration Strategy
- •Can the schema change be applied incrementally?
- •Do we need to support both old and new schemas during migration?
- •What is the data migration path?
- •Are there performance considerations during migration?
Stored Procedures and Business Logic
- •Would business logic in stored procedures improve performance?
- •What is the trade-off between layer separation and efficiency?
- •Document any architectural compromises and their justification.
Step 5: Design Backwards Compatibility Strategy
Versioning Approach
- •Will this be a breaking change?
- •Do we need to version APIs, protocols, or data formats?
- •What is the deprecation timeline for old versions?
Compatibility Mechanisms
- •Can we support both old and new versions simultaneously?
- •Do we need feature flags or configuration switches?
- •How long must we maintain backwards compatibility?
Migration Path for Clients
- •How will existing clients transition to the new version?
- •What migration documentation is needed?
- •Are there automated migration tools required?
Step 6: Create an Incremental Migration Plan
Design a step-by-step migration that:
- •Starts at the foundation – Make changes to lower layers first (utility, infrastructure).
- •Progresses upward – Move to domain layer, then application layer.
- •Maintains compatibility – Each step should leave the system in a working state.
- •Enables testing – Every increment should be testable.
- •Minimizes risk – Break large changes into smaller, reviewable chunks.
For each step, specify:
- •What components are modified
- •What new files/classes are added
- •What dependencies change
- •What database schema changes are needed
- •What tests are needed
- •Expected build targets to verify the change
- •What PlantUML diagrams need updating
Step 7: Document Dependencies and Ordering
Create a dependency graph showing:
- •Which changes must happen before others
- •Which changes can happen in parallel
- •Critical paths in the migration
- •Database migration sequencing
- •Diagram update sequencing
Step 8: Plan Documentation Updates
PlantUML Diagram Updates
For each architectural change, plan diagram updates:
- •
System Diagram
- •Location:
projects/modeling/ores.puml - •Update component relationships
- •Add new components
- •Update layer assignments
- •Regenerate with:
cmake --build --target generate_ores_diagram --preset linux-clang-debug
- •Location:
- •
Component Diagrams
- •Location:
projects/COMPONENT/modeling/COMPONENT.puml - •Update affected component diagrams
- •Add new classes, relationships, or namespaces
- •Update stereotypes and colors as needed
- •Regenerate with:
cmake --build --target generate_COMPONENT_diagram --preset linux-clang-debug
- •Location:
- •
Diagram Update Timing
- •Update diagrams incrementally as changes are implemented
- •Keep diagrams in sync with code at each migration step
- •Include diagram updates in the TODO list
Step 9: Generate Migration TODO List
Use the TodoWrite tool to create a structured task list with:
Task Categories
- •Architecture analysis tasks
- •Database schema changes
- •Foundation layer changes
- •Infrastructure layer changes
- •Domain layer changes
- •Application layer changes
- •Testing tasks
- •Documentation updates (including PlantUML diagrams)
- •Deployment tasks
Task Details
For each task:
- •Clear description of what needs to be done
- •Component or layer being modified
- •Dependencies on other tasks
- •Acceptance criteria
- •Build target to verify completion
Step 10: Validate the Plan
Before execution:
- •Confirm all affected components are identified
- •Verify no circular dependencies are introduced
- •Ensure each step is independently buildable and testable
- •Check that the plan aligns with architectural principles
- •Validate that layer separation is maintained, except where justified by performance or efficiency gains
- •Confirm backwards compatibility strategy is sound
- •Verify database migration path is safe and reversible
- •Ensure all diagram updates are planned
Step 11: Consider Architectural Trade-offs
Layer Separation vs. Efficiency
While strict layer separation is preferred:
- •Performance considerations: Business logic in stored procedures may be acceptable if it significantly improves performance
- •Efficiency gains: Direct database access may be warranted in specific performance-critical paths
- •Documentation requirement: Any deviation from strict layer separation must be:
- •Clearly documented in code comments
- •Justified in the architecture decision records
- •Noted in the migration plan
- •Reviewed for long-term maintainability
Decision Criteria
When considering architectural compromises:
- •Measure the performance/efficiency gain
- •Assess the maintainability cost
- •Consider alternative solutions that maintain separation
- •Document the trade-off analysis
- •Get stakeholder approval for significant deviations