Skill

designing-architecture

Install
1
Install the plugin
$
npx claudepluginhub drewdresser/ai-dev-settings --plugin ai-dev

Want just this skill?

Add to a custom plugin, then install with one command.

Description

Knowledge and patterns for designing software architectures and system design.

Tool Access

This skill uses the workspace's default tool permissions.

Skill Content

Designing Architecture Skill

This skill provides patterns and techniques for designing robust software architectures.

Architecture Patterns

Layered Architecture

┌─────────────────────────────────┐
│       Presentation Layer        │
├─────────────────────────────────┤
│        Application Layer        │
├─────────────────────────────────┤
│         Domain Layer            │
├─────────────────────────────────┤
│       Infrastructure Layer      │
└─────────────────────────────────┘

Hexagonal Architecture (Ports & Adapters)

              ┌─────────────────┐
              │   REST API      │
              └────────┬────────┘
                       │
┌──────────┐   ┌──────▼──────┐   ┌──────────┐
│ Database │◀──│   Domain    │──▶│ External │
│ Adapter  │   │   Core      │   │   API    │
└──────────┘   └─────────────┘   └──────────┘

Microservices

┌─────────┐  ┌─────────┐  ┌─────────┐
│ Service │  │ Service │  │ Service │
│    A    │  │    B    │  │    C    │
└────┬────┘  └────┬────┘  └────┬────┘
     │            │            │
     └────────────┼────────────┘
                  │
           ┌──────▼──────┐
           │ Message Bus │
           └─────────────┘

Event-Driven Architecture

┌─────────┐     ┌───────────┐     ┌─────────┐
│ Producer│────▶│Event Store│────▶│Consumer │
└─────────┘     └───────────┘     └─────────┘

Design Principles

SOLID

  • Single Responsibility - One reason to change
  • Open/Closed - Open for extension, closed for modification
  • Liskov Substitution - Subtypes must be substitutable
  • Interface Segregation - Many specific interfaces
  • Dependency Inversion - Depend on abstractions

Other Principles

  • DRY - Don't Repeat Yourself
  • KISS - Keep It Simple, Stupid
  • YAGNI - You Aren't Gonna Need It
  • Separation of Concerns
  • Fail Fast

Common Patterns

Repository Pattern

class UserRepository:
    def get_by_id(self, user_id: str) -> User: ...
    def save(self, user: User) -> None: ...
    def delete(self, user_id: str) -> None: ...
    def find_by_email(self, email: str) -> Optional[User]: ...

Service Layer

class OrderService:
    def __init__(self, order_repo, payment_service, notification_service):
        self.order_repo = order_repo
        self.payment = payment_service
        self.notifications = notification_service

    def place_order(self, order: Order) -> OrderResult:
        self.order_repo.save(order)
        self.payment.charge(order.total)
        self.notifications.send_confirmation(order)

Factory Pattern

class NotificationFactory:
    @staticmethod
    def create(type: str) -> Notification:
        if type == "email":
            return EmailNotification()
        elif type == "sms":
            return SMSNotification()
        elif type == "push":
            return PushNotification()
        raise ValueError(f"Unknown type: {type}")

Strategy Pattern

class PaymentStrategy(Protocol):
    def process(self, amount: Decimal) -> PaymentResult: ...

class StripePayment:
    def process(self, amount: Decimal) -> PaymentResult: ...

class PayPalPayment:
    def process(self, amount: Decimal) -> PaymentResult: ...

class PaymentProcessor:
    def __init__(self, strategy: PaymentStrategy):
        self.strategy = strategy

    def pay(self, amount: Decimal) -> PaymentResult:
        return self.strategy.process(amount)

Non-Functional Requirements

Scalability

  • Horizontal vs vertical scaling
  • Stateless services
  • Caching strategies
  • Database sharding

Reliability

  • Circuit breakers
  • Retry with backoff
  • Graceful degradation
  • Health checks

Security

  • Authentication/Authorization
  • Data encryption
  • Input validation
  • Audit logging

Performance

  • Caching layers
  • Async processing
  • Connection pooling
  • Query optimization

Architecture Decision Records (ADR)

ADRs should be stored in /strategy/adrs/ using the naming convention ###-kebab-case-title.md.

Before making architectural decisions, check existing ADRs to avoid revisiting settled questions.

Template:

# ADR-001: [Decision Title]

**Status:** Proposed | Accepted | Deprecated | Superseded
**Date:** YYYY-MM-DD

## Context
[Why is this decision needed?]

## Decision
[What was decided?]

## Consequences

### Positive
- [Benefit 1]
- [Benefit 2]

### Negative
- [Trade-off 1]
- [Trade-off 2]

### Risks
- [Risk 1]

Workflow Integration

ADRs are part of the broader strategy workflow:

  • /strategy/VISION.md — Strategic context
  • /strategy/OKRs.md — Current priorities
  • /strategy/epics/ — Feature initiatives
  • /strategy/tasks/ — Specific work items
  • /strategy/adrs/ — Architectural decisions (you are here)

Diagramming

Component Diagram

┌─────────────────────────────────────────┐
│              Application                 │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  │
│  │   API   │  │ Service │  │   DB    │  │
│  │ Gateway │─▶│  Layer  │─▶│ Access  │  │
│  └─────────┘  └─────────┘  └────┬────┘  │
└──────────────────────────────────┼──────┘
                                   │
                            ┌──────▼──────┐
                            │  Database   │
                            └─────────────┘

Sequence Diagram (ASCII)

Client          API           Service        Database
  │              │               │               │
  │──request────▶│               │               │
  │              │──validate────▶│               │
  │              │              ││──query───────▶│
  │              │              ││◀──result──────│
  │              │◀──response───│               │
  │◀──response───│               │               │
Stats
Stars0
Forks0
Last CommitJan 22, 2026
Actions

Similar Skills