# How a subscription software company makes money

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

- 16 steps across 2 layers
- Persona: Visitors, Free users, Paying customers, The company

## Pain points

Where this process hurts, worst first:

- **Churn: revenue disappears** (How a subscription software company makes money; critical): A small monthly churn compounds into a big loss

## 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 subscription software company makes money

Lanes:
- Visitors: person / role (id `visitor`)
- Free users: person / role (id `trial`)
- Paying customers: person / role (id `paid`)
- The company: person / role (id `team`)

Steps, in the order they run:

1. **Publish a free trial or free plan** [start; The company; id `s1`]
   - then Finds the product through search or a friend
2. **Finds the product through search or a friend** [subprocess; Visitors; id `s2`], links to the published process "Generate a lead: from stranger to hand-raiser" (https://forks.world/p/cmv0ie5f70027jw06onp4obt3; full text at https://forks.world/api/public/cmv0ie5f70027jw06onp4obt3/export)
   - then Signs up and tries it
3. **Signs up and tries it** [task; Free users; id `s3`]
   - then Reaches the moment it is useful
4. **Reaches the moment it is useful** [task; Free users; id `s4`]
   - then Does it solve their problem?
5. **Does it solve their problem?** [decision; Free users; id `s5`]
   - if "Yes" go to Upgrades to a monthly plan; if "No" go to Learn why they left and fix onboarding
6. **Upgrades to a monthly plan** [task; Paying customers; id `s6`]
   - then Collects the same revenue every month
7. **Collects the same revenue every month** [subprocess; The company; id `s7`], opens the detail layer "The numbers investors ask for"
   - then Does the customer renew?
8. **Does the customer renew?** [decision; Paying customers; id `s8`]
   - if "Yes" go to Keeps paying and may add seats; if "No" go to Churn: revenue disappears
9. **Keeps paying and may add seats** [subprocess; Paying customers; id `s9`], links to the published process "Renew a subscription (before it becomes a surprise)" (https://forks.world/p/cmv0iebew0040jw06unuiyu6a; full text at https://forks.world/api/public/cmv0iebew0040jw06unuiyu6a/export)
   - then Collects the same revenue every month
10. **Churn: revenue disappears** [task; The company; id `s10`] ⚠ PAIN POINT (critical): A small monthly churn compounds into a big loss
   - then Fix the product or find new customers to replace them
11. **Fix the product or find new customers to replace them** [task; The company; id `s11`]
   - then Finds the product through search or a friend
12. **Learn why they left and fix onboarding** [task; The company; id `s3a`]
   - then Signs up and tries it

```mermaid
flowchart LR
  subgraph l_visitor["Visitors"]
    n_s2[["Finds the product through search or a friend"]]
  end
  subgraph l_trial["Free users"]
    n_s3["Signs up and tries it"]
    n_s4["Reaches the moment it is useful"]
    n_s5{"Does it solve their problem?"}
  end
  subgraph l_paid["Paying customers"]
    n_s6["Upgrades to a monthly plan"]
    n_s8{"Does the customer renew?"}
    n_s9[["Keeps paying and may add seats"]]
  end
  subgraph l_team["The company"]
    n_s1(["Publish a free trial or free plan"])
    n_s3a["Learn why they left and fix onboarding"]
    n_s7[["Collects the same revenue every month"]]
    n_s10["Churn: revenue disappears"]
    n_s11["Fix the product or find new customers to replace them"]
  end
  n_s1 --> n_s2
  n_s2 --> n_s3
  n_s3 --> n_s4
  n_s4 --> n_s5
  n_s5 -->|"Yes"| n_s6
  n_s5 -->|"No"| n_s3a
  n_s3a --> n_s3
  n_s6 --> n_s7
  n_s7 --> n_s8
  n_s8 -->|"Yes"| n_s9
  n_s8 -->|"No"| n_s10
  n_s9 --> n_s7
  n_s10 --> n_s11
  n_s11 --> n_s2
```

### The numbers investors ask for (detail of step "Collects the same revenue every month")

Lanes:
- The company: person / role (id `team`)

Steps, in the order they run:

1. **Monthly recurring revenue** [start; The company; id `t1`]
   - then Churn: customers lost each month
2. **Churn: customers lost each month** [task; The company; id `t2`]
   - then Cost to win a customer
3. **Cost to win a customer** [task; The company; id `t3`]
   - then Lifetime value of a customer
4. **Lifetime value of a customer** [end; The company; id `t4`]

```mermaid
flowchart LR
  subgraph l_team["The company"]
    n_t1(["Monthly recurring revenue"])
    n_t2["Churn: customers lost each month"]
    n_t3["Cost to win a customer"]
    n_t4(["Lifetime value of a customer"])
  end
  n_t1 --> n_t2
  n_t2 --> n_t3
  n_t3 --> n_t4
```

## Full data (JSON)

```json
{
  "title": "How a subscription software company makes money",
  "maps": {
    "m_root": {
      "id": "m_root",
      "lanes": [
        {
          "id": "visitor",
          "name": "Visitors",
          "type": "person"
        },
        {
          "id": "trial",
          "name": "Free users",
          "type": "person"
        },
        {
          "id": "paid",
          "name": "Paying customers",
          "type": "person"
        },
        {
          "id": "team",
          "name": "The company",
          "type": "person"
        }
      ],
      "steps": [
        {
          "id": "s1",
          "kind": "start",
          "lane": "team",
          "next": [
            {
              "to": "s2"
            }
          ],
          "uses": [],
          "label": "Publish a free trial or free plan"
        },
        {
          "id": "s2",
          "kind": "subprocess",
          "lane": "visitor",
          "link": {
            "id": "cmv0ie5f70027jw06onp4obt3",
            "scope": "public",
            "title": "Generate a lead: from stranger to hand-raiser"
          },
          "next": [
            {
              "to": "s3"
            }
          ],
          "uses": [],
          "label": "Finds the product through search or a friend"
        },
        {
          "id": "s3",
          "kind": "task",
          "lane": "trial",
          "next": [
            {
              "to": "s4"
            }
          ],
          "uses": [],
          "label": "Signs up and tries it"
        },
        {
          "id": "s4",
          "kind": "task",
          "lane": "trial",
          "next": [
            {
              "to": "s5"
            }
          ],
          "uses": [],
          "label": "Reaches the moment it is useful"
        },
        {
          "id": "s5",
          "kind": "decision",
          "lane": "trial",
          "next": [
            {
              "to": "s6",
              "label": "Yes"
            },
            {
              "to": "s3a",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Does it solve their problem?"
        },
        {
          "id": "s3a",
          "kind": "task",
          "lane": "team",
          "next": [
            {
              "to": "s3"
            }
          ],
          "uses": [],
          "label": "Learn why they left and fix onboarding"
        },
        {
          "id": "s6",
          "kind": "task",
          "lane": "paid",
          "next": [
            {
              "to": "s7"
            }
          ],
          "uses": [],
          "label": "Upgrades to a monthly plan"
        },
        {
          "id": "s7",
          "kind": "subprocess",
          "lane": "team",
          "next": [
            {
              "to": "s8"
            }
          ],
          "uses": [],
          "child": "m_metrics",
          "label": "Collects the same revenue every month"
        },
        {
          "id": "s8",
          "kind": "decision",
          "lane": "paid",
          "next": [
            {
              "to": "s9",
              "label": "Yes"
            },
            {
              "to": "s10",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Does the customer renew?"
        },
        {
          "id": "s9",
          "kind": "subprocess",
          "lane": "paid",
          "link": {
            "id": "cmv0iebew0040jw06unuiyu6a",
            "scope": "public",
            "title": "Renew a subscription (before it becomes a surprise)"
          },
          "next": [
            {
              "to": "s7"
            }
          ],
          "uses": [],
          "label": "Keeps paying and may add seats"
        },
        {
          "id": "s10",
          "kind": "task",
          "lane": "team",
          "next": [
            {
              "to": "s11"
            }
          ],
          "pain": {
            "note": "A small monthly churn compounds into a big loss",
            "level": 3
          },
          "uses": [],
          "label": "Churn: revenue disappears"
        },
        {
          "id": "s11",
          "kind": "task",
          "lane": "team",
          "next": [
            {
              "to": "s2"
            }
          ],
          "uses": [],
          "label": "Fix the product or find new customers to replace them"
        }
      ],
      "title": "How a subscription software company makes money",
      "parent": null
    },
    "m_metrics": {
      "id": "m_metrics",
      "lanes": [
        {
          "id": "team",
          "name": "The company",
          "type": "person"
        }
      ],
      "steps": [
        {
          "id": "t1",
          "kind": "start",
          "lane": "team",
          "next": [
            {
              "to": "t2"
            }
          ],
          "uses": [],
          "label": "Monthly recurring revenue"
        },
        {
          "id": "t2",
          "kind": "task",
          "lane": "team",
          "next": [
            {
              "to": "t3"
            }
          ],
          "uses": [],
          "label": "Churn: customers lost each month"
        },
        {
          "id": "t3",
          "kind": "task",
          "lane": "team",
          "next": [
            {
              "to": "t4"
            }
          ],
          "uses": [],
          "label": "Cost to win a customer"
        },
        {
          "id": "t4",
          "kind": "end",
          "lane": "team",
          "next": [],
          "uses": [],
          "label": "Lifetime value of a customer"
        }
      ],
      "title": "The numbers investors ask for",
      "parent": {
        "map": "m_root",
        "step": "s7"
      }
    }
  }
}
```
