# From idea to working software, the agile way

> A process map exported from forks.world (https://forks.world). Author: Brian. Source: https://forks.world/p/cmv0kq1yc001xjv061n5rohmn
> 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 1 layer
- Persona: Customers, Product owner, Delivery team, Operations
- Technology / systems: Build and test pipeline

## 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`.

## From idea to working software, the agile way

Lanes:
- Customers: person / role (id `cust`)
- Product owner: person / role (id `po`)
- Delivery team: person / role (id `team`)
- Build and test pipeline: technology / system (id `ci`)
- Operations: person / role (id `ops`)

Steps, in the order they run:

1. **A need or a problem** [start; Customers; id `a1`]
   - then Write it as a user story with acceptance criteria
2. **Write it as a user story with acceptance criteria** [task; Product owner; id `a2`]
   - then Refine the story and estimate it
3. **Refine the story and estimate it** [task; Delivery team; id `a3`]
   - then Prioritize it in the backlog
4. **Prioritize it in the backlog** [task; Product owner; id `a4`]
   - then Build it in a short iteration
5. **Build it in a short iteration** [task; Delivery team; id `a5`]
   - then Automated tests run
6. **Automated tests run** [task; Build and test pipeline; id `a6`]
   - then Do they pass?
7. **Do they pass?** [decision; Build and test pipeline; id `a7`]
   - if "Yes" go to Demo to the product owner; if "No" go to Fix it and run again
8. **Demo to the product owner** [task; Delivery team; id `a8`]
   - then Does it meet the acceptance criteria?
9. **Does it meet the acceptance criteria?** [decision; Product owner; id `a9`]
   - if "Yes" go to Release to customers; if "No" go to Adjust the story and the work
10. **Release to customers** [task; Operations; id `a10`]
   - then Use it and give feedback
11. **Use it and give feedback** [task; Customers; id `a11`]
   - then Learn: keep, change or drop it
12. **Learn: keep, change or drop it** [task; Product owner; id `a12`]
   - then Write it as a user story with acceptance criteria
13. **Adjust the story and the work** [task; Delivery team; id `a9a`]
   - then Build it in a short iteration
14. **Fix it and run again** [task; Delivery team; id `a6a`]
   - then Automated tests run

```mermaid
flowchart LR
  subgraph l_cust["Customers"]
    n_a1(["A need or a problem"])
    n_a11["Use it and give feedback"]
  end
  subgraph l_po["Product owner"]
    n_a2["Write it as a user story with acceptance criteria"]
    n_a4["Prioritize it in the backlog"]
    n_a9{"Does it meet the acceptance criteria?"}
    n_a12["Learn: keep, change or drop it"]
  end
  subgraph l_team["Delivery team"]
    n_a3["Refine the story and estimate it"]
    n_a5["Build it in a short iteration"]
    n_a6a["Fix it and run again"]
    n_a8["Demo to the product owner"]
    n_a9a["Adjust the story and the work"]
  end
  subgraph l_ci["Build and test pipeline"]
    n_a6["Automated tests run"]
    n_a7{"Do they pass?"}
  end
  subgraph l_ops["Operations"]
    n_a10["Release to customers"]
  end
  n_a1 --> n_a2
  n_a2 --> n_a3
  n_a3 --> n_a4
  n_a4 --> n_a5
  n_a5 --> n_a6
  n_a6 --> n_a7
  n_a7 -->|"Yes"| n_a8
  n_a7 -->|"No"| n_a6a
  n_a6a --> n_a6
  n_a8 --> n_a9
  n_a9 -->|"Yes"| n_a10
  n_a9 -->|"No"| n_a9a
  n_a9a --> n_a5
  n_a10 --> n_a11
  n_a11 --> n_a12
  n_a12 --> n_a2
```

## Full data (JSON)

```json
{
  "title": "From idea to working software, the agile way",
  "maps": {
    "m_root": {
      "id": "m_root",
      "lanes": [
        {
          "id": "cust",
          "name": "Customers",
          "type": "person"
        },
        {
          "id": "po",
          "name": "Product owner",
          "type": "person"
        },
        {
          "id": "team",
          "name": "Delivery team",
          "type": "person"
        },
        {
          "id": "ci",
          "name": "Build and test pipeline",
          "type": "system"
        },
        {
          "id": "ops",
          "name": "Operations",
          "type": "person"
        }
      ],
      "steps": [
        {
          "id": "a1",
          "kind": "start",
          "lane": "cust",
          "next": [
            {
              "to": "a2"
            }
          ],
          "uses": [],
          "label": "A need or a problem"
        },
        {
          "id": "a2",
          "kind": "task",
          "lane": "po",
          "next": [
            {
              "to": "a3"
            }
          ],
          "uses": [],
          "label": "Write it as a user story with acceptance criteria"
        },
        {
          "id": "a3",
          "kind": "task",
          "lane": "team",
          "next": [
            {
              "to": "a4"
            }
          ],
          "uses": [],
          "label": "Refine the story and estimate it"
        },
        {
          "id": "a4",
          "kind": "task",
          "lane": "po",
          "next": [
            {
              "to": "a5"
            }
          ],
          "uses": [],
          "label": "Prioritize it in the backlog"
        },
        {
          "id": "a5",
          "kind": "task",
          "lane": "team",
          "next": [
            {
              "to": "a6"
            }
          ],
          "uses": [],
          "label": "Build it in a short iteration"
        },
        {
          "id": "a6",
          "kind": "task",
          "lane": "ci",
          "next": [
            {
              "to": "a7"
            }
          ],
          "uses": [],
          "label": "Automated tests run"
        },
        {
          "id": "a7",
          "kind": "decision",
          "lane": "ci",
          "next": [
            {
              "to": "a8",
              "label": "Yes"
            },
            {
              "to": "a6a",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Do they pass?"
        },
        {
          "id": "a6a",
          "kind": "task",
          "lane": "team",
          "next": [
            {
              "to": "a6"
            }
          ],
          "uses": [],
          "label": "Fix it and run again"
        },
        {
          "id": "a8",
          "kind": "task",
          "lane": "team",
          "next": [
            {
              "to": "a9"
            }
          ],
          "uses": [],
          "label": "Demo to the product owner"
        },
        {
          "id": "a9",
          "kind": "decision",
          "lane": "po",
          "next": [
            {
              "to": "a10",
              "label": "Yes"
            },
            {
              "to": "a9a",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Does it meet the acceptance criteria?"
        },
        {
          "id": "a9a",
          "kind": "task",
          "lane": "team",
          "next": [
            {
              "to": "a5"
            }
          ],
          "uses": [],
          "label": "Adjust the story and the work"
        },
        {
          "id": "a10",
          "kind": "task",
          "lane": "ops",
          "next": [
            {
              "to": "a11"
            }
          ],
          "uses": [],
          "label": "Release to customers"
        },
        {
          "id": "a11",
          "kind": "task",
          "lane": "cust",
          "next": [
            {
              "to": "a12"
            }
          ],
          "uses": [],
          "label": "Use it and give feedback"
        },
        {
          "id": "a12",
          "kind": "task",
          "lane": "po",
          "next": [
            {
              "to": "a2"
            }
          ],
          "uses": [],
          "label": "Learn: keep, change or drop it"
        }
      ],
      "title": "From idea to working software, the agile way",
      "parent": null
    }
  }
}
```
