# Iteration

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

> Iteration improves the Startup one change at a time: one number, the worst step, and one change a week.

Iteration improves the [Startup](/business/nouns/startup) one change at a time: one number, the worst step, and one change a week.

## Outcome
| Part | This Process |
| --- | --- |
| Outcome | Each week ends with exactly one recorded change and a note on how to undo it. |
| Reads | [Metric](/business/nouns/metric) |
| Leaves | [Decision](/business/nouns/decision), [Change](/business/nouns/change), [Issue](/business/nouns/issue) |
| Runs in | Each Startup |

## Accountable
[Founder](/agents/founding/founder), [Founding Team](/agents/founding).

## Workflows
| Workflow | Runs | Team |
| --- | --- | --- |
| [Weekly review](/workflows/processes/iteration/weekly-review) | every week | [Founding Team](/agents/founding) |

## Who does each step

| Workflow | Step | Role | Calls | Approval |
| --- | --- | --- | --- | --- |
| [Weekly review](/workflows/processes/iteration/weekly-review) | 1. Read the one number for the Startup’s kind of Product: activations before first revenue, outside revenue growth after. | [Founder](/agents/founding/founder) | [Metric.query](/business/nouns/metric/query) | None |
| [Weekly review](/workflows/processes/iteration/weekly-review) | 2. Find the step where the most buyers leak. | [Strategist](/agents/founding/strategist) |  |  |
| [Weekly review](/workflows/processes/iteration/weekly-review) | 3. Keep, tune, or stop each live Play by its own Metric on outside revenue. | [Strategist](/agents/founding/strategist) |  |  |
| [Weekly review](/workflows/processes/iteration/weekly-review) | 4. Choose exactly one change: a strategy edit, a Play test, a field test, or an Issue to build. | [Founder](/agents/founding/founder) |  |  |
| [Weekly review](/workflows/processes/iteration/weekly-review) | 5. Record the change as a Decision, with a note on how to undo it. | [Founder](/agents/founding/founder) | [Decision.create](/business/nouns/decision/create) | None |
| [Weekly review](/workflows/processes/iteration/weekly-review) | 6. Open an Issue for the Legal Team when the change touches the legal floor. | [Founder](/agents/founding/founder) | [Issue.create](/business/nouns/issue/create) | None |

## Events
| Direction | When | What happens |
| --- | --- | --- |
| In | Every week | Starts [Weekly review](/workflows/processes/iteration/weekly-review) |
| Out | [`Metric.queried`](/business/events/Metric.queried) | Raised by step 1 of [Weekly review](/workflows/processes/iteration/weekly-review) |
| Out | `Decision.created` | Raised by step 5 of [Weekly review](/workflows/processes/iteration/weekly-review) |
| Out | `Issue.created` | Raised by step 6 of [Weekly review](/workflows/processes/iteration/weekly-review) |

## Plays
No Play names this Process.

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

## Settings
| Setting | Type | Default | Say | Set with |
| --- | --- | --- | --- | --- |
| `iteration.day` | `string` | `mon` | Run the weekly test on Mondays | [Setting.update](/business/nouns/setting/update) |
| `iteration.changes` | `integer` | `1` | Make one change a week | [Setting.update](/business/nouns/setting/update) |

## Failure
A failed step retries; when retries run out, the Action goes to the [Founder](/agents/founding/founder).

## Loop
| Step | Value |
| --- | --- |
| Hypothesis | Changing only the worst step each week lifts weekly outside revenue growth more than changing several steps at once. |
| Measure | [Weekly outside revenue growth](/agents/founding#weekly-outside-revenue-growth) over 28d, at least 4 observations |
| Learn | The learn step reads the Readout, records Evidence and a Decision, and drafts the next Variant. |

## Code

**Ask**

```text
Turn on iteration
```

**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
Run the weekly test on Mondays
```

**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":"mon","key":"iteration.day"}'

curl -X PATCH https://api.sb/leaseline.app/settings/setting_2 \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"value":1,"key":"iteration.changes"}'
```

**SDK**

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

await $.Setting.update({ id: 'setting_1', value: 'mon', key: 'iteration.day' })
await $.Setting.update({ id: 'setting_2', value: 1, key: 'iteration.changes' })
```

**CLI**

```bash
npx startup-builder do Setting.update --json '{"id":"setting_1","value":"mon","key":"iteration.day"}'
npx startup-builder do Setting.update --json '{"id":"setting_2","value":1,"key":"iteration.changes"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "await $.Setting.update({ id: 'setting_1', value: 'mon', key: 'iteration.day' })\nreturn await $.Setting.update({ id: 'setting_2', value: 1, key: 'iteration.changes' })"
  }
}
```

## Example
A key-management API grows 2% a week. [Weekly review](/workflows/processes/iteration/weekly-review) finds 60% of trial users stall at API key setup, so the week's one change is a setup [Issue](/business/nouns/issue) with an undo note. The next week, growth reads 6%.