| name | service-boundary-validator |
| description | Use when someone is deciding whether to split a service, suspects their services are too tightly coupled to deploy independently, wants to validate a proposed service boundary, or is decomposing a monolith and needs to know where to cut. |
| scenarios | ["Should this feature be a new microservice or stay in the existing service?","Validate whether our proposed service split makes sense or creates too much coupling","Help me decide if this domain logic belongs in service A or service B","์ด ๊ธฐ๋ฅ์ ์ ์๋น์ค๋ก ๋ถ๋ฆฌํด์ผ ํ ์ง ๊ธฐ์กด ์๋น์ค์ ๋ฃ์ด์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ์ด","์๋น์ค ๊ฒฝ๊ณ๊ฐ ๋ง๊ฒ ๋๋์ด์ ธ ์๋์ง ๊ฒํ ํด์ค"] |
| compatibility | {"recommended":["think-tool","sequential-thinking"],"optional":[],"remote_mcp_note":"think-tool์ด ์์ผ๋ฉด ์ปคํ๋ง ํจํด๊ณผ ํ ํ ํด๋ก์ง ์ ๋ ฌ์ ๋ ๊น์ด ๋ถ์ํฉ๋๋ค. sequential-thinking์ ์ปคํ๋ง ๋ถ์ โ ๋ฐ์ดํฐ ์์ ๊ถ โ ํ ์ ๋ ฌ โ ๊ถ๊ณ ์์๋ฅผ ๊ฐ์ ํฉ๋๋ค. Claude ์ค์ โ MCP Servers์์ remote SSE ์๋ํฌ์ธํธ๋ฅผ ์ถ๊ฐํ์ธ์."} |
Service Boundary Validator
When to Use / When Not to Use
Use when:
- Evaluating whether services can actually deploy independently
- Suspecting a distributed monolith (coupled services with shared database or chatty sync calls)
- Deciding whether to split or merge services
- Auditing data ownership before a migration
Do not use when:
- Designing new boundaries from scratch โ run
event-storming first, then use microservices-architect
Process
- Coupling analysis โ Map synchronous call graphs, shared databases, and bidirectional dependencies
- Data ownership audit โ For each entity: which service creates, reads, updates, and deletes it?
- Team alignment check โ Does each service map to one team? Apply the cognitive load test.
- Recommendation โ Merge / split / convert to async / fix ownership
If sequential-thinking is available, use it to work through these four steps in order โ skipping data ownership analysis before issuing a split recommendation is a high-probability, high-consequence failure.
Output Template
Service: [Name]
Owner Team: [Team name]
Data Owned: [List of tables/entities]
Data Read from Others: [Entity โ owning service, access method]
Synchronous Dependencies: [Service โ purpose โ can it be made async?]
Events Published: [Event name โ consumers]
Events Consumed: [Event name โ publisher]
Red Flags Found:
- [Specific coupling issue]
Recommendation:
- [Concrete action: merge / split / convert to async / fix ownership]
What Claude Does / What You Do
| Claude | You |
|---|
| Analyzes service call graph for chatty patterns | Provide the service dependency diagram or description |
| Identifies shared database anti-patterns | Confirm which services access which tables |
| Applies the 5 boundary tests | Validate against your team structure |
| Runs the split decision framework | Make the final split or merge decision |
| Drafts the coupling analysis report | Fill in actual data ownership from your codebase |
The 5 Tests for a Well-Placed Boundary
A service boundary is correct only if all five hold:
- The service can be deployed independently without coordinating with other services
- A single team can own it without ongoing negotiation with other teams
- Its data is owned exclusively โ no other service writes to its database tables
- Its domain language is consistent โ terms do not shift meaning at the boundary
- Failure of this service degrades, but does not break, other services
If any fails, the boundary is suspect.
Red Flags: Distributed Monolith Patterns
Shared Database
Services A and B both write to the same schema, or A reads B's tables directly via SQL. The database becomes the integration point โ schema changes require coordinating both services.
Fix: Each service owns its data exclusively. Other services access it only through the owning service's API.
Chatty APIs (Temporal Coupling)
To complete one user-facing operation, Service A makes 5+ synchronous calls to B, C, D in sequence.
Threshold: More than 3 synchronous hops in a user-facing request path is a warning sign.
Fix options: Merge if always called together; use async events for non-blocking workflows; BFF/API composition at the edge.
Bidirectional Dependencies
Service A calls B, and B also calls A. This means deployment order is undefined and neither service is the source of truth.
Fix: Identify the natural authority direction. Introduce an event or callback pattern if the consumer needs to communicate back.
Deployment Coupling
All services must be deployed simultaneously. This reveals implicit shared contracts that change together โ no deployment independence exists.
Diagnosis question: "Can we deploy Service A on Monday and Service B the following Friday?"
Split Decision Framework
Should service X be split into A and B?
Yes, split if:
- A and B are owned by different teams
- A and B have different deployment frequencies
- A and B have different scaling requirements
- A and B have clearly distinct ubiquitous language
No, keep together if:
- A and B always change together
- A and B are always called together in every operation
- A and B are owned by the same team with no plans to split
- Splitting would create a shared database problem
- The split introduces a distributed transaction requirement
Data Ownership Analysis
For each entity E:
1. Which service creates E? โ That service owns E.
2. Which services read E? โ They call the owning service's API or receive events.
3. Which services update E? โ Any service other than the owner is a violation.
4. Which services delete E? โ Same โ only the owner deletes.
Quick Checklist
Related Skills
microservices-architect โ design new service boundaries after validation
event-storming โ discover bounded contexts to inform boundary decisions
transaction-boundary-reviewer โ fix cross-service transaction anti-patterns
technique-write:adr-writer โ document the split or merge decision