Skip to content
Development
Skill

/system-design-communication

Select how services talk: REST, gRPC, GraphQL, WebSocket, SSE, or webhook per hop, sync versus async per flow, service discovery mode, and DNS/edge routing. Use when choosing a protocol or API paradigm; defer REST contract detail (status codes, pagination, OpenAPI) to

From plugin
agent-skills-standard
583200 skills21 agents33 commands1 MCP

Claude Code

$ npx -y skills add hoangnguyen0403/agent-skills-standard --skill system-design-communication --agent claude-code

SKILL.md

system-design-communication.SKILL.md
name: system-design-communication
description: "Select how services talk: REST, gRPC, GraphQL, WebSocket, SSE, or webhook per hop, sync versus async per flow, service discovery mode, and DNS/edge routing. Use when choosing a protocol or API paradigm; defer REST contract detail (status codes, pagination, OpenAPI) to common-api-design."
metadata:
  triggers:
    keywords:
      - grpc
      - graphql vs rest
      - websocket
      - server-sent events
      - webhook
      - service discovery
      - protocol choice
      - api paradigm
      - dns routing

Communication Selection

**Priority: P1 (HIGH)**

Choose the paradigm per hop from the constraint, not from familiarity. One flow may legitimately use three.

Paradigm Table

| Constraint observed | Paradigm | Cost accepted | | --- | --- | --- | | Resource CRUD for broad, unknown clients; HTTP caching wanted | REST | Over/under-fetching; N round trips for aggregates | | Internal service-to-service, low latency, streaming, schema-first | gRPC | Browser needs a proxy; L7 balancers need HTTP/2 awareness | | One client aggregates many sources with client-shaped responses | GraphQL | Query-cost limits and N+1 resolvers become your problem | | Bidirectional real-time (chat, collaboration, gaming) | WebSocket | Stateful connections; LB affinity; reconnect protocol | | Server push only (feeds, progress, notifications) | SSE | One direction; plain HTTP, auto-reconnect built in | | Cross-organization async callback | Webhook | Receiver retries, signature verification, idempotency required |

Sync vs Async per Flow

  • Choose synchronous work when the caller needs its result to continue and the invariant requires it; bound it by the end-to-end deadline and define timeout, failure, and fallback behavior.
  • Choose asynchronous work when the caller needs eventual completion rather than the result now; return a trackable operation ID or use a defined push contract.
  • Set the number of synchronous dependencies from the invariant, dependency budgets, deadline, operational coupling, and failure semantics. A bounded chain of more than two hops can be valid; even one hop can be unacceptable if it breaks those constraints.

Service Discovery

  • Start with DNS-based discovery of a load balancer; it is discovery enough for most systems.
  • Move to a health-checked registry (server-side discovery) when instances churn faster than DNS TTLs propagate.
  • Client-side discovery only when the client must pick the instance (cache affinity, zone-local routing); it couples every client to the registry.

DNS and Edge Routing

  • DNS TTL is a failover lever: low TTL enables fast region switch, at the cost of resolver load.
  • Geo-DNS routes users to the nearest region; it is routing, not failover - pair it with health checks.
  • Do not use DNS for instance-level balancing; resolvers cache and ignore your weights.

Versioning

  • Additive changes only on live contracts: new fields optional, old fields never repurposed.
  • Breaking change = new version side by side, a deprecation window with usage telemetry, then removal.
  • Internal gRPC/proto: reserve removed field numbers; never reuse them.

Anti-Patterns

  • **No one-paradigm-everywhere**: edge REST plus internal gRPC plus async events is normal, not inconsistency.
  • **No WebSocket for server-push-only**: SSE is cheaper and survives proxies better.
  • **No webhook without signature, retry policy, and idempotency key**: all three, or it is not production.
  • **No GraphQL as a proxy for missing API design**: schema sprawl without owners is the same mess with resolvers.
  • **No sync call to a service that only needs to know**: notifications are events.

References

  • [Communication Selection Detail](references/communication-selection.md) - per-paradigm failure modes, hop-by-hop guidance, migration notes
Read more
@hoangnguyen0403
Ships withagent-skills-standard

The portable standards layer for AI coding agents. Sync once, then work in your own runtime.

583200 skills21 agents1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
583
Star history of hoangnguyen0403/agent-skills-standard on GitHub, a chart by star-history.com

Other skills on agent-skills-standard.

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills10d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc12d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react1d252k
@facebook@facebookInstall Skill

Questions about system-design-communication.

Which coding agents can use system-design-communication?
system-design-communication installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.