# Shipping

URL: /workflows/processes/shipping · Id: `process:shipping`

> Shipping delivers the most valuable Change every day and prunes what nobody uses every week.

Shipping delivers the most valuable [Change](/business/nouns/change) every day and prunes what nobody uses every week.

## Outcome
| Part | This Process |
| --- | --- |
| Outcome | Each day ships one small Change for the Issue with the most outside revenue at stake. |
| Reads | [Issue](/business/nouns/issue) |
| Leaves | [Issue](/business/nouns/issue), [Change](/business/nouns/change) |
| Runs in | Each Startup |

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

Responsible: [Product Lead](/agents/product/product-lead).

Consulted: [Engineering Lead](/agents/engineering/engineering-lead), [Reliability Engineer](/agents/engineering/reliability-engineer).

Informed: [Marketing Lead](/agents/marketing/marketing-lead), [Customer Lead](/agents/customer/customer-lead).

## Workflows
| Workflow | Runs | Team |
| --- | --- | --- |
| [Daily ship](/workflows/processes/shipping/daily-ship) | every day | [Product Team](/agents/product) |

## Who does each step

| Workflow | Step | Role | Calls | Approval |
| --- | --- | --- | --- | --- |
| [Daily ship](/workflows/processes/shipping/daily-ship) | 1. Collect misses, feature requests, and steps done by hand three or more times as Issues. | [Product Lead](/agents/product/product-lead) | [Issue.create](/business/nouns/issue/create) | None |
| [Daily ship](/workflows/processes/shipping/daily-ship) | 2. Rank the Issues by the outside revenue at stake. | [Product Lead](/agents/product/product-lead) | [Issue.triage](/business/nouns/issue/triage) | None |
| [Daily ship](/workflows/processes/shipping/daily-ship) | 3. Ship the top Issue as one small Change. | [Engineering Lead](/agents/engineering/engineering-lead) | [Change.create](/business/nouns/change/create) | None |
| [Daily ship](/workflows/processes/shipping/daily-ship) | 4. Close the Issues the merged Change resolves. | [Product Lead](/agents/product/product-lead) | [Issue.resolve](/business/nouns/issue/resolve) | None |
| [Daily ship](/workflows/processes/shipping/daily-ship) | 5. Retire Verbs unused for 30 days, once a week. | [Product Lead](/agents/product/product-lead) | [Verb.retire](/business/nouns/verb/retire) | Asks first; waits 1 business day |

## Events
| Direction | When | What happens |
| --- | --- | --- |
| In | Every day | Starts [Daily ship](/workflows/processes/shipping/daily-ship) |
| Out | `Issue.created` | Raised by step 1 of [Daily ship](/workflows/processes/shipping/daily-ship) |
| Out | [`Issue.triaged`](/business/events/Issue.triaged) | Raised by step 2 of [Daily ship](/workflows/processes/shipping/daily-ship) |
| Out | `Change.created` | Raised by step 3 of [Daily ship](/workflows/processes/shipping/daily-ship) |
| Out | [`Issue.resolved`](/business/events/Issue.resolved) | Raised by step 4 of [Daily ship](/workflows/processes/shipping/daily-ship) |
| Out | [`Verb.retired`](/business/events/Verb.retired) | Raised by step 5 of [Daily ship](/workflows/processes/shipping/daily-ship) |

## Plays
No Play names this Process.

## Controls
No Control names this Process or a Workflow of it.

## Settings
| Setting | Type | Default | Say | Set with |
| --- | --- | --- | --- | --- |
| `shipping.pruneAfterDays` | `integer` | `30` | Retire features unused for 30 days | [Setting.update](/business/nouns/setting/update) |

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

## Loop
| Step | Value |
| --- | --- |
| Hypothesis | Shipping the most valuable Change daily and pruning what nobody uses activates more new Customers than shipping in a weekly batch. |
| 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 shipping
```

**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.

**Ask**

```text
Retire features unused for 30 days
```

**API**

```bash
curl -X PATCH https://api.sb/leaseline.app/settings/setting_1 \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"value":30,"key":"shipping.pruneAfterDays"}'
```

**SDK**

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

await $.Setting.update({ id: 'setting_1', value: 30, key: 'shipping.pruneAfterDays' })
```

**CLI**

```bash
npx startup-builder do Setting.update --json '{"id":"setting_1","value":30,"key":"shipping.pruneAfterDays"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Setting.update({ id: 'setting_1', value: 30, key: 'shipping.pruneAfterDays' })"
  }
}
```

## Example
Three [Customers](/business/nouns/customer) of an invoicing [SaaS](/products/templates/saas) ask for CSV export this week. [Daily ship](/workflows/processes/shipping/daily-ship) ranks it first by revenue at stake and ships it as one Change. At the weekly prune, a report filter no one has opened in 60 days is removed.