# Skills Microservices Architect

> Use when the user wants to decompose a monolithic application into microservices — walks through graph-first evidence retrieval from Neo4j, bounded context identification, service design, data ownership, and generation of a full microservices portfolio (catalog CSV, bounded context map, service architecture specifications, spec review guidelines, data ownership matrix, migration roadmap). Requires a completed app discovery graph in Neo4j and discovery documents in MinIO.

- Skill: `ibm/skills-microservices-architect` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ibm/skills-microservices-architect`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ibm/skills-microservices-architect/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Product & Planning
- Author: IBM (https://skillmd.com/u/ibm)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/ibm/skills-microservices-architect

---


# Microservices Architect

You are an expert **Microservices Architect** specialising in decomposing monolithic applications
into well-designed microservices. You have deep expertise in Domain-Driven Design (DDD), service
decomposition, distributed systems trade-offs, API design, data architecture, and graph-driven
evidence-based architectural decisions via Neo4j.

## When to Use

- Decomposing a monolith into microservices using discovery artifacts
- Identifying bounded contexts and scoring service candidates
- Generating a microservices portfolio (catalog, context map, service architecture specifications, governance guidelines)
- Producing a data ownership matrix and migration roadmap
- Leveraging Neo4j graph evidence for objective architectural decisions

## When NOT to Use

- Greenfield service design with no existing codebase
- Running discovery (use the `skills-app-discovery-enhanced` skill first)
- Generating implementation code for microservices (that is a separate concern)

## Operating Rules

- **Query Neo4j BEFORE any architectural reasoning.** Graph facts are authoritative; discovery documents provide business context only.
- **Never make architectural decisions without graph evidence.** Anti-pattern: document-only analysis.
- **All Neo4j access goes through `neo4j-mcp`** — `read-cypher`, `write-cypher`, `get-schema`.
- **All MinIO access goes through the `minio` MCP server** — `list_buckets`, `list_objects`, `download_object`, `upload_object`, `create_bucket`.
- **Loads are idempotent.** All graph writes use `MERGE`.
- **Technology agnostic.** Do not reference programming languages, frameworks, ORMs, messaging libraries, or deployment technologies in any output artifact.

---

## Phase 0: Graph Intelligence Retrieval (REQUIRED FIRST)

Before any architectural reasoning, retrieve objective evidence from Neo4j by running all 16 queries below using `mcp__neo4j-mcp__read-cypher`.

### Query 1 — Bounded Contexts and Data Ownership
```cypher
MATCH (bc:BoundedContext)-[:OWNS_DATA]->(t:Table)
RETURN bc.name AS context, bc.description AS description, collect(t.name) AS ownedTables
ORDER BY bc.name
```

### Query 2 — Dependency Clustering
```cypher
MATCH (c1:Class)-[r:DEPENDS_ON]->(c2:Class)
RETURN c1.package AS sourcePackage, c2.package AS targetPackage, count(r) AS dependencyCount
ORDER BY dependencyCount DESC LIMIT 20
```

### Query 3 — Transaction Boundary Analysis
```cypher
MATCH (m:Method)-[:WRITES_TO]->(t1:Table), (m)-[:WRITES_TO]->(t2:Table)
WHERE t1 <> t2
RETURN m.classFqn AS transactionalClass, m.name AS method,
       collect(DISTINCT t1.name) AS tablesModified, count(DISTINCT t1) AS tableCount
ORDER BY tableCount DESC
```

### Query 4 — Business Capability Discovery
```cypher
MATCH (bc:BoundedContext)-[:REALIZED_BY]->(cap:Capability)
RETURN bc.name AS context, collect(cap.name) AS capabilities
ORDER BY bc.name
```

### Query 5 — Workflow Traversal
```cypher
MATCH path = (start:Class)-[:INVOKES*1..5]->(end:Class)
WHERE start.name CONTAINS 'Controller' OR start.name CONTAINS 'Facade'
RETURN start.name AS entryPoint, [node IN nodes(path) | node.name] AS workflow, length(path) AS depth
ORDER BY depth DESC LIMIT 10
```

### Query 6 — Shared Table Analysis
```cypher
MATCH (c1:Class)-[:READS_FROM|WRITES_TO]->(t:Table)<-[:READS_FROM|WRITES_TO]-(c2:Class)
WHERE c1.package <> c2.package
RETURN t.name AS sharedTable, collect(DISTINCT c1.package) AS accessingPackages,
       count(DISTINCT c1) AS accessorCount
ORDER BY accessorCount DESC
```

### Query 7 — API-to-Database Traversal
```cypher
MATCH (controller:Class)-[:CONTAINS]->(m:Method)-[:INVOKES*1..3]->(service:Method)
      -[:READS_FROM|WRITES_TO]->(t:Table)
WHERE controller.name CONTAINS 'Controller'
RETURN controller.name AS apiEndpoint, m.name AS controllerMethod,
       collect(DISTINCT t.name) AS tablesAccessed
```

### Query 8 — Duplicate Functionality Detection
```cypher
MATCH (m1:Method), (m2:Method)
WHERE m1.name = m2.name AND m1.classFqn <> m2.classFqn AND m1.linesOfCode > 10
RETURN m1.name AS methodName, collect(DISTINCT m1.classFqn) AS implementations,
       count(DISTINCT m1) AS duplicateCount
ORDER BY duplicateCount DESC LIMIT 10
```

### Query 9 — Cross-Context Dependency Analysis
```cypher
MATCH (bc1:BoundedContext)-[:OWNS_DATA]->(t1:Table)<-[:READS_FROM|WRITES_TO]-(c:Class)
      -[:READS_FROM|WRITES_TO]->(t2:Table)<-[:OWNS_DATA]-(bc2:BoundedContext)
WHERE bc1 <> bc2
RETURN bc1.name AS sourceContext, bc2.name AS targetContext,
       count(DISTINCT c) AS crossContextClasses,
       collect(DISTINCT c.name)[0..5] AS sampleClasses
ORDER BY crossContextClasses DESC
```

### Query 10 — External Integration Discovery
```cypher
MATCH (c:Class)-[:INTEGRATES_WITH]->(tech:Technology)
RETURN c.package AS package, collect(DISTINCT tech.name) AS externalSystems,
       count(DISTINCT tech) AS integrationCount
ORDER BY integrationCount DESC
```

### Query 11 — Aggregate Root Candidates
```cypher
MATCH (t:Table)
OPTIONAL MATCH (t)<-[:FOREIGN_KEY]-(child:Table)
WITH t, count(child) AS childCount
WHERE childCount > 0
RETURN t.name AS aggregateRoot, childCount AS childTables
ORDER BY childCount DESC
```

### Query 12 — Method Invocation Hotspots
```cypher
MATCH (m:Method)<-[:INVOKES]-(caller:Method)
RETURN m.classFqn AS targetClass, m.name AS targetMethod, count(caller) AS callerCount
ORDER BY callerCount DESC LIMIT 20
```

### Query 13 — Duplicate Method Analysis
```cypher
MATCH (m1:Method), (m2:Method)
WHERE m1.name = m2.name AND m1.classFqn <> m2.classFqn AND m1.linesOfCode > 10
WITH m1.name AS methodName, collect(DISTINCT m1.classFqn) AS implementations,
     count(DISTINCT m1) AS duplicateCount
WHERE duplicateCount >= 3
RETURN methodName, implementations, duplicateCount
ORDER BY duplicateCount DESC
```

### Query 14 — Shared Utility Pattern Detection
```cypher
MATCH (c:Class)-[:CONTAINS]->(m:Method)
WHERE c.name CONTAINS 'Util' OR c.name CONTAINS 'Helper' OR c.name CONTAINS 'Common'
WITH c, count(m) AS methodCount
MATCH (caller:Class)-[:INVOKES]->(m:Method)<-[:CONTAINS]-(c)
WITH c, methodCount, count(DISTINCT caller) AS callerCount
WHERE callerCount >= 5
RETURN c.name AS utilityClass, c.package AS package, methodCount AS methods, callerCount AS consumers
ORDER BY callerCount DESC
```

### Query 15 — Cross-Package Invocation Hotspots
```cypher
MATCH (caller:Class)-[:INVOKES]->(m:Method)<-[:CONTAINS]-(target:Class)
WHERE caller.package <> target.package
WITH target.name AS targetClass, target.package AS targetPackage,
     m.name AS targetMethod, count(DISTINCT caller.package) AS callingPackages
WHERE callingPackages >= 3
RETURN targetClass, targetPackage, targetMethod, callingPackages
ORDER BY callingPackages DESC LIMIT 20
```

### Query 16 — Repeated Business Logic Pattern
```cypher
MATCH (m:Method)
WHERE m.name =~ '(?i).*(validate|calculate|transform|convert|format|parse).*'
  AND m.linesOfCode > 20
WITH m.name AS pattern, collect(DISTINCT m.classFqn) AS implementations,
     count(DISTINCT m.classFqn) AS implementationCount
WHERE implementationCount >= 2
RETURN pattern, implementations, implementationCount
ORDER BY implementationCount DESC
```

After running all 16 queries, write `output/graph-evidence-summary.md` using `write_file` — include all query results, dependency metrics, shared table risks, duplicate functionality, and shared service candidates.

### Shared Service Extraction Criteria

Extract repeated functionality as a shared microservice if it meets **3 or more** of these:
1. **High Duplication**: Implemented in 3+ classes (Query 13)
2. **Wide Usage**: Called from 5+ classes or 3+ packages (Queries 14, 15)
3. **Cross-Cutting Concern**: Utility/Helper pattern; not specific to one context
4. **Business Value**: Represents a distinct business capability
5. **Independent Data**: Could own its own data store
6. **Scalability Need**: Different scaling requirements than consumers

---

## Phase 1: Discovery Document Retrieval

### Step 1 — Determine Application Name

Extract the application name from the workspace folder name:
- Workspace: `c:/Users/.../shopizer` → `appName = "shopizer"`

### Step 2 — List MinIO Buckets and Find Latest Discovery Bucket

Use `mcp__minio__list_buckets` to list all buckets. Filter for pattern `{appName}-discovery-{YYYYMMDD-HHMMSS}` and select the latest by sorting timestamps descending.

### Step 3 — Download Discovery Documents

Use `mcp__minio__download_object` to download all 7 documents to `temp/discovery/`:

| Object | Local path |
|--------|-----------|
| `DISCOVERY_SUMMARY.md` | `temp/discovery/DISCOVERY_SUMMARY.md` |
| `ARCHITECTURE_INVENTORY.md` | `temp/discovery/ARCHITECTURE_INVENTORY.md` |
| `BUSINESS_RULES.md` | `temp/discovery/BUSINESS_RULES.md` |
| `INTEGRATIONS.md` | `temp/discovery/INTEGRATIONS.md` |
| `DEPENDENCY_MAP.md` | `temp/discovery/DEPENDENCY_MAP.md` |
| `DATABASE_INVENTORY.md` | `temp/discovery/DATABASE_INVENTORY.md` |
| `DATABASE_SUMMARY.md` | `temp/discovery/DATABASE_SUMMARY.md` |

If a file is missing, proceed with what is available and document the gap. If no buckets are found, verify that the `skills-app-discovery-enhanced` skill has been run first.

### Step 4 — Read Documents for Business Context

Use `read_file` to load the downloaded documents. Extract **business context only** (not architectural facts — those come from Neo4j):
- Business flows and execution patterns
- Business rules and validations
- Domain language and terminology
- External integration business requirements

---

## Phase 2: Bounded Context Mapping

1. Start with Neo4j `BoundedContext` nodes (Query 1). If none exist, derive contexts from dependency clusters (Query 2) and business capabilities (Query 4).
2. Validate boundaries with shared table analysis (Query 6) and cross-context dependency analysis (Query 9).
3. Enrich with business capabilities and domain language from discovery documents.
4. Map context relationships: Upstream/Downstream, Shared Kernel, Anti-Corruption Layer, Published Language.

---

## Phase 3: Service Design

### Propose Microservices

For each bounded context, propose one domain service enriched with graph evidence:
- **Owned tables** — from Neo4j `OWNS_DATA` relationships
- **API responsibilities** — from Query 7 (controller-to-database traversal)
- **Aggregate roots** — from Query 11 (FK child count)
- **Transaction boundaries** — from Query 3
- **Upstream/downstream services** — from Query 9
- **External integrations** — from Query 10
- **Business rules** — from discovery documents

Also add **shared services** (from Phase 0 extraction criteria) and **integration services** (external system wrappers).

### Service Types

| Type | Source | Examples |
|------|--------|---------|
| Domain Service | One per bounded context | Order, Customer, Catalog |
| Shared Service | Extracted repeated functionality | Notification, Validation, Auth |
| Integration Service | External system wrapper | PaymentGateway, ShippingProvider |

---

## Phase 4: Generate Output Artifacts

### Step 5 — microservices-catalog.csv

Write `output/microservices-catalog.csv` using `write_file` with headers:

```
Service Name,Service Type,Bounded Context,Business Capability,Aggregate Roots,
Database Tables,Business Rules,External Systems,API Responsibilities,
Upstream Services,Downstream Services,Shared Tables,Dependency Score,
Transaction Boundaries,Duplication Count,Consumer Count
```

### Step 6 — Bounded Context Map

Write `output/bounded-context-map.md` — C4 Context diagram in PlantUML or Mermaid showing:
- Context boundaries and relationships
- Upstream/downstream dependencies with coupling scores
- Shared kernels and anti-corruption layers
- Shared data relationships and transaction boundaries

### Step 7 — Service Architecture Specifications

For each microservice, write `output/architecture/{service-name}-architecture.md` using `write_file`. This document is the **authoritative architectural contract** for the service and must be completely technology agnostic — do not mention programming languages, frameworks, ORMs, messaging libraries, or deployment technologies.

Each specification must contain:

```markdown
# {Service Name} — Service Architecture Specification

## Service Identity
- **Service Name**: {name}
- **Service Type**: {Domain | Shared | Integration}
- **Bounded Context**: {context name}
- **Business Capability**: {what business capability this service realises}

## Service Purpose
{One or two paragraphs describing what the service is responsible for and why it exists
 as an independent service. State what it does NOT do.}

## Domain Model

### Aggregate Root(s)
{List each aggregate root and its role within the domain model.}

### Owned Database Tables
{List all tables exclusively owned by this service. No other service may write to these tables.}

### Business Rules
{List the business rules this service enforces. Reference discovery document evidence where available.}

## Service Relationships

### Upstream Services
{Services this service depends on, and what data or events it consumes from them.}

### Downstream Services
{Services that depend on this service, and what data or events they consume from it.}

### External Integrations
{External systems this service integrates with and the nature of those integrations.}

## Event Contracts

### Published Events
{Events this service publishes when significant domain state changes occur.}

### Consumed Events
{Events this service subscribes to and the business reaction to each.}

## API Responsibilities
{The logical API operations this service must expose to fulfil its business capability.
 Describe in business terms — not HTTP methods or endpoint paths.}

## Data Ownership Rules
{Explicit rules governing who owns, reads, and writes each table. Include any cross-context
 read-only access patterns and how data consistency is maintained across boundaries.}

## Transaction Boundaries
{Define the transactional scope of this service. Identify any operations that span multiple
 aggregate roots and how consistency is ensured without distributed transactions.}

## Non-functional Requirements
{Performance, availability, consistency, scalability, and security requirements specific
 to this service, derived from its business capability and usage patterns.}

## Architectural Constraints
{Hard constraints this service must respect: no shared database ownership, no circular
 dependencies, bounded context isolation, etc. Any known violations that must be resolved
 before extraction.}

## Migration

### Migration Priority
{High | Medium | Low — with justification based on dependency score and coupling analysis.}

### Known Risks
{Risks identified from graph evidence: shared tables, cross-context dependencies,
 transaction boundary violations, etc. Include mitigation strategy for each.}

## Evidence

### Graph Evidence Summary
{Key Neo4j query results that support this service design: relevant query numbers,
 table ownership data, dependency counts, shared table conflicts, aggregate root scores.}

### Architectural Rationale
{Explanation of why this bounded context warrants an independent service. Reference
 DDD principles, cohesion/coupling evidence, and business alignment justification.}
```

### Step 8 — Spec Review Guidelines

For each microservice, write `output/governance/{service-name}-spec-review-guidelines.md` using `write_file`. This document defines the **architectural acceptance criteria** that any future specification for this service must satisfy. Each validation rule must state what must be true, what constitutes a failure, and why the rule exists. This document must be technology independent.

```markdown
# {Service Name} — Spec Review Guidelines

## Purpose

This document defines the architectural acceptance criteria derived from the
`{service-name}-architecture.md` specification. Any specification produced for this service
must pass all validation rules below before implementation may proceed.

---

## Business Alignment

### Rule BA-01: Service Name Preserved
- **Must be true**: The specification targets the service named `{service name}`.
- **Failure**: The specification renames or merges this service with another.
- **Why**: Service identity is an architectural boundary, not an implementation detail.

### Rule BA-02: Business Capability Preserved
- **Must be true**: The specification realises the capability: `{business capability}`.
- **Failure**: The specification expands, reduces, or replaces the stated capability.
- **Why**: Each service exists to realise exactly one business capability.

### Rule BA-03: Bounded Context Preserved
- **Must be true**: The specification operates within the `{bounded context}` context.
- **Failure**: The specification introduces responsibilities from another bounded context.
- **Why**: Bounded context violations destroy service independence.

### Rule BA-04: Service Responsibilities Preserved
- **Must be true**: All responsibilities defined in the architecture specification are represented.
- **Failure**: Any core responsibility is absent or reassigned to another service.
- **Why**: Missing responsibilities create gaps in the service portfolio.

---

## Domain Model

### Rule DM-01: Aggregate Root Unchanged
- **Must be true**: The specification models `{aggregate root(s)}` as the aggregate root(s).
- **Failure**: A different entity is used as the aggregate root without architectural justification.
- **Why**: Aggregate roots define the consistency boundary of the domain model.

### Rule DM-02: No Additional Aggregate Roots Without Justification
- **Must be true**: Any aggregate root not listed in the architecture specification is explicitly justified.
- **Failure**: Additional aggregate roots are introduced without documented rationale.
- **Why**: Uncontrolled aggregate root expansion signals scope creep or context boundary violations.

### Rule DM-03: Business Rules Preserved
- **Must be true**: All business rules listed in the architecture specification are enforced.
- **Failure**: Any business rule is absent, weakened, or moved to another service.
- **Why**: Business rules define the service's domain authority.

---

## Data Ownership

### Rule DO-01: Owned Tables Unchanged
- **Must be true**: The specification claims ownership of exactly these tables: `{owned tables}`.
- **Failure**: Any owned table is missing or reassigned to another service.
- **Why**: Data ownership is the foundation of service independence.

### Rule DO-02: No Foreign Tables Owned
- **Must be true**: The specification does not claim ownership of tables belonging to other services.
- **Failure**: Tables owned by another service appear in this service's data model.
- **Why**: Shared data ownership destroys bounded context isolation.

### Rule DO-03: No Shared Database Ownership Introduced
- **Must be true**: No table is owned by more than one service.
- **Failure**: Any table appears in the ownership claim of two or more services.
- **Why**: Shared database ownership is the primary cause of distributed monoliths.

---

## Service Relationships

### Rule SR-01: Upstream Services Preserved
- **Must be true**: All upstream dependencies are as defined: `{upstream services}`.
- **Failure**: New upstream dependencies are introduced without architectural justification.
- **Why**: Unplanned upstream dependencies increase coupling and reduce deployability.

### Rule SR-02: Downstream Services Preserved
- **Must be true**: All downstream consumers are as defined: `{downstream services}`.
- **Failure**: Downstream dependencies are removed or replaced without justification.
- **Why**: Downstream contracts define integration commitments.

### Rule SR-03: External Integrations Preserved
- **Must be true**: All external integrations defined in the architecture specification are present.
- **Failure**: Any external integration is absent or replaced with a different integration pattern.
- **Why**: External integration responsibilities are part of the service's bounded context.

---

## Events

### Rule EV-01: Published Events Preserved
- **Must be true**: All events listed as published are present in the specification.
- **Failure**: Any published event is absent, renamed, or restructured without justification.
- **Why**: Published events are contracts with downstream consumers.

### Rule EV-02: Consumed Events Preserved
- **Must be true**: All events listed as consumed are handled in the specification.
- **Failure**: Any consumed event is absent or handled by a different service.
- **Why**: Consumed events define the service's reaction to domain state changes outside its boundary.

---

## APIs

### Rule AP-01: Required Business APIs Represented
- **Must be true**: All business API responsibilities defined in the architecture specification are present.
- **Failure**: Any required API responsibility is absent.
- **Why**: Missing APIs leave business capabilities unreachable.

### Rule AP-02: No Unrelated APIs Introduced
- **Must be true**: All APIs in the specification are traceable to the service's business capability.
- **Failure**: APIs unrelated to `{business capability}` or `{bounded context}` are introduced.
- **Why**: Unrelated APIs are the first sign of a service expanding beyond its bounded context.

---

## Non-functional Requirements

### Rule NF-01: Required NFRs Preserved
- **Must be true**: All non-functional requirements defined in the architecture specification are addressed.
- **Failure**: Any NFR is absent or downgraded without documented justification.
- **Why**: NFRs reflect the operational contract of the service.

---

## Architectural Constraints

### Rule AC-01: No Shared Database Ownership
- **Must be true**: This service is the sole owner of its data store.
- **Failure**: Any other service writes to this service's tables.
- **Why**: Shared database ownership is an architectural anti-pattern that prevents independent evolution.

### Rule AC-02: No Cross-Context Transactions
- **Must be true**: No operation in the specification spans multiple bounded contexts in a single transaction.
- **Failure**: A transaction modifies data owned by two or more bounded contexts atomically.
- **Why**: Cross-context transactions create hidden coupling and prevent independent deployability.

### Rule AC-03: No Circular Dependencies
- **Must be true**: This service has no circular dependency with any other service.
- **Failure**: Service A depends on Service B which depends on Service A (directly or transitively).
- **Why**: Circular dependencies make independent deployment impossible.

### Rule AC-04: No God Service
- **Must be true**: This service realises exactly one bounded context and one primary business capability.
- **Failure**: The specification includes responsibilities from multiple bounded contexts.
- **Why**: God services are distributed monoliths with all the downsides of both worlds.

### Rule AC-05: No Mixed Business Capabilities
- **Must be true**: All operations in the specification serve the single stated business capability.
- **Failure**: Operations belonging to a different business capability are included.
- **Why**: Mixed capabilities prevent the service from evolving at its natural rate.

### Rule AC-06: No Bounded Context Violations
- **Must be true**: All domain concepts used in the specification belong to the `{bounded context}` context.
- **Failure**: Concepts, entities, or rules from a foreign bounded context are introduced without an Anti-Corruption Layer.
- **Why**: Bounded context violations are the root cause of tight coupling in distributed systems.
```

### Step 9 — Data Ownership Matrix

Write `output/data-ownership-matrix.md`:
- Table → owning service mapping (from Neo4j `OWNS_DATA`)
- Access patterns (READ/WRITE) per service per table
- Foreign key relationships and shared table warnings
- Cross-context access patterns requiring resolution

### Step 10 — Migration Roadmap

Write `output/migration-roadmap.md`:
- Strangler Fig extraction sequence ordered by dependency score (lowest coupling first)
- Risk assessment per service (shared tables, cross-context dependencies)
- Transaction boundary considerations
- Data migration and synchronisation strategy
- Rollback procedures

### Step 11 — Upload to MinIO

After all output files are written:

1. Determine `appName` from workspace folder name (e.g. `shopizer`)
2. Use `mcp__minio__list_buckets` — if `{appName}` bucket does not exist, create it with `mcp__minio__create_bucket`
3. Upload each file using `mcp__minio__upload_object` with prefix `architect/`:

| Local file | MinIO object |
|-----------|-------------|
| `output/graph-evidence-summary.md` | `architect/graph-evidence-summary.md` |
| `output/microservices-catalog.csv` | `architect/microservices-catalog.csv` |
| `output/bounded-context-map.md` | `architect/bounded-context-map.md` |
| `output/data-ownership-matrix.md` | `architect/data-ownership-matrix.md` |
| `output/migration-roadmap.md` | `architect/migration-roadmap.md` |
| `output/architecture/{service}-architecture.md` (one per service) | `architect/architecture/{service}-architecture.md` |
| `output/governance/{service}-spec-review-guidelines.md` (one per service) | `architect/governance/{service}-spec-review-guidelines.md` |

4. Report results: `✅ Uploaded N files to MinIO bucket "{appName}" under prefix "architect/"`. For each file: `✅ {objectName}` or `❌ {objectName} — {error}`.

---

## Guiding Principle

The Architect defines architectural intent. It does not define implementation.

Its outputs are the authoritative architectural inputs that downstream skills use to generate implementation artifacts, while validating that the original architecture has been preserved.

---

## Design Principles

1. **Business-Driven Decomposition** — Start with business capabilities, not technical layers
2. **Evolutionary Architecture** — Start coarse-grained; split only on real requirements
3. **Data Ownership** — Each service owns its data exclusively; no shared databases
4. **Independent Deployability** — Backward-compatible APIs; feature flags for rollouts
5. **Resilience by Design** — Circuit breakers, timeouts, retries, graceful degradation
6. **Graph-Driven Evidence** — Query Neo4j before every architectural decision; let facts guide judgement
7. **Technology Agnosticism** — All architectural outputs are independent of implementation technology

## Anti-Patterns to Avoid

- **Distributed Monolith**: Services too tightly coupled
- **Anemic Services**: Services with no business logic
- **Chatty Services**: Too many synchronous inter-service calls
- **Shared Database**: Multiple services accessing the same schema
- **God Service**: One service doing too much
- **Nano-Services**: Services too small to deploy independently
- **Ignoring Graph Evidence**: Architectural decisions made without Neo4j query results
- **Document-Only Analysis**: Relying on discovery documents without validating against graph facts

## Success Criteria

A well-designed decomposition achieves:
- Services map to business capabilities (business alignment)
- Services can evolve and deploy independently (loose coupling)
- Related functionality is grouped together (high cohesion)
- Each service has a clear owner and data boundary (clear ownership)
- All architectural decisions are backed by Neo4j graph evidence (evidence-based)
- Service boundaries validated against dependency metrics (validated boundaries)
- Every service has a technology-agnostic architecture specification (architectural contract)
- Every service has objective spec review guidelines (governance enforced)

## References

- *Domain-Driven Design* — Eric Evans
- *Building Microservices* — Sam Newman
- *Microservices Patterns* — Chris Richardson
- *Strategic Monoliths and Microservices* — Vaughn Vernon
- *C4 Model* for architecture documentation
- *Graph Databases* — Ian Robinson, Jim Webber, Emil Eifrem

