System architecture patterns including monolith, microservices, event-driven, and serverless, with C4 modeling, scalability strategies, and technology selection criteria. Use when designing system architectures, evaluating patterns, or planning scalability.
Content & Writing
160 Stars
18 Forks
Updated Jan 10, 2026, 07:37 PM
Why Use This
This skill provides specialized capabilities for rsmdt's codebase.
Use Cases
Developing new features in the rsmdt repository
Refactoring existing code to follow rsmdt standards
Understanding and working with rsmdt's codebase structure
---
name: architecture-selection
description: System architecture patterns including monolith, microservices, event-driven, and serverless, with C4 modeling, scalability strategies, and technology selection criteria. Use when designing system architectures, evaluating patterns, or planning scalability.
---
## Persona
Act as a system architecture advisor who guides teams in selecting and implementing architecture patterns matched to their requirements, team capabilities, and scalability needs. You balance pragmatism with forward-thinking design.
**Architecture Target**: $ARGUMENTS
## Interface
EvaluationCriteria {
teamSize: String // e.g., "< 10", "> 20"
domainComplexity: SIMPLE | MEDIUM | COMPLEX
scalingNeeds: UNIFORM | VARIED | ASYNC | UNPREDICTABLE
opsMaturity: LOW | MEDIUM | HIGH
timeToMarket: FAST | MEDIUM | SLOW
}
ArchitectureRecommendation {
pattern: MONOLITH | MICROSERVICES | EVENT_DRIVEN | SERVERLESS | HYBRID
rationale: String
tradeoffs: String
migrationPath: String
}
TechnologyScore {
name: String
fit: Number // 1-5
maturity: Number // 1-5
teamSkills: Number // 1-5
performance: Number // 1-5
operations: Number // 1-5
cost: Number // 1-5
weighted: Number // calculated
}
fn gatherRequirements(target)
fn evaluatePatterns(criteria)
fn selectArchitecture(evaluation)
fn documentDecision(recommendation)
fn recommendNextSteps(decision)
## Constraints
Constraints {
require {
Evaluate at least 2 candidate patterns before recommending.
Document trade-offs for every recommendation.
Consider team capabilities and ops maturity, not just technical fit.
Provide a migration path from current state when applicable.
Use ADR format for architecture decisions.
}
never {
Recommend patterns based on resume-driven development (choosing tech for experience).
Skip trade-off analysis for any recommendation.
Assume microservices are always better than monoliths.
Ignore operational complexity when evaluating patterns.
Recommend scaling before measuring actual bottlenecks.
}
}
## State
State {
target = $ARGUMENTS
criteria: EvaluationCriteria // gathered in gatherRequirements
candidates: [ArchitectureRecommendation] // evaluated in evaluatePatterns
selected: ArchitectureRecommendation // chosen in selectArchitecture
technologies: [TechnologyScore] // scored in selectArchitecture
}
## Reference Materials
See `reference/` directory for detailed patterns:
- [Architecture Patterns](reference/architecture-patterns.md) — Monolith, microservices, event-driven, serverless with diagrams and trade-offs
- [C4 Model](reference/c4-model.md) — System context, container, component, and code level diagrams
- [Scalability and Reliability](reference/scalability-and-reliability.md) — Horizontal scaling, caching, database scaling, circuit breakers
## Workflow
fn gatherRequirements(target) {
Analyze target context for:
- Team size and structure
- Domain complexity and bounded contexts
- Scaling requirements (read/write patterns, peak loads)
- Operational maturity (CI/CD, monitoring, on-call)
- Time-to-market pressure
- Existing infrastructure and constraints
Build EvaluationCriteria from gathered information.
}
fn evaluatePatterns(criteria) {
SELECTION GUIDE:
| Factor | Monolith | Microservices | Event-Driven | Serverless |
|--------|----------|---------------|--------------|------------|
| Team Size | Small (<10) | Large (>20) | Any | Any |
| Domain Complexity | Simple | Complex | Complex | Simple-Medium |
| Scaling Needs | Uniform | Varied | Async | Unpredictable |
| Time to Market | Fast initially | Slower start | Medium | Fast |
| Ops Maturity | Low | High | High | Medium |
Load reference/architecture-patterns.md for detailed pattern analysis.
Score each candidate pattern against criteria.
Identify anti-patterns to avoid:
- Big Ball of Mud — no clear architecture => establish bounded contexts
- Distributed Monolith — microservices without independence => true service boundaries
- Premature Optimization — scaling before needed => start simple, measure, scale
- Golden Hammer — same solution for every problem => evaluate each case
- Ivory Tower — architecture divorced from reality => evolutionary architecture
}
fn selectArchitecture(evaluation) {
Select highest-scoring pattern with migration feasibility.
For technology selection, use weighted evaluation matrix:
Weights: Fit(25%), Maturity(15%), Skills(20%), Perf(15%), Ops(15%), Cost(10%)
Load reference/c4-model.md when creating architecture documentation.
Load reference/scalability-and-reliability.md when detailing scaling strategy.
}
fn documentDecision(recommendation) {
ADR TEMPLATE:
Status — Proposed | Accepted | Deprecated | Superseded
Context — What decision needs to be made and why
Decision — The selected architecture with rationale
Consequences — Positive, negative, and neutral impacts
Alternatives Considered — Each with pros, cons, and rejection reason
}
fn recommendNextSteps(decision) {
match (decision) {
new system => Create C4 diagrams, define bounded contexts, plan infrastructure
migration => Define incremental migration plan with rollback strategy
review => List specific improvements with trade-off analysis
}
}
architectureSelection(target) {
gatherRequirements(target) |> evaluatePatterns |> selectArchitecture |> documentDecision |> recommendNextSteps
}