# Product definition

URL: /workflows/processes/product-definition · Id: `process:product-definition`

> Product definition turns each Offer into the Nouns and Verbs that every Interface is generated from.

Product definition turns each [Offer](/business/nouns/offer) into the [Nouns](/business/nouns/noun) and [Verbs](/business/nouns/verb) that every [Interface](/business/nouns/interface) is generated from.

## Outcome
| Part | This Process |
| --- | --- |
| Outcome | Each Offer’s promise is a definition of Nouns and Verbs that every Interface is generated from, with a first run that reaches activation. |
| Reads | [Offer](/business/nouns/offer) |
| Leaves | [Noun](/business/nouns/noun), [Verb](/business/nouns/verb), [Product](/business/nouns/product), [Page](/business/nouns/page), [Experiment](/business/nouns/experiment) |
| Runs in | Each Startup |

## Accountable
[Product Lead](/agents/product/product-lead), [Product Team](/agents/product).

## Workflows
| Workflow | Runs | Team |
| --- | --- | --- |
| [Define a Product](/workflows/processes/product-definition/define-product) | on `Product.created` | [Product Team](/agents/product) |
| [Design first run](/workflows/processes/product-definition/design-first-run) | on [`Offer.published`](/business/events/Offer.published) | [Product Team](/agents/product) |

## Who does each step

| Workflow | Step | Role | Calls | Approval |
| --- | --- | --- | --- | --- |
| [Define a Product](/workflows/processes/product-definition/define-product) | 1. Read the Offer’s promise and its checkable done state. | [Product Lead](/agents/product/product-lead) | [Offer.get](/business/nouns/offer/get) | None |
| [Define a Product](/workflows/processes/product-definition/define-product) | 2. Name the Nouns the Product stores. | [Product Lead](/agents/product/product-lead) | [Noun.create](/business/nouns/noun/create) | None |
| [Define a Product](/workflows/processes/product-definition/define-product) | 3. Declare each Verb that acts on them, with its inputs, outputs and Event. | [Product Lead](/agents/product/product-lead) | [Verb.create](/business/nouns/verb/create) | None |
| [Define a Product](/workflows/processes/product-definition/define-product) | 4. Generate the API, SDK, CLI, and MCP from the definition. | [Engineering Lead](/agents/engineering/engineering-lead) | [Startup.build](/business/nouns/startup/build) | None |
| [Define a Product](/workflows/processes/product-definition/define-product) | 5. Hand the definition to the Engineering Lead to implement. | [Product Lead](/agents/product/product-lead) | [Task.assign](/business/nouns/task/assign) | None |
| [Design first run](/workflows/processes/product-definition/design-first-run) | 1. Read the Offer’s activation event and the Verbs on the path to it. | [Designer](/agents/product/designer) | [Offer.get](/business/nouns/offer/get) | None |
| [Design first run](/workflows/processes/product-definition/design-first-run) | 2. Generate sample records in the test environment from each Noun’s properties. | [Designer](/agents/product/designer) | [Thing.create](/business/nouns/thing/create) | None |
| [Design first run](/workflows/processes/product-definition/design-first-run) | 3. Give every empty list a one-line purpose and the Verb that fills it. | [Designer](/agents/product/designer) | [Page.update](/business/nouns/page/update) | None |
| [Design first run](/workflows/processes/product-definition/design-first-run) | 4. Give agent buyers a keyless test call that returns a real shape. | [Designer](/agents/product/designer) | [Interface.update](/business/nouns/interface/update) | None |
| [Design first run](/workflows/processes/product-definition/design-first-run) | 5. Test the first run as an Experiment on Activation rate. | [Analyst](/agents/marketing/analyst) | [Experiment.start](/business/nouns/experiment/start) | None |

## Events
| Direction | When | What happens |
| --- | --- | --- |
| In | On `Product.created` | Starts [Define a Product](/workflows/processes/product-definition/define-product) |
| In | On [`Offer.published`](/business/events/Offer.published) | Starts [Design first run](/workflows/processes/product-definition/design-first-run) |
| In | On `Product.created` | Wakes this Process, the first time only. A Startup creates its first Product. |
| Out | `Noun.created` | Raised by step 2 of [Define a Product](/workflows/processes/product-definition/define-product) |
| Out | `Verb.created` | Raised by step 3 of [Define a Product](/workflows/processes/product-definition/define-product) |
| Out | [`Startup.built`](/business/events/Startup.built) | Raised by step 4 of [Define a Product](/workflows/processes/product-definition/define-product) |
| Out | [`Task.assigned`](/business/events/Task.assigned) | Raised by step 5 of [Define a Product](/workflows/processes/product-definition/define-product) |
| Out | `Thing.created` | Raised by step 2 of [Design first run](/workflows/processes/product-definition/design-first-run) |
| Out | `Page.updated` | Raised by step 3 of [Design first run](/workflows/processes/product-definition/design-first-run) |
| Out | `Interface.updated` | Raised by step 4 of [Design first run](/workflows/processes/product-definition/design-first-run) |
| Out | [`Experiment.started`](/business/events/Experiment.started) | Raised by step 5 of [Design first run](/workflows/processes/product-definition/design-first-run) |

## Plays
No Play names this Process.

## Controls
- [Processing definitions](/systems/trust-and-governance/controls/processing-definitions)
- [Input validation](/systems/trust-and-governance/controls/input-validation)
- [Purpose limitation](/systems/trust-and-governance/controls/purpose-limitation)

## Settings
None.

## Failure
A failed step retries; when retries run out, the Action goes to the [Product Lead](/agents/product/product-lead).

## Loop
| Step | Value |
| --- | --- |
| Hypothesis | Offers defined from Interview quotes activate more new Customers than Offers defined in the Startup’s own words. |
| Measure | [Activation rate](/agents/product#activation-rate) over 30d, at least 50 observations |
| Learn | The learn step reads the Readout, records Evidence and a Decision, and drafts the next Variant. |

## Code

**Ask**

```text
Turn on product definition
```

**API**

```bash
curl -X POST https://api.sb/leaseline.app/processes/process_1/enable \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

**SDK**

```ts
import { $ } from 'startup-builder'

await $.Process.enable({ process: 'process_1' })
```

**CLI**

```bash
npx startup-builder do Process.enable --json '{"process":"process_1"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Process.enable({ process: 'process_1' })"
  }
}
```

## Enable
On by default for every Product Template. [Process.pause](/business/nouns/process/pause) stops new Actions; Actions in progress finish.

## Example
A permit-status data API promises current status for every building permit in 40 counties. [Define a Product](/workflows/processes/product-definition/define-product) names the `Permit` Noun and the `lookup` Verb. The API, CLI, MCP server and SDK are generated from those two.