# How coffee gets from a farm to your cup

> A process map exported from forks.world (https://forks.world). Author: Brian. Source: https://forks.world/p/cmv21y75a0011if065b8iqimv
> It describes who does what, in what order, and with which technology. Read the plain-language sections first; the JSON at the end is the exact, complete data.

## Summary

- 14 steps across 2 layers
- Persona: Farmer, Mill and exporter, Shipping, Roaster, Cafe

## Pain points

Where this process hurts, worst first:

- **Farmers receive a small share of the cup price** (How coffee gets from a farm to your cup; critical): Most of the price stays with roasters and cafes

## How to read this file

- A process is made of **layers**. The main layer is the top level; any step of kind `subprocess` opens a detail layer with its own lanes and steps.
- **Lanes** are either persona (people/roles) or technology (systems). Each step belongs to one lane; `using` lists tools a person uses for that step.
- Step kinds: `start`, `task`, `decision` (its arrows carry the answer as a label), `subprocess`, `end`.

## How coffee gets from a farm to your cup

Lanes:
- Farmer: person / role (id `farmer`)
- Mill and exporter: person / role (id `mill`)
- Shipping: person / role (id `ship`)
- Roaster: person / role (id `roaster`)
- Cafe: person / role (id `cafe`)

Steps, in the order they run:

1. **Coffee cherries ripen on the tree** [start; Farmer; id `c1`]
   - then Pick the ripe cherries by hand
2. **Pick the ripe cherries by hand** [task; Farmer; id `c2`]
   - then Remove the fruit and dry the beans
3. **Remove the fruit and dry the beans** [task; Mill and exporter; id `c3`]
   - then Grade and bag the green beans
4. **Grade and bag the green beans** [task; Mill and exporter; id `c4`]
   - then Ship them across the ocean
5. **Ship them across the ocean** [task; Shipping; id `c5`]
   - then Roast the beans: the flavor appears here
6. **Roast the beans: the flavor appears here** [subprocess; Roaster; id `c6`], opens the detail layer "What roasting does"
   - then Pack and sell to cafes and shops
7. **Pack and sell to cafes and shops** [task; Roaster; id `c7`]
   - then Grind fresh and brew
8. **Grind fresh and brew** [task; Cafe; id `c8`]
   - then Is the price fair all the way back to the farm?
9. **Is the price fair all the way back to the farm?** [decision; Cafe; id `c9`]
   - if "Yes" go to The farm earns a living wage; if "No" go to Farmers receive a small share of the cup price
10. **The farm earns a living wage** [end; Farmer; id `c10`]
11. **Farmers receive a small share of the cup price** [task; Farmer; id `c11`] ⚠ PAIN POINT (critical): Most of the price stays with roasters and cafes
   - then Coffee cherries ripen on the tree

```mermaid
flowchart LR
  subgraph l_farmer["Farmer"]
    n_c1(["Coffee cherries ripen on the tree"])
    n_c2["Pick the ripe cherries by hand"]
    n_c10(["The farm earns a living wage"])
    n_c11["Farmers receive a small share of the cup price"]
  end
  subgraph l_mill["Mill and exporter"]
    n_c3["Remove the fruit and dry the beans"]
    n_c4["Grade and bag the green beans"]
  end
  subgraph l_ship["Shipping"]
    n_c5["Ship them across the ocean"]
  end
  subgraph l_roaster["Roaster"]
    n_c6[["Roast the beans: the flavor appears here"]]
    n_c7["Pack and sell to cafes and shops"]
  end
  subgraph l_cafe["Cafe"]
    n_c8["Grind fresh and brew"]
    n_c9{"Is the price fair all the way back to the farm?"}
  end
  n_c1 --> n_c2
  n_c2 --> n_c3
  n_c3 --> n_c4
  n_c4 --> n_c5
  n_c5 --> n_c6
  n_c6 --> n_c7
  n_c7 --> n_c8
  n_c8 --> n_c9
  n_c9 -->|"Yes"| n_c10
  n_c9 -->|"No"| n_c11
  n_c11 --> n_c1
```

### What roasting does (detail of step "Roast the beans: the flavor appears here")

Lanes:
- Roaster: person / role (id `roaster`)

Steps, in the order they run:

1. **Beans dry and turn yellow** [start; Roaster; id `r1`]
   - then They crack and sugars brown
2. **They crack and sugars brown** [task; Roaster; id `r2`]
   - then Light roast keeps acidity, dark roast tastes smoky
3. **Light roast keeps acidity, dark roast tastes smoky** [end; Roaster; id `r3`]

```mermaid
flowchart LR
  subgraph l_roaster["Roaster"]
    n_r1(["Beans dry and turn yellow"])
    n_r2["They crack and sugars brown"]
    n_r3(["Light roast keeps acidity, dark roast tastes smoky"])
  end
  n_r1 --> n_r2
  n_r2 --> n_r3
```

## Full data (JSON)

```json
{
  "title": "How coffee gets from a farm to your cup",
  "maps": {
    "m_root": {
      "id": "m_root",
      "lanes": [
        {
          "id": "farmer",
          "name": "Farmer",
          "type": "person"
        },
        {
          "id": "mill",
          "name": "Mill and exporter",
          "type": "person"
        },
        {
          "id": "ship",
          "name": "Shipping",
          "type": "person"
        },
        {
          "id": "roaster",
          "name": "Roaster",
          "type": "person"
        },
        {
          "id": "cafe",
          "name": "Cafe",
          "type": "person"
        }
      ],
      "steps": [
        {
          "id": "c1",
          "kind": "start",
          "lane": "farmer",
          "next": [
            {
              "to": "c2"
            }
          ],
          "uses": [],
          "label": "Coffee cherries ripen on the tree"
        },
        {
          "id": "c2",
          "kind": "task",
          "lane": "farmer",
          "next": [
            {
              "to": "c3"
            }
          ],
          "uses": [],
          "label": "Pick the ripe cherries by hand"
        },
        {
          "id": "c3",
          "kind": "task",
          "lane": "mill",
          "next": [
            {
              "to": "c4"
            }
          ],
          "uses": [],
          "label": "Remove the fruit and dry the beans"
        },
        {
          "id": "c4",
          "kind": "task",
          "lane": "mill",
          "next": [
            {
              "to": "c5"
            }
          ],
          "uses": [],
          "label": "Grade and bag the green beans"
        },
        {
          "id": "c5",
          "kind": "task",
          "lane": "ship",
          "next": [
            {
              "to": "c6"
            }
          ],
          "uses": [],
          "label": "Ship them across the ocean"
        },
        {
          "id": "c6",
          "kind": "subprocess",
          "lane": "roaster",
          "next": [
            {
              "to": "c7"
            }
          ],
          "uses": [],
          "child": "m_roast",
          "label": "Roast the beans: the flavor appears here"
        },
        {
          "id": "c7",
          "kind": "task",
          "lane": "roaster",
          "next": [
            {
              "to": "c8"
            }
          ],
          "uses": [],
          "label": "Pack and sell to cafes and shops"
        },
        {
          "id": "c8",
          "kind": "task",
          "lane": "cafe",
          "next": [
            {
              "to": "c9"
            }
          ],
          "uses": [],
          "label": "Grind fresh and brew"
        },
        {
          "id": "c9",
          "kind": "decision",
          "lane": "cafe",
          "next": [
            {
              "to": "c10",
              "label": "Yes"
            },
            {
              "to": "c11",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Is the price fair all the way back to the farm?"
        },
        {
          "id": "c10",
          "kind": "end",
          "lane": "farmer",
          "next": [],
          "uses": [],
          "label": "The farm earns a living wage"
        },
        {
          "id": "c11",
          "kind": "task",
          "lane": "farmer",
          "next": [
            {
              "to": "c1"
            }
          ],
          "pain": {
            "note": "Most of the price stays with roasters and cafes",
            "level": 3
          },
          "uses": [],
          "label": "Farmers receive a small share of the cup price"
        }
      ],
      "title": "How coffee gets from a farm to your cup",
      "parent": null
    },
    "m_roast": {
      "id": "m_roast",
      "lanes": [
        {
          "id": "roaster",
          "name": "Roaster",
          "type": "person"
        }
      ],
      "steps": [
        {
          "id": "r1",
          "kind": "start",
          "lane": "roaster",
          "next": [
            {
              "to": "r2"
            }
          ],
          "uses": [],
          "label": "Beans dry and turn yellow"
        },
        {
          "id": "r2",
          "kind": "task",
          "lane": "roaster",
          "next": [
            {
              "to": "r3"
            }
          ],
          "uses": [],
          "label": "They crack and sugars brown"
        },
        {
          "id": "r3",
          "kind": "end",
          "lane": "roaster",
          "next": [],
          "uses": [],
          "label": "Light roast keeps acidity, dark roast tastes smoky"
        }
      ],
      "title": "What roasting does",
      "parent": {
        "map": "m_root",
        "step": "c6"
      }
    }
  }
}
```
