Contributed by: Mark Whaley · Source: PM Starter Kit
Use this when a PM needs to ground a feature's technical signals in real architecture — actual services, databases, event streams, and owning teams — before any code or dependency analysis happens. Takes the systems and data entities from /technical-intent-parser and retrieves verified context from architecture docs, ADRs, service catalogs, and diagrams.
This skill prevents hallucination by forcing a lookup of reality before downstream analysis. It sits in the Feature Impact Radar pipeline: /technical-intent-parser → /architecture-context-reviewer → /repository-discovery → /codependency-analyzer.
Process
Step 1: Gather inputs
Ask the user:
- Systems involved — The system domains identified by
/technical-intent-parser(e.g., billing, notifications, user_preferences). If coming from the pipeline, these are already available. - Data entities — The business objects identified by
/technical-intent-parser(e.g., invoice, reminder_preferences, user). - Architecture sources — Where should I look? Provide links or names for any of:
- Service catalog / registry (Backstage, Cortex, etc.) — preferred source of truth
- ADR repository
- Architecture documentation portal or wiki
- System diagrams (C4, sequence diagrams)
- Event catalog / schema registry
- Data catalog
- Org context (optional) — Monorepo or polyrepo? Cloud provider? Domain naming conventions?
If systems and data entities are missing, stop and request them (or run /technical-intent-parser first).
Step 2: Identify which personas are affected
Before generating the context review, prompt the user:
Persona check: Which user persona(s) does this feature affect? If you have defined personas (e.g., from
/persona-createor/persona-draft), name them. If not, describe who uses the features powered by these systems.This connects architecture context to real user journeys and ensures the review highlights what matters to product decisions.
Step 3: Build a query set and search
Derive search queries from:
- Each entry in systems involved
- Each entry in data entities
- Any possible services (if provided)
- Synonyms (e.g., "user_preferences" → "settings", "preferences")
Create 6–12 queries total (3–5 system-level, 3–5 entity-level, 1–2 cross terms).
Source priority order (highest to lowest):
- Service catalog / registry
- Event catalog / schema registry
- Data catalog
- ADRs
- Architecture docs / system overviews
- Diagrams
- Wiki pages / team notes
Search across prioritized sources. Open top results and extract service names, databases, event streams, and ownership. Cross-check at least 2 sources when possible. If sources conflict, prefer higher-authority sources and note the conflict.
Step 4: Extract and normalize architecture facts
Present the verified context:
## Architecture Context — (Feature Name)
**Date:** (Date)
**Sources reviewed:** (List of sources checked)
**Confidence level:** (High / Medium / Low — based on source completeness)
---
### Verified Services
| Service | Responsibility | Source |
|---|---|---|
| (service-name in kebab-case) | (What it does) | (Where this was confirmed) |
### Databases & Datastores
| Database | Contains | Owning service | Source |
|---|---|---|---|
| (db_name in snake_case) | (Key entities stored) | (Service that owns it) | (Source) |
### Event Streams
| Event / Topic | Producer | Consumer(s) | Source |
|---|---|---|---|
| (event.name) | (Service that publishes) | (Service(s) that subscribe) | (Source) |
### Service Owners
| Service | Owning team | Contact channel |
|---|---|---|
| (service-name) | (team slug, e.g., payments-team) | (Slack channel, on-call rotation) |
Step 5: Flag gaps and open questions
### Evidence Gaps
- (What couldn't be verified and why — e.g., "No service catalog entry found for user-preferences-service")
- (Missing source — e.g., "Event catalog not available; event streams are inferred from ADR-047")
### Questions for the Team
1. (Question about a gap — e.g., "Where is the source of truth for event stream contracts?")
2. (Question about ambiguity — e.g., "Is notification-service the same as messaging-platform in the docs?")
3. (Question about ownership — e.g., "Who owns the user_settings_db — identity-team or growth-platform?")
Step 6: Review and validate
Ask the user:
- Does this match what you know about the architecture?
- Are there services, databases, or event streams I missed?
- Are the ownership mappings correct?
- Ready to proceed to
/repository-discoverywith these verified services?
Adjust as needed.
Related skills
/technical-intent-parser— upstream: provides the systems and entities that this skill grounds in real architecture./repository-discovery— next step: maps verified services to code repositories and maintainers./codependency-analyzer— downstream: extracts evidence-based code dependencies./context-packet— when you need broader project context beyond architecture./stakeholder-map— when you need to map the people who own these services.
Output location
Present the verified context tables, evidence gaps, and questions as formatted text in the conversation. The output feeds directly into /repository-discovery and downstream pipeline skills. The user may also use it as a standalone architecture briefing for onboarding or planning.
Example Output
Input
- Systems involved:
billing,notifications,user_preferences(output from/technical-intent-parserfor a "Smart Payment Reminders" feature at Meridian Health Plans) - Data entities:
invoice,reminder_preferences,member,payment_method - Architecture sources: Backstage service catalog at
backstage.internal.meridianhealth.io, ADR repo atgithub.com/meridian-health/architecture-decisions, Confluence architecture wiki, and a Kafka event catalog atschema-registry.internal.meridianhealth.io - Org context: Polyrepo, AWS (us-east-1), domain prefixes follow
mhp-convention; teams use Slack for on-call
Output (abbreviated)
Architecture Context — Smart Payment Reminders
Date: 2025-06-11 Sources reviewed: Backstage service catalog, Kafka schema registry, ADR-031, ADR-047, Confluence "Billing Domain Overview" (updated 2025-04), Confluence "Notifications Platform" page Confidence level: Medium — billing and notifications verified across 2+ sources; user_preferences ownership is contested
Verified Services
| Service | Responsibility | Source |
|---|---|---|
| mhp-billing-service | Generates invoices, manages payment schedules, triggers payment events | Backstage + ADR-031 |
| mhp-payment-gateway | Processes payment method charges; wraps Stripe and ACH integrations | Backstage |
| mhp-notifications-platform | Routes and delivers email, SMS, and push notifications to members | Backstage + Confluence |
| mhp-member-profile-service | Stores member identity and contact preferences | Backstage |
| mhp-preferences-service | Stores communication and reminder preferences per member | Backstage (entry marked "experimental") |
Databases & Datastores
| Database | Contains | Owning service | Source |
|---|---|---|---|
| billing_db | invoices, payment_schedules, payment_method references | mhp-billing-service | Backstage |
| notifications_db | delivery logs, template configs, suppression lists | mhp-notifications-platform | Confluence |
| member_profile_db | member demographics, contact info, auth identifiers | mhp-member-profile-service | Backstage |
| preferences_db | reminder_preferences, channel opt-ins | mhp-preferences-service | Backstage (contested — see Gaps) |
Event Streams
| Event / Topic | Producer | Consumer(s) | Source |
|---|---|---|---|
| mhp.billing.invoice.due | mhp-billing-service | mhp-notifications-platform | Kafka schema registry |
| mhp.billing.payment.failed | mhp-billing-service | mhp-notifications-platform, mhp-payment-gateway | Kafka schema registry |
| mhp.member.preferences.updated | mhp-preferences-service | mhp-notifications-platform | ADR-047 (not yet in schema registry) |
| mhp.notifications.delivery.confirmed | mhp-notifications-platform | mhp-billing-service | Kafka schema registry |
Service Owners
| Service | Owning team | Contact channel |
|---|---|---|
| mhp-billing-service | payments-team | #payments-eng |
| mhp-payment-gateway | payments-team | #payments-eng |
| mhp-notifications-platform | growth-platform-team | #growth-platform-eng |
| mhp-member-profile-service | identity-team | #identity-eng |
| mhp-preferences-service | identity-team (claimed) / growth-platform-team (claimed) | Unresolved — see Gaps |
Evidence Gaps
mhp-preferences-serviceBackstage entry is marked "experimental" with no confirmed production readiness date; reminder_preferences storage location is unverifiedmhp.member.preferences.updatedevent appears in ADR-047 but has no registered schema in the Kafka schema registry — may not be in production- No data catalog available;
preferences_dbownership inferred from Backstage only, not cross-verified - Payment method tokenization logic not documented — unclear whether it lives in
mhp-billing-serviceormhp-payment-gateway
Questions for the Team
- Who is the confirmed owner of
mhp-preferences-service— identity-team or growth-platform-team? This affects which team must be looped in for the reminder preferences schema. - Is
mhp.member.preferences.updateda live production event, or still in design? If not live, how are preference changes currently propagated to the notifications platform? - Does
mhp-billing-servicestore payment method tokens directly, or does it delegate all tokenized storage tomhp-payment-gateway? - Is
mhp-preferences-servicesafe to build against for this feature, given its "experimental" Backstage status?
Persona check: Which member personas does this feature affect? For example, are these primarily self-pay members managing individual invoices, HR admins paying on behalf of group plans, or both? Naming the personas here will help flag which notification channels and preference fields matter most before we proceed to /repository-discovery.