# How a social feed decides what you see

> A process map exported from forks.world (https://forks.world). Author: Brian. Source: https://forks.world/p/cmv0kprm90043jn06dfxesqhy
> 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: You, Advertisers
- Technology / systems: Millions of posts, The ranking model, Policy filters

## Pain points

Where this process hurts, worst first:

- **Predict how likely you are to like, comment, share or watch each one** (How a social feed decides what you see; painful): Contested: ranking for engagement can reward outrage and keep people scrolling

## 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 a social feed decides what you see

Lanes:
- You: person / role (id `you`)
- Millions of posts: technology / system (id `posts`)
- The ranking model: technology / system (id `rank`)
- Policy filters: technology / system (id `policy`)
- Advertisers: person / role (id `ads`)

Steps, in the order they run:

1. **Open the app** [start; You; id `f1`]
   - then Gather a few thousand candidate posts
2. **Gather a few thousand candidate posts** [task; Millions of posts; id `f2`]
   - then Predict how likely you are to like, comment, share or watch each one
3. **Predict how likely you are to like, comment, share or watch each one** [subprocess; The ranking model; id `f3`] ⚠ PAIN POINT (painful): Contested: ranking for engagement can reward outrage and keep people scrolling, opens the detail layer "Scoring a post"
   - then Remove content that breaks the rules
4. **Remove content that breaks the rules** [task; Policy filters; id `f4`]
   - then Mix in ads and some variety
5. **Mix in ads and some variety** [task; The ranking model; id `f5`]
   - then The top-ranked posts are shown
6. **The top-ranked posts are shown** [task; You; id `f6`]
   - then Do you stop and engage?
7. **Do you stop and engage?** [decision; You; id `f7`]
   - if "Yes" go to Learn: more like this; if "No" go to Learn: less like this
8. **Learn: more like this** [task; The ranking model; id `f8`]
   - then Your attention is sold to advertisers
9. **Your attention is sold to advertisers** [task; Advertisers; id `f10`]
   - then Open the app
10. **Learn: less like this** [task; The ranking model; id `f9`]
   - then Your attention is sold to advertisers

```mermaid
flowchart LR
  subgraph l_you["You"]
    n_f1(["Open the app"])
    n_f6["The top-ranked posts are shown"]
    n_f7{"Do you stop and engage?"}
  end
  subgraph l_posts["Millions of posts"]
    n_f2["Gather a few thousand candidate posts"]
  end
  subgraph l_rank["The ranking model"]
    n_f3[["Predict how likely you are to like, comment, share or watch each one"]]
    n_f5["Mix in ads and some variety"]
    n_f8["Learn: more like this"]
    n_f9["Learn: less like this"]
  end
  subgraph l_policy["Policy filters"]
    n_f4["Remove content that breaks the rules"]
  end
  subgraph l_ads["Advertisers"]
    n_f10["Your attention is sold to advertisers"]
  end
  n_f1 --> n_f2
  n_f2 --> n_f3
  n_f3 --> n_f4
  n_f4 --> n_f5
  n_f5 --> n_f6
  n_f6 --> n_f7
  n_f7 -->|"Yes"| n_f8
  n_f7 -->|"No"| n_f9
  n_f8 --> n_f10
  n_f9 --> n_f10
  n_f10 --> n_f1
```

### Scoring a post (detail of step "Predict how likely you are to like, comment, share or watch each one")

Lanes:
- The ranking model: technology / system (id `rank`)

Steps, in the order they run:

1. **Look at your past behavior** [start; The ranking model; id `r1`]
   - then Compare it with people like you
2. **Compare it with people like you** [task; The ranking model; id `r2`]
   - then Score each post
3. **Score each post** [task; The ranking model; id `r3`]
   - then Sort by score
4. **Sort by score** [end; The ranking model; id `r4`]

```mermaid
flowchart LR
  subgraph l_rank["The ranking model"]
    n_r1(["Look at your past behavior"])
    n_r2["Compare it with people like you"]
    n_r3["Score each post"]
    n_r4(["Sort by score"])
  end
  n_r1 --> n_r2
  n_r2 --> n_r3
  n_r3 --> n_r4
```

## Full data (JSON)

```json
{
  "title": "How a social feed decides what you see",
  "maps": {
    "m_root": {
      "id": "m_root",
      "lanes": [
        {
          "id": "you",
          "name": "You",
          "type": "person"
        },
        {
          "id": "posts",
          "name": "Millions of posts",
          "type": "system"
        },
        {
          "id": "rank",
          "name": "The ranking model",
          "type": "system"
        },
        {
          "id": "policy",
          "name": "Policy filters",
          "type": "system"
        },
        {
          "id": "ads",
          "name": "Advertisers",
          "type": "person"
        }
      ],
      "steps": [
        {
          "id": "f1",
          "kind": "start",
          "lane": "you",
          "next": [
            {
              "to": "f2"
            }
          ],
          "uses": [],
          "label": "Open the app"
        },
        {
          "id": "f2",
          "kind": "task",
          "lane": "posts",
          "next": [
            {
              "to": "f3"
            }
          ],
          "uses": [],
          "label": "Gather a few thousand candidate posts"
        },
        {
          "id": "f3",
          "kind": "subprocess",
          "lane": "rank",
          "next": [
            {
              "to": "f4"
            }
          ],
          "pain": {
            "note": "Contested: ranking for engagement can reward outrage and keep people scrolling",
            "level": 2
          },
          "uses": [],
          "child": "m_score",
          "label": "Predict how likely you are to like, comment, share or watch each one"
        },
        {
          "id": "f4",
          "kind": "task",
          "lane": "policy",
          "next": [
            {
              "to": "f5"
            }
          ],
          "uses": [],
          "label": "Remove content that breaks the rules"
        },
        {
          "id": "f5",
          "kind": "task",
          "lane": "rank",
          "next": [
            {
              "to": "f6"
            }
          ],
          "uses": [],
          "label": "Mix in ads and some variety"
        },
        {
          "id": "f6",
          "kind": "task",
          "lane": "you",
          "next": [
            {
              "to": "f7"
            }
          ],
          "uses": [],
          "label": "The top-ranked posts are shown"
        },
        {
          "id": "f7",
          "kind": "decision",
          "lane": "you",
          "next": [
            {
              "to": "f8",
              "label": "Yes"
            },
            {
              "to": "f9",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Do you stop and engage?"
        },
        {
          "id": "f8",
          "kind": "task",
          "lane": "rank",
          "next": [
            {
              "to": "f10"
            }
          ],
          "uses": [],
          "label": "Learn: more like this"
        },
        {
          "id": "f9",
          "kind": "task",
          "lane": "rank",
          "next": [
            {
              "to": "f10"
            }
          ],
          "uses": [],
          "label": "Learn: less like this"
        },
        {
          "id": "f10",
          "kind": "task",
          "lane": "ads",
          "next": [
            {
              "to": "f1"
            }
          ],
          "uses": [],
          "label": "Your attention is sold to advertisers"
        }
      ],
      "title": "How a social feed decides what you see",
      "parent": null
    },
    "m_score": {
      "id": "m_score",
      "lanes": [
        {
          "id": "rank",
          "name": "The ranking model",
          "type": "system"
        }
      ],
      "steps": [
        {
          "id": "r1",
          "kind": "start",
          "lane": "rank",
          "next": [
            {
              "to": "r2"
            }
          ],
          "uses": [],
          "label": "Look at your past behavior"
        },
        {
          "id": "r2",
          "kind": "task",
          "lane": "rank",
          "next": [
            {
              "to": "r3"
            }
          ],
          "uses": [],
          "label": "Compare it with people like you"
        },
        {
          "id": "r3",
          "kind": "task",
          "lane": "rank",
          "next": [
            {
              "to": "r4"
            }
          ],
          "uses": [],
          "label": "Score each post"
        },
        {
          "id": "r4",
          "kind": "end",
          "lane": "rank",
          "next": [],
          "uses": [],
          "label": "Sort by score"
        }
      ],
      "title": "Scoring a post",
      "parent": {
        "map": "m_root",
        "step": "f3"
      }
    }
  }
}
```
