Lumina
AI Product Development Harness · Module APD.1
1/15
ENPT
Module APD.1 · scope

Scope the decision before you build

“Build an AI assistant” is a capability, not a product decision. Before code, name who will use the output, what they decide with it, and what the system must not do.

before the scope card: choose a workflow, not a vague idea A useful product starting point has a recurring person, a decision or action, an available input, an observable output, and an exception worth keeping visible. Capture those prompts in the optional workflow opportunity card in the starter folder; it helps choose a slice, not prove a market.
what you'll be able to do Write a scope card that makes one AI workflow reviewable: user, input, output, supported decision, important failure, and non-goal.

The trap: a broad prompt hides a broad obligation

Our synthetic running case is Event Brief: it drafts an event briefing from fictional event notes for an event operations coordinator to review. “Summarise the notes” leaves open whether the draft is advice, a record update, or a message for attendees. Each interpretation needs different evidence. The product boundary must choose one.

Picture the handoff. A coordinator opens a note that says, “the room may change; confirm signage,” and asks for help before a busy event. A vague assistant could invent a new room, update a record, or compose a message. All three outputs may look useful. None answers the narrower question: what should this coordinator verify first, and what can they check against the note?

That distinction is practical. A product decision names a permitted next move for a named person. A capability label—“AI briefing assistant”—does not. If two reasonable teammates would build two different things from the same sentence, the sentence is still a request for scope, not a scope.

synthetic teaching case Event Brief represents no person, institution, or domain-specific outcome. This course teaches product scoping; it does not validate a real-world workflow, demand, safety, or deployment.

The move: make the boundary inspectable

A scope card records the smallest useful promise. In this case, the output helps an event operations coordinator decide what to verify first. It is a reviewable draft with source spans, not a domain-specific recommendation.

synthetic noteinput SCOPE CARDuser: event operations coordinatordecision: what to verify firstfailure: invented briefing item draft + spansreview output NON-GOAL: advice · record edits · attendee messages

Read the card as a refusal as well as a promise

The diagram is a decision path, not a system architecture. The left box is the only input in this teaching slice. The middle box records why the output exists and what failure matters. The right box is deliberately a draft + spans: a reviewer can compare a statement with the synthetic note instead of accepting a fluent paragraph on trust.

Work the same request twice. Version A says, “Draft a briefing item with the source span for the room-change note.” Version B says, “Tell attendees that the room is changing.” A stays inside the card: it produces review material for the coordinator. B crosses the coral non-goal because it sends a message to a different audience and creates an external action. The correct result for B is not a better prompt. It is out of scope.

scope_card = {
    "user": "event operations coordinator",
    "input": "synthetic event notes",
    "output": "event briefing draft with source spans",
    "decision": "what to verify first",
    "failure": "invented briefing item",
    "non_goal": "domain-specific advice",
}
what makes this a decision boundary?
It names a user and a decision. “Summarise notes with AI” does not say who relies on the result or what they may do with it.
interpret the result A completed card supports one immediate decision: whether the vertical slice is narrow enough to specify and test. It does not prove demand, domain-specific safety, or a business outcome.

Use the card before discussing a model, interface, or provider. If you cannot fill a field without saying “it depends,” keep the uncertainty on the card: choose a smaller input, a smaller decision, or an explicit refusal. This is how APD.2 can turn the boundary into fields and states instead of inheriting ambiguity as product behavior.

a teammate adds attendee messages. Keep or reject it?
Reject it. Sending attendee messages is outside the non-goal. Adding it changes the risk and the evidence needed; the right response is a new scope decision, not a silent feature addition.
which field should change when the output helps a different person?
Start with user and then re-evaluate the decision, output, failure, and non-goal. A new audience is not a cosmetic change: it may create a different workflow and therefore a different slice.
▶ runnable lab

scope-card

Check a synthetic scope card for the required boundary fields. Run the included sample, then replace it with your own bounded workflow.

labs/scope-card/ · python scope_card.py
key takeaways