service-blueprint · git:20260810.be07f23 · 2026-08-10 · sha256 16eb4e76e1b4cbaa

service-blueprint git:20260810.be07f23A

Immutable. This exact content is served forever at /api/v1/blob/16eb4e76e1b4cbaa.

---
name: service-blueprint
description: "Use when someone asks what people, services, and systems support each step of an existing customer journey. Produces a service blueprint across frontstage, line of visibility, backstage, and support. Use `journey-mapping` to discover the customer path first, `user-flow` for screen transitions, and `process-mapping` for an internal operation without the customer lens. Service strategy belongs upstream; framing the initiative belongs to `frame-intent`; implementing service calls or frontend behavior belongs to engineering."
---

# Skill: service-blueprint

Produces a **service blueprint** — a five-row, column-by-column map that ties
every customer action and touchpoint to the employee and system actions that
back it and the internal support that enables those. The five rows are:
**evidence-of-service** (what the customer receives or encounters), **frontstage**
(customer actions and touchpoints), **line-of-visibility**, **backstage** (system
and employee actions), and **support** (infrastructure and vendors). The backstage
column is the **slicing instrument**: each backstage service is a candidate
component; its hand-off to `architect` and `contracts` is by-reference (a named
service), never an import. The method is grounded in the NN/g definition of service
blueprinting; see `references/service-blueprint.md`.

**Inputs (declared):** a customer journey map or journey stages (from
`journey-mapping` or elicited inline); a screen flow or screen inventory
(from `user-flow` or described inline). Both are elicited inline when no
upstream artifact is present.

**Consumed by:** `architect` (the backstage column feeds C4 component
decomposition + service contracts); the spec LLD (the support row names the
internal systems the spec must account for).

## Output rendering

Table — When presenting several items that share the same fields, render a Markdown table. Cap at ~5 columns; beyond that, switch to a per-item detail list. Right-align numeric columns.
Status list — Lead each row with a status glyph — ● running, ✓ done, ○ idle, ⚠ blocked — status first, one item per line, labels aligned.

## When to invoke

Confirm all three before proceeding; if any fails, resolve it first.

1. **There is a journey or a set of touchpoints to blueprint** — a customer
   journey doc, a screen flow, or at minimum a describable user goal with two
   or more steps. A blank "blueprint our service" is not yet a brief; draw out
   at least the first frontstage action before proceeding.
2. **You are mapping the screen↔service tie, not the journey itself** — if the
   journey hasn't been mapped yet, offer to run `journey-mapping` first,
   or elicit the journey inline.
3. **You are naming services, not designing their internals** — the moment the
   ask is API contracts, data schemas, or component architecture, hand off to
   `architect` or `contracts`. This skill stops at named services and their row
   placement.

## Procedure

1. **Resolve and surface the output path.** Resolve `<output_dir>` following the
   config-driven, two-branch elicitation procedure in `references/agentbundle-layout.md`.
   Resolution order: (1) repo-root `./agentbundle-layout.toml`
   `[design] output_dir` — repo-scope takes priority; (2) user-profile
   `~/.agentbundle/agentbundle-layout.toml` `[design] output_dir`; when neither resolves,
   two-branch elicitation runs — never a silent default: **(a) Repo branch** —
   suggest `docs/design/` and offer to write `output_dir` to
   `./agentbundle-layout.toml [design]`; **(b) Personal/vault branch** — ask for
   an absolute path (e.g. `~/Documents/<VaultName>/design/`) and write to
   `~/.agentbundle/agentbundle-layout.toml [design]`. Derive the blueprint path as
   `<output_dir>/blueprints/<slug>.md`. Resolve to a full absolute path
   (`~`-expand, realpath-resolve, reject `..` escapes); a repo-root-sourced
   `output_dir` that resolves outside the repo tree is untrusted-origin — confirm
   before writing. **Surface the resolved path to the user before the first
   write.** Create the `blueprints/` directory lazily on first write.

2. **Elicit or confirm the journey and touchpoints.** If a `journey-mapping`
   artifact is present, read its stages and frontstage actions. If it is absent,
   elicit: ask for the user's goal, the stages they pass through, and the key
   touchpoints (screens, channels, moments of contact) at each stage. Work
   column-by-column — each column is one step in the journey.

3. **Build the five rows.** For each journey column, populate all five rows.
   Load `references/service-blueprint.md`.
   - **Evidence of service** — the physical or digital artifacts the customer
     encounters or receives at each frontstage touchpoint: confirmation screens,
     receipts, notification emails, error messages, printed documents, SMS
     confirmations. These are the tangible traces the service leaves in the
     customer's hands; they are often the only part of the blueprint the customer
     can see, keep, and share. Record them above the frontstage row.
   - **Frontstage** — customer actions and the touchpoints (screens,
     notifications, physical moments) the customer sees and touches directly.
   - **Line of visibility** — the boundary between what the customer sees and
     what they do not. Mark it explicitly; it is the structural divide.
   - **Backstage** — employee actions and system calls the customer does not see
     but that directly fulfil the frontstage touchpoint (database reads, API
     calls, staff tasks).
   - **Support** — internal systems, processes, and vendors that back the
     backstage actions but have no direct frontstage effect (logging, auth,
     billing infrastructure, third-party integrations).

4. **Name backstage services as candidates for component decomposition.** Each
   distinct backstage service entry is a named candidate. Record each as a
   `- **Service:** <service-slug>` marker in the template's `## Named backstage
   services` block — the structural-orphan lint reads each `**Service:**` line as a
   `service` chain node (a screen action ties down to one):
   - **When `architect` or `contracts` are present in this session:** name each
     service by-reference (a short, stable name matching the component the
     `architect` skill would use — e.g. "Order Service", "Auth Service"). Do not
     import, call, or configure it here.
   - **When `architect` or `contracts` are absent:** name each service textually
     with a brief role description (e.g. "the service that validates payment
     details and returns a confirmation token"). Append a note that these names
     are hand-off candidates for `architect`/`contracts` when those packs are
     installed.

5. **Check the line of visibility and mark fail-points.** Walk each column: every
   item on the customer side that has no backstage entry is a **gap** — either a
   service is missing or the frontstage action is unsupported. Name every gap
   explicitly rather than leaving it blank.

   After naming gaps, identify **fail-points** — columns where the backstage or
   support row is most likely to fail in production, based on complexity, third-party
   dependency, known fragility, or high customer-impact if degraded. Fail-points are
   distinct from gaps: a gap is a missing service; a fail-point is an existing service
   that is at risk. Mark each fail-point with a design-priority annotation:
   - **Critical** — failure here breaks the customer's ability to complete the journey
     (payment processing fails, auth token is invalid, mandatory confirmation is not
     sent). Requires a designed failure path — the service blueprint must show what
     evidence-of-service the customer receives when this step fails.
   - **High** — failure here significantly degrades the experience but the customer
     can still complete the journey via a fallback path.
   - **Medium** — failure here causes friction or a degraded experience but does not
     block completion.

   Critical fail-points must have a designed evidence-of-service row for the failure
   case — not just the success case.

6. **Write the blueprint.** Record the artifact at the resolved path with
   frontmatter `type: service-blueprint`. Use the template in
   `assets/service-blueprint-template.md`. Confirm the written path matches the
   path you surfaced in step 1.

7. **Name the hand-off seam.** At the end of the blueprint, add a short
   `## Hand-off` section that lists the named backstage services and which
   downstream skill or pack consumes each (by name — `architect`, `contracts`,
   or the spec LLD). This is the by-reference seam; do not draft the downstream
   artifact here.

## Anti-patterns to refuse

- **Designing backstage internals.** A backstage entry names a service and its
  role; it does not author an API contract, a data schema, or a C4 diagram.
  That is `architect`'s job.
- **Reprinting a values table.** No timing literals, no stack tokens, no styling
  syntax. The blueprint records *what* happens and *who/what* is responsible —
  never *how* it is implemented at the code level.
- **Leaving visibility gaps unexplained.** A frontstage action with no backstage
  entry is a silent gap — name it, flag it, and offer to fill it before closing
  the blueprint.
- **Skipping the output-path surface step.** The resolved path is declared
  before the first write, every time. A blueprint written to an undeclared
  location is a footgun for the downstream adopter.
- **Blocking when upstream artifacts are absent.** Elicit the journey inline;
  never refuse to proceed because `journey-mapping` hasn't run.