# How one software update grounded flights around the world

> A process map exported from forks.world (https://forks.world). Author: Brian. Source: https://forks.world/p/cmv2220qu000wi206o7pqm17v
> 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

- 13 steps across 1 layer
- Persona: Security software company, Airlines, banks and hospitals, IT teams
- Technology / systems: The update, Millions of Windows computers

## Pain points

Where this process hurts, worst first:

- **Tests miss a bug in one data file** (How one software update grounded flights around the world; critical): A checking tool let a faulty file through
- **Pushes the file to every customer at once, not a few at a time** (How one software update grounded flights around the world; critical): No staged rollout to limit the damage
- **Fix each computer by hand in safe mode** (How one software update grounded flights around the world; painful): Millions of machines needed someone to touch them

## 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 one software update grounded flights around the world

Lanes:
- Security software company: person / role (id `vendor`)
- The update: technology / system (id `update`)
- Millions of Windows computers: technology / system (id `pcs`)
- Airlines, banks and hospitals: person / role (id `firms`)
- IT teams: person / role (id `it`)

Steps, in the order they run:

1. **Builds a routine update to detect new threats** [subprocess; Security software company; id `u1`], links to the published process "Ship a product release without a 2 a.m. page" (https://forks.world/p/cmv0iecvj004fjw06uy27axj9; full text at https://forks.world/api/public/cmv0iecvj004fjw06uy27axj9/export)
   - then Tests miss a bug in one data file
2. **Tests miss a bug in one data file** [task; Security software company; id `u2`] ⚠ PAIN POINT (critical): A checking tool let a faulty file through
   - then Pushes the file to every customer at once, not a few at a time
3. **Pushes the file to every customer at once, not a few at a time** [task; The update; id `u3`] ⚠ PAIN POINT (critical): No staged rollout to limit the damage
   - then The security driver reads the file and crashes the computer
4. **The security driver reads the file and crashes the computer** [task; Millions of Windows computers; id `u4`]
   - then Computer reboots, crashes again, and loops
5. **Computer reboots, crashes again, and loops** [task; Millions of Windows computers; id `u5`]
   - then Check-in desks, 911 lines and hospital systems go dark
6. **Check-in desks, 911 lines and hospital systems go dark** [task; Airlines, banks and hospitals; id `u6`]
   - then Flights are cancelled around the world
7. **Flights are cancelled around the world** [task; Airlines, banks and hospitals; id `u7`]
   - then Pulls the bad file within about an hour
8. **Pulls the bad file within about an hour** [task; Security software company; id `u8`]
   - then Can they fix it remotely?
9. **Can they fix it remotely?** [decision; IT teams; id `u9`]
   - if "No" go to Fix each computer by hand in safe mode; if "Yes" go to Push a fix
10. **Fix each computer by hand in safe mode** [task; IT teams; id `u10`] ⚠ PAIN POINT (painful): Millions of machines needed someone to touch them
   - then Operations recover over days, and some airlines take far longer
11. **Operations recover over days, and some airlines take far longer** [subprocess; Airlines, banks and hospitals; id `u12`], links to the published process "Respond to an incident" (https://forks.world/p/cmv0iedbx004kjw060iqtrof5; full text at https://forks.world/api/public/cmv0iedbx004kjw060iqtrof5/export)
   - then Publishes the cause and promises staged rollouts and better testing
12. **Publishes the cause and promises staged rollouts and better testing** [end; Security software company; id `u13`]
13. **Push a fix** [task; IT teams; id `u11`]
   - then Operations recover over days, and some airlines take far longer

```mermaid
flowchart LR
  subgraph l_vendor["Security software company"]
    n_u1[["Builds a routine update to detect new threats"]]
    n_u2["Tests miss a bug in one data file"]
    n_u8["Pulls the bad file within about an hour"]
    n_u13(["Publishes the cause and promises staged rollouts and better testing"])
  end
  subgraph l_update["The update"]
    n_u3["Pushes the file to every customer at once, not a few at a time"]
  end
  subgraph l_pcs["Millions of Windows computers"]
    n_u4["The security driver reads the file and crashes the computer"]
    n_u5["Computer reboots, crashes again, and loops"]
  end
  subgraph l_firms["Airlines, banks and hospitals"]
    n_u6["Check-in desks, 911 lines and hospital systems go dark"]
    n_u7["Flights are cancelled around the world"]
    n_u12[["Operations recover over days, and some airlines take far longer"]]
  end
  subgraph l_it["IT teams"]
    n_u9{"Can they fix it remotely?"}
    n_u10["Fix each computer by hand in safe mode"]
    n_u11["Push a fix"]
  end
  n_u1 --> n_u2
  n_u2 --> n_u3
  n_u3 --> n_u4
  n_u4 --> n_u5
  n_u5 --> n_u6
  n_u6 --> n_u7
  n_u7 --> n_u8
  n_u8 --> n_u9
  n_u9 -->|"No"| n_u10
  n_u9 -->|"Yes"| n_u11
  n_u10 --> n_u12
  n_u11 --> n_u12
  n_u12 --> n_u13
```

## Full data (JSON)

```json
{
  "title": "How one software update grounded flights around the world",
  "maps": {
    "m_root": {
      "id": "m_root",
      "lanes": [
        {
          "id": "vendor",
          "name": "Security software company",
          "type": "person"
        },
        {
          "id": "update",
          "name": "The update",
          "type": "system"
        },
        {
          "id": "pcs",
          "name": "Millions of Windows computers",
          "type": "system"
        },
        {
          "id": "firms",
          "name": "Airlines, banks and hospitals",
          "type": "person"
        },
        {
          "id": "it",
          "name": "IT teams",
          "type": "person"
        }
      ],
      "steps": [
        {
          "id": "u1",
          "kind": "subprocess",
          "lane": "vendor",
          "link": {
            "id": "cmv0iecvj004fjw06uy27axj9",
            "scope": "public",
            "title": "Ship a product release without a 2 a.m. page"
          },
          "next": [
            {
              "to": "u2"
            }
          ],
          "uses": [],
          "label": "Builds a routine update to detect new threats"
        },
        {
          "id": "u2",
          "kind": "task",
          "lane": "vendor",
          "next": [
            {
              "to": "u3"
            }
          ],
          "pain": {
            "note": "A checking tool let a faulty file through",
            "level": 3
          },
          "uses": [],
          "label": "Tests miss a bug in one data file"
        },
        {
          "id": "u3",
          "kind": "task",
          "lane": "update",
          "next": [
            {
              "to": "u4"
            }
          ],
          "pain": {
            "note": "No staged rollout to limit the damage",
            "level": 3
          },
          "uses": [],
          "label": "Pushes the file to every customer at once, not a few at a time"
        },
        {
          "id": "u4",
          "kind": "task",
          "lane": "pcs",
          "next": [
            {
              "to": "u5"
            }
          ],
          "uses": [],
          "label": "The security driver reads the file and crashes the computer"
        },
        {
          "id": "u5",
          "kind": "task",
          "lane": "pcs",
          "next": [
            {
              "to": "u6"
            }
          ],
          "uses": [],
          "label": "Computer reboots, crashes again, and loops"
        },
        {
          "id": "u6",
          "kind": "task",
          "lane": "firms",
          "next": [
            {
              "to": "u7"
            }
          ],
          "uses": [],
          "label": "Check-in desks, 911 lines and hospital systems go dark"
        },
        {
          "id": "u7",
          "kind": "task",
          "lane": "firms",
          "next": [
            {
              "to": "u8"
            }
          ],
          "uses": [],
          "label": "Flights are cancelled around the world"
        },
        {
          "id": "u8",
          "kind": "task",
          "lane": "vendor",
          "next": [
            {
              "to": "u9"
            }
          ],
          "uses": [],
          "label": "Pulls the bad file within about an hour"
        },
        {
          "id": "u9",
          "kind": "decision",
          "lane": "it",
          "next": [
            {
              "to": "u10",
              "label": "No"
            },
            {
              "to": "u11",
              "label": "Yes"
            }
          ],
          "uses": [],
          "label": "Can they fix it remotely?"
        },
        {
          "id": "u10",
          "kind": "task",
          "lane": "it",
          "next": [
            {
              "to": "u12"
            }
          ],
          "pain": {
            "note": "Millions of machines needed someone to touch them",
            "level": 2
          },
          "uses": [],
          "label": "Fix each computer by hand in safe mode"
        },
        {
          "id": "u11",
          "kind": "task",
          "lane": "it",
          "next": [
            {
              "to": "u12"
            }
          ],
          "uses": [],
          "label": "Push a fix"
        },
        {
          "id": "u12",
          "kind": "subprocess",
          "lane": "firms",
          "link": {
            "id": "cmv0iedbx004kjw060iqtrof5",
            "scope": "public",
            "title": "Respond to an incident"
          },
          "next": [
            {
              "to": "u13"
            }
          ],
          "uses": [],
          "label": "Operations recover over days, and some airlines take far longer"
        },
        {
          "id": "u13",
          "kind": "end",
          "lane": "vendor",
          "next": [],
          "uses": [],
          "label": "Publishes the cause and promises staged rollouts and better testing"
        }
      ],
      "title": "How one software update grounded flights around the world",
      "parent": null
    }
  }
}
```
