Master architectural design with SOLID principles, design patterns, microservices, and event-driven systems. Learn to design scalable backend systems.
Applies SOLID principles and design patterns to select optimal architectures (monolith, microservices, event-driven) based on team size and complexity requirements.
/plugin marketplace add pluginagentmarketplace/custom-plugin-backend/plugin install backend-development-assistant@pluginagentmarketplace-backendThis skill inherits all available tools. When active, it can use any tool Claude has access to.
assets/README.mdassets/config.yamlassets/design-patterns.yamlreferences/ARCHITECTURE_GUIDE.mdreferences/GUIDE.mdreferences/README.mdscripts/README.mdscripts/analyze_dependencies.shscripts/helper.pyBonded to: architecture-patterns-agent
# Invoke architecture skill
"Help me decompose this monolith into microservices"
"Which design pattern should I use for notifications?"
"Design an event-driven architecture for order processing"
| Style | Best For | Team Size | Complexity | Scale |
|---|---|---|---|---|
| Monolith | MVPs, small teams | 1-10 | Low | Vertical |
| Modular Monolith | Growing apps | 5-20 | Medium | Vertical |
| Microservices | Large teams | 20+ | High | Horizontal |
| Serverless | Variable load | 1-15 | Medium | Auto |
| Event-Driven | Real-time, async | 10+ | High | Horizontal |
Team size & complexity?
│
├─→ Small team (1-5) → Monolith
│
├─→ Growing team (5-20)
│ ├─→ Clear domain boundaries → Modular Monolith
│ └─→ Variable load → Serverless
│
└─→ Large team (20+)
├─→ Real-time/async heavy → Event-Driven
└─→ Independent scaling needed → Microservices
| Principle | Description | Violation Sign |
|---|---|---|
| Single Responsibility | One reason to change | Class does too many things |
| Open/Closed | Open for extension, closed for mod | Editing existing code for new features |
| Liskov Substitution | Subtypes substitutable | Subclass changes behavior unexpectedly |
| Interface Segregation | Small, specific interfaces | Clients implement unused methods |
| Dependency Inversion | Depend on abstractions | High-level depends on low-level |
| Pattern | Use Case |
|---|---|
| Singleton | Global config, connection pools |
| Factory | Object creation with logic |
| Builder | Complex object construction |
| Pattern | Use Case |
|---|---|
| Adapter | Interface compatibility |
| Decorator | Dynamic behavior extension |
| Facade | Simplified interface |
| Proxy | Access control, caching |
| Pattern | Use Case |
|---|---|
| Observer | Event notifications |
| Strategy | Algorithm selection |
| Command | Action encapsulation |
| State | State machines |
E-commerce Monolith → Microservices
Services:
├── user-service (auth, profiles)
├── product-service (catalog, inventory)
├── order-service (orders, checkout)
├── payment-service (transactions)
├── notification-service (email, push)
└── api-gateway (routing, auth)
Communication:
├── Sync: REST/gRPC for queries
└── Async: Event bus for commands/events
from abc import ABC, abstractmethod
from typing import List
class Observer(ABC):
@abstractmethod
def update(self, event: dict) -> None:
pass
class NotificationService:
def __init__(self):
self._observers: List[Observer] = []
def subscribe(self, observer: Observer) -> None:
self._observers.append(observer)
def notify(self, event: dict) -> None:
for observer in self._observers:
observer.update(event)
class EmailHandler(Observer):
def update(self, event: dict) -> None:
send_email(event["user_id"], event["message"])
class PushHandler(Observer):
def update(self, event: dict) -> None:
send_push(event["user_id"], event["message"])
# Saga pattern for order processing
class OrderSaga:
async def process_order(self, order_id: str):
try:
# Step 1: Reserve inventory
await self.inventory_service.reserve(order_id)
# Step 2: Process payment
await self.payment_service.charge(order_id)
# Step 3: Confirm order
await self.order_service.confirm(order_id)
except PaymentError:
# Compensating transaction
await self.inventory_service.release(order_id)
await self.order_service.cancel(order_id)
raise
| Anti-Pattern | Sign | Solution |
|---|---|---|
| Distributed Monolith | Services too coupled | Define bounded contexts |
| God Class | One class does everything | Extract by responsibility |
| Circular Dependencies | A→B→C→A | Introduce interfaces |
| Shared Database | Multiple services, one DB | Database per service |
# tests/test_architecture.py
import pytest
class TestServiceBoundaries:
def test_services_are_independent(self):
# Each service should work independently
user_service = UserService()
order_service = OrderService()
# Services communicate via events/APIs, not direct calls
assert not hasattr(order_service, 'user_repository')
def test_no_circular_dependencies(self):
from app.services import dependency_graph
cycles = dependency_graph.find_cycles()
assert len(cycles) == 0
See references/ directory for:
ARCHITECTURE_GUIDE.md - Detailed patternsdesign-patterns.yaml - Pattern catalogThis skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.