# Problem

URL: /business/nouns/problem · Id: `noun:problem`

> A Problem is what an ICP struggles with, in their own words: how they solve it today and what it costs them.

A Problem is what an [ICP](/business/nouns/icp) struggles with, in their own words: how they solve it today and what it costs them.

## Properties
| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `statement` | `text` | Yes | The struggle, in the words of the ICP. |
| `costPerPeriod` | `json` | No | What the Problem costs the ICP per period: hours times wage, or the spend on what they hire today. |
| `address` | `json` | No | The opportunity map cell it sits on: an occupation, a task it performs, and an industry. |
| `moment` | `text` | No | The moment the job starts, with the observable trigger that marks it. |
| `progress` | `text` | No | The progress the ICP wants, from the state before to the state after. |
| `hiredToday` | `json` | No | What the ICP hires for the job today, by kind and cost: software, a Service, their own hands, or nothing. |

## Object
```json
{
  "$id": "https://api.sb/routewise.dev/problems/problem_1",
  "$type": "Problem",
  "statement": "Plans delivery routes for courier fleets through an API.",
  "costPerPeriod": {},
  "address": {},
  "moment": "Example moment",
  "progress": "Example progress",
  "hiredToday": {}
}
```

## Relationships
- <a id="rel-addressed-by"></a>A Problem **is addressed by** many [Issues](/business/nouns/issue): an [Issue](/business/nouns/issue) addresses the Problems its [Evidence](/business/nouns/evidence) came from, so the [Customers](/business/nouns/customer) behind that Evidence hear when it ships. `addressedBy`, inverse [`addresses`](/business/nouns/issue#rel-addresses).
- <a id="rel-documented-by"></a>A Problem **is documented by** many pieces of [Evidence](/business/nouns/evidence): [Evidence](/business/nouns/evidence) shows a Problem in the words or behavior of the [ICP](/business/nouns/icp). `documentedBy`, inverse [`documents`](/business/nouns/evidence#rel-documents).
- <a id="rel-faced-by"></a>A Problem **is faced by** many [ICPs](/business/nouns/icp): an [ICP](/business/nouns/icp) struggles with Problems: how they solve them today and what that costs. `facedBy`, inverse [`faces`](/business/nouns/icp#rel-faces).

## Verbs
| Verb | Description | Subject | Event | Class |
| --- | --- | --- | --- | --- |
| [Problem.rank](/business/nouns/problem/rank) | Rank orders Problems by revenue at stake, Evidence grade and effort, so the next Project addresses the top one. | [Product Lead](/agents/product/product-lead) | [`Problem.ranked`](/business/events/Problem.ranked) | Two-way: `try`, `send`, `do` |
| [Problem.suggest](/business/nouns/problem/suggest) | Suggest records a Customer’s ask for something the Product lacks as Evidence on a Problem, with the asker attached. | [Party](/business/nouns/party) | [`Problem.suggested`](/business/events/Problem.suggested) | Two-way: `try`, `send`, `do` |
| <a id="create"></a>[Problem.create](/business/nouns/problem/create) | Creates a Problem. Inherited from [Noun](/business/nouns/noun). | None. | `Problem.created` | Two-way: `try`, `send`, `do` |
| <a id="get"></a>[Problem.get](/business/nouns/problem/get) | Returns one Problem by id. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="list"></a>[Problem.list](/business/nouns/problem/list) | Returns Problems, newest first, one page at a time. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="update"></a>[Problem.update](/business/nouns/problem/update) | Changes the given properties of a Problem. Inherited from [Noun](/business/nouns/noun). | None. | `Problem.updated` | Two-way: `try`, `send`, `do` |
| <a id="delete"></a>[Problem.delete](/business/nouns/problem/delete) | Deletes a Problem; its history is kept. Inherited from [Noun](/business/nouns/noun). | None. | `Problem.deleted` | One-way: `send`, `do` |

## Permissions
Which Access level may call each Verb. One-way Verbs wait their delay window.

| Operation | `owner` | `admin` | `member` | `viewer` |
| --- | --- | --- | --- | --- |
| `Problem.create` | Yes | Yes | Yes | No |
| `Problem.get` | Yes | Yes | Yes | Yes |
| `Problem.list` | Yes | Yes | Yes | Yes |
| `Problem.update` | Yes | Yes | Yes | No |
| `Problem.delete` | Yes | Yes | Yes | No |
| `Problem.rank` | Yes | Yes | Yes | No |
| `Problem.suggest` | Yes | Yes | Yes | No |

## Call it

**Ask**

```text
Suggest the latest problem.
```

**API**

```bash
curl -X POST https://api.sb/routewise.dev/problems/suggest \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Example text"}'
```

```json
{
  "api": "https://api.sb/routewise.dev",
  "evidence": {
    "$id": "https://api.sb/routewise.dev/evidence/evidence_1",
    "$type": "Evidence",
    "grade": "Behavior"
  },
  "problem": {
    "$id": "https://api.sb/routewise.dev/problems/problem_1",
    "$type": "Problem",
    "statement": "Plans delivery routes for courier fleets through an API."
  },
  "action": {
    "$id": "https://api.sb/routewise.dev/actions/action_1",
    "operation": "Problem.suggest",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/routewise.dev/actions/action_1"
  }
}
```

**SDK**

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

const { evidence, problem } = await $.Problem.suggest({ text: 'Example text' })
```

**CLI**

```bash
npx startup-builder do Problem.suggest --json '{"text":"Example text"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Problem.suggest({ text: 'Example text' })"
  }
}
```

## Example
A litigation-support firm pulls 300 dockets a week from eight court sites by hand, and it takes two paralegals a full day. That is the Problem, in their words.