sam

SAM Roadmap

This roadmap is feedback-driven, not predetermined. Everything below shifts in response to issues filed, real-world authoring experience, and review from supply-chain / security / procurement practitioners. Items are ordered by current confidence, not by guaranteed delivery.

The stable target is v1. The path there is incremental minor releases that close gaps surfaced by real use.

Current release: v0.2

Live at https://software-architecture-spec.github.io/sam/v0.2/.

v0.1 frozen at /sam/v0.1/ and remains valid per §6.3 same-MAJOR compatibility.

Shipped in v0.2

These were the v0.2 candidates carried forward from the v0.1 review and now in the schema:

Near-term — v0.3 candidates

Drawn from a review of canonical systems-design literature (Release It! / DDIA / Fowler PEAA / SRE Book / Newman / Richards & Ford / Ousterhout) — each names a vocabulary producers and consumers commonly use that SAM has no slot for today.

architecturalStyle (declarative)

Single-value enum on intent declaring the architectural style:

monolith | modular_monolith | microservices | serverless | event_driven | actor | hybrid

Producers can scope their claims; consumers can match the style against their target architecture. Distinct from subject.layer (granularity of this manifest) and from subject.components[] (composition).

architecturalPatterns[] + registry/patterns.json

A new array on qualityAttributes.*.overall (or top-level architecturalPatterns[] — to be decided) for declaring named patterns the software implements:

[
  { "id": "circuit_breaker", "appliesTo": ["dependencies", "reliability"] },
  { "id": "cqrs", "appliesTo": ["data"] },
  { "id": "cache_aside", "appliesTo": ["performance"] }
]

Companion registry/patterns.json (same shape as tensions.json) seeds canonical IDs from Release It! (circuit_breaker, bulkhead, timeout, fail_fast, retry_with_backoff, fallback), DDIA (event_sourcing, cqrs, saga, outbox), Fowler PEAA (unit_of_work, repository), and caching literature (cache_aside, write_through, write_back).

Closes the gap that producers can’t declare “this implements the circuit-breaker pattern” or “this is event-sourced” — vocabulary every senior engineer expects to see.

Storage architecture detail

envelope.persistence today is a stores[] enum (sql, kv, document, blob, search, queue, filesystem, other). v0.3 candidates: replication topology (single / primary-replica / multi-primary / sharded), consistency model (strong / read-after-write / eventual), backup posture (none / snapshot / continuous), encryption posture (at-rest / in-flight / both).

Concurrency-model detail

envelope.instantiation.mode today covers singleton / multi_instance / leader_elected / sharded. v0.3 candidates: ordering guarantees (none / per-key / total), idempotency claims, conflict-resolution model (last-write-wins / CRDT / application-defined).

Spec content deferred from v0.2

Carried forward unchanged into v0.3+:

These are prose-heavy and depend on observed authoring patterns. They’ll land once we have enough real manifests to learn from.

Tooling

Registries

Long-horizon

Open questions

These came out of consumer-side review and design-pattern coverage analysis. Each is either resolved (above), v0.3 candidate (above), or out-of-scope (below) — listed here so the reasoning is visible.

Resolved in v0.2:

Open / v0.3 candidates:

Open / no decision yet:

Explicitly out of scope (carried forward):

Explicitly out of scope

SAM is an architectural visibility framework, not a compliance framework. The line below isn’t a refusal of compliance use cases — it’s a refusal of letting compliance use cases dictate the shape of the architectural surface. Consumers under any specific regime read SAM to populate their own compliance artifacts; SAM’s job is the architectural input layer that survives every regime simultaneously.

These are real concerns adjacent to SAM but not SAM’s job:

How to influence the roadmap

File an issue. The real-world-feedback template surfaces what’s blocking actual use; the schema-change-proposal template proposes specific shape. Roadmap reordering happens in response to that input, not in advance of it.