mcpField
A
arch-identify

arch-identify

github.com/yonatankarpDevelopment139 installsUpdated 23w ago
Repository

About arch-identify

A diagnostic skill for selecting an architecture style or cross-cutting pattern based on a stated problem, while recognizing when an architecture-level answer is excessive. It is intended for greenfield decisions, reviews, and system changes under specific constraints.

Key features

  1. 01Diagnose architecture needs by problem type
  2. 02Cover monoliths, microservices, and event-driven systems
  3. 03Identify CQRS, event sourcing, and saga situations
  4. 04Address service failure-handling patterns
  5. 05Find gradual legacy migration approaches
  6. 06Route non-architecture questions to related skills

Use cases

  1. 01Choose a macro architecture for a new system
  2. 02Assess scaling and integration pressure in an existing system
  3. 03Discuss trade-offs in an architecture review
  4. 04Determine whether a problem needs an architecture-level answer

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/yonatankarp/software-design-skills --skill arch-identify

After installing, type/arch-identifyin Claude Code to confirm it loaded.

Details

From the project README

One-line summary

Diagnose which architecture style or cross-cutting pattern fits a stated problem — or route to a simpler DDD / design-pattern skill when an architecture-level answer is overkill.

When to use this skill

  • Greenfield system, picking a macro architecture style (monolith / microservices / event-driven / serverless).
  • Existing system facing scalability, integration, or transactional-consistency pressure and asking "what pattern fits".
  • Architecture-review framing: "should we have used X instead of Y".

When NOT to use this skill

  • Domain modeling question → route to ddd-design.
  • Code-level pattern question → route to gof-identify.
  • Kotlin-specific pattern question → route to kp-identify.

Core content

Walk the problem through these diagnostic questions, in this order:

1. Is this about the system's macro shape?

  • Default starting point, simple deployment, single codebase → arch-layered and stay with a monolith. Don't reach for microservices until the monolith has a real seam.
  • Decouple domain core from frameworks / databases / IO so each can change independently → arch-hexagonal (Ports & Adapters).
  • Loosely-coupled components communicating asynchronously through events → arch-event-driven.
  • Independent deployable units, each owning its data, communicating over a network → arch-microservices — but read the skill's "when NOT to" section first; it's the most over-applied style.

2. Is this about data, transactions, or consistency across services / aggregates?

  • Read load very different from write load; reads need denormalized views → arch-cqrs.
  • Source-of-truth is "what happened", not "current state"; full audit history; temporal queries → arch-event-sourcing. Pairs naturally with CQRS but doesn't require it.
  • A multi-step business transaction spans multiple services, no distributed transaction available → arch-saga.

3. Is this about failure handling between services?

  • Downstream service degrades or fails; calling service must protect itself and recover gracefully → arch-circuit-breaker (plus bulkhead and retry policies covered there).

4. Is this about evolving a legacy system?

  • Incremental migration from monolith to microservices, can't rewrite, must keep shipping → arch-strangler-fig. Often combined with an Anticorruption Layer (see ddd-context-mapping).

5. Is this about architecture quality and governance?

  • How do we know the architecture is staying healthy as the code evolves → arch-fitness-functions.
  • How do we record architectural decisions so future maintainers know why → arch-adr.
  • Component-level design discipline (single responsibility, dependency direction, etc.) → arch-solid.

6. None of the above?

  • The problem may not need an architecture-level answer. Most often: a DDD modeling decision (ddd-design), a code-level pattern (gof-identify), or "just don't overengineer this — keep the monolith".

Decision heuristics

  • Default to monolith first until you have a concrete reason to distribute.
  • Default to layered until you have a concrete reason to flip the dependency direction (which is what hexagonal does).
  • Distribution is a cost, not a feature. Microservices, sagas, event-driven, CQRS all add operational complexity. Justify them with specific requirements.
  • "We're building it that way because [respected company] does" is not a reason.

Anti-patterns

  • Picking microservices first and then trying to retrofit a domain model — leads to data-coupling and chatty services.
  • Adopting CQRS because "it sounds advanced" with no actual read/write asymmetry — pure overhead.
  • Reaching for sagas when a single transactional boundary would have done — the saga's compensating actions are real engineering cost.
  • "Resume-driven development" — picking an architecture for its career signal rather than fit.

See also

  • All thirteen arch-* pattern skills.
  • ddd-design and ddd-bounded-context — DDD often informs architecture-level decisions before any pattern is picked.
  • gof-identify — when the question is code-level, not system-level.

References

  • Richards & Ford, Fundamentals of Software Architecture (O'Reilly, 2020) — Ch. 18, Choosing the Appropriate Architecture Style.
  • Khononov, Learning Domain-Driven Design (O'Reilly, 2021) — Ch. 14–15, DDD ↔ microservices ↔ event-driven.

Comments

Markdown supported