# Create a quote customers actually say yes to

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

- 27 steps across 3 layers
- Persona: Sales rep, Sales manager, Finance, The customer
- Technology / systems: Quoting tool (CPQ)

## Pain points

Where this process hurts, worst first:

- **Approvals start** (Create a quote customers actually say yes to; critical): Approvals sit for two days waiting for a manager to notice them
- **Fix lines, discounts or terms** (Create a quote customers actually say yes to; painful): Quotes get re-checked by hand because the price book lives in three spreadsheets

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

## Create a quote customers actually say yes to

Lanes:
- Sales rep: person / role (id `rep`)
- Sales manager: person / role (id `mgr`)
- Finance: person / role (id `fin`)
- Quoting tool (CPQ): technology / system (id `cpq`)
- The customer: person / role (id `buyer`)

Steps, in the order they run:

1. **Customer asks: what will this cost?** [start; Sales rep; id `q1`]
   - then Confirm scope, quantities and timeline
2. **Confirm scope, quantities and timeline** [task; Sales rep; id `q2`]
   - then Build the quote from the price book
3. **Build the quote from the price book** [subprocess; Sales rep; id `q3`], using Quoting tool (CPQ), opens the detail layer "Build the quote"
   - then Does it need approval?
4. **Does it need approval?** [decision; Quoting tool (CPQ); id `q4`]
   - if "Yes" go to Approvals start; if "No" go to Review the quote for errors
5. **Approvals start** [subprocess; Sales manager; id `q5`] ⚠ PAIN POINT (critical): Approvals sit for two days waiting for a manager to notice them, opens the detail layer "Discount approval"
   - then Review the quote for errors
6. **Review the quote for errors** [task; Sales rep; id `q6`]
   - then Does it look right?
7. **Does it look right?** [decision; Sales rep; id `q7`]
   - if "Yes" go to Generate a branded PDF with an expiry date; if "No" go to Fix lines, discounts or terms
8. **Generate a branded PDF with an expiry date** [task; Quoting tool (CPQ); id `q8`]
   - then Send it with a note on the value, not just the price
9. **Send it with a note on the value, not just the price** [task; Sales rep; id `q9`]
   - then Reviews the quote
10. **Reviews the quote** [task; The customer; id `q10`]
   - then Any questions or changes?
11. **Any questions or changes?** [decision; The customer; id `q11`]
   - if "Yes" go to Revise the quote and resend; if "No" go to Accepts the quote
12. **Revise the quote and resend** [task; Sales rep; id `q12`]
   - then Reviews the quote
13. **Accepts the quote** [task; The customer; id `q13`]
   - then Mark it won and hand off to the order process
14. **Mark it won and hand off to the order process** [end; Sales rep; id `q14`]
15. **Fix lines, discounts or terms** [task; Sales rep; id `q6a`] ⚠ PAIN POINT (painful): Quotes get re-checked by hand because the price book lives in three spreadsheets
   - then Review the quote for errors

```mermaid
flowchart LR
  subgraph l_rep["Sales rep"]
    n_q1(["Customer asks: what will this cost?"])
    n_q2["Confirm scope, quantities and timeline"]
    n_q3[["Build the quote from the price book"]]
    n_q6["Review the quote for errors"]
    n_q7{"Does it look right?"}
    n_q6a["Fix lines, discounts or terms"]
    n_q9["Send it with a note on the value, not just the price"]
    n_q12["Revise the quote and resend"]
    n_q14(["Mark it won and hand off to the order process"])
  end
  subgraph l_mgr["Sales manager"]
    n_q5[["Approvals start"]]
  end
  subgraph l_cpq["Quoting tool (CPQ)"]
    n_q4{"Does it need approval?"}
    n_q8["Generate a branded PDF with an expiry date"]
  end
  subgraph l_buyer["The customer"]
    n_q10["Reviews the quote"]
    n_q11{"Any questions or changes?"}
    n_q13["Accepts the quote"]
  end
  n_q1 --> n_q2
  n_q2 --> n_q3
  n_q3 --> n_q4
  n_q4 -->|"Yes"| n_q5
  n_q4 -->|"No"| n_q6
  n_q5 --> n_q6
  n_q6 --> n_q7
  n_q7 -->|"Yes"| n_q8
  n_q7 -->|"No"| n_q6a
  n_q6a --> n_q6
  n_q8 --> n_q9
  n_q9 --> n_q10
  n_q10 --> n_q11
  n_q11 -->|"Yes"| n_q12
  n_q11 -->|"No"| n_q13
  n_q12 --> n_q10
  n_q13 --> n_q14
```

### Build the quote (detail of step "Build the quote from the price book")

Lanes:
- Sales rep: person / role (id `rep`)
- Quoting tool (CPQ): technology / system (id `cpq`)

Steps, in the order they run:

1. **Choose products and quantities** [start; Sales rep; id `b1`]
   - then Check the compatibility rules
2. **Check the compatibility rules** [task; Quoting tool (CPQ); id `b2`]
   - then Is the configuration valid?
3. **Is the configuration valid?** [decision; Quoting tool (CPQ); id `b3`]
   - if "Yes" go to Apply the customer's contract pricing; if "No" go to Swap out the incompatible item
4. **Apply the customer's contract pricing** [task; Quoting tool (CPQ); id `b4`]
   - then Add shipping, tax and terms
5. **Add shipping, tax and terms** [end; Quoting tool (CPQ); id `b5`]
6. **Swap out the incompatible item** [task; Sales rep; id `b2a`]
   - then Choose products and quantities

```mermaid
flowchart LR
  subgraph l_rep["Sales rep"]
    n_b1(["Choose products and quantities"])
    n_b2a["Swap out the incompatible item"]
  end
  subgraph l_cpq["Quoting tool (CPQ)"]
    n_b2["Check the compatibility rules"]
    n_b3{"Is the configuration valid?"}
    n_b4["Apply the customer's contract pricing"]
    n_b5(["Add shipping, tax and terms"])
  end
  n_b1 --> n_b2
  n_b2 --> n_b3
  n_b3 -->|"Yes"| n_b4
  n_b3 -->|"No"| n_b2a
  n_b2a --> n_b1
  n_b4 --> n_b5
```

### Discount approval (detail of step "Approvals start")

Lanes:
- Sales rep: person / role (id `rep`)
- Sales manager: person / role (id `mgr`)
- Finance: person / role (id `fin`)

Steps, in the order they run:

1. **Reads the quote and the margin** [start; Sales manager; id `a1`]
   - then Discount over 15%?
2. **Discount over 15%?** [decision; Sales manager; id `a2`]
   - if "Yes" go to Finance checks the deal margin; if "No" go to Approved
3. **Finance checks the deal margin** [task; Finance; id `a3`]
   - then Is the margin acceptable?
4. **Is the margin acceptable?** [decision; Finance; id `a5`]
   - if "Yes" go to Approved; if "No" go to Counter with a smaller discount or add terms
5. **Approved** [end; Sales manager; id `a4`]
6. **Counter with a smaller discount or add terms** [task; Sales manager; id `a6`]
   - then Reads the quote and the margin

```mermaid
flowchart LR
  subgraph l_mgr["Sales manager"]
    n_a1(["Reads the quote and the margin"])
    n_a2{"Discount over 15%?"}
    n_a6["Counter with a smaller discount or add terms"]
    n_a4(["Approved"])
  end
  subgraph l_fin["Finance"]
    n_a3["Finance checks the deal margin"]
    n_a5{"Is the margin acceptable?"}
  end
  n_a1 --> n_a2
  n_a2 -->|"Yes"| n_a3
  n_a2 -->|"No"| n_a4
  n_a3 --> n_a5
  n_a5 -->|"Yes"| n_a4
  n_a5 -->|"No"| n_a6
  n_a6 --> n_a1
```

## Full data (JSON)

```json
{
  "title": "Create a quote customers actually say yes to",
  "maps": {
    "m_root": {
      "id": "m_root",
      "lanes": [
        {
          "id": "rep",
          "name": "Sales rep",
          "type": "person"
        },
        {
          "id": "mgr",
          "name": "Sales manager",
          "type": "person"
        },
        {
          "id": "fin",
          "name": "Finance",
          "type": "person"
        },
        {
          "id": "cpq",
          "name": "Quoting tool (CPQ)",
          "type": "system"
        },
        {
          "id": "buyer",
          "name": "The customer",
          "type": "person"
        }
      ],
      "steps": [
        {
          "id": "q1",
          "kind": "start",
          "lane": "rep",
          "next": [
            {
              "to": "q2"
            }
          ],
          "uses": [],
          "label": "Customer asks: what will this cost?"
        },
        {
          "id": "q2",
          "kind": "task",
          "lane": "rep",
          "next": [
            {
              "to": "q3"
            }
          ],
          "uses": [],
          "label": "Confirm scope, quantities and timeline"
        },
        {
          "id": "q3",
          "kind": "subprocess",
          "lane": "rep",
          "next": [
            {
              "to": "q4"
            }
          ],
          "uses": [
            "cpq"
          ],
          "child": "m_build",
          "label": "Build the quote from the price book"
        },
        {
          "id": "q4",
          "kind": "decision",
          "lane": "cpq",
          "next": [
            {
              "to": "q5",
              "label": "Yes"
            },
            {
              "to": "q6",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Does it need approval?"
        },
        {
          "id": "q5",
          "kind": "subprocess",
          "lane": "mgr",
          "next": [
            {
              "to": "q6"
            }
          ],
          "pain": {
            "note": "Approvals sit for two days waiting for a manager to notice them",
            "level": 3
          },
          "uses": [],
          "child": "m_approve",
          "label": "Approvals start"
        },
        {
          "id": "q6",
          "kind": "task",
          "lane": "rep",
          "next": [
            {
              "to": "q7"
            }
          ],
          "uses": [],
          "label": "Review the quote for errors"
        },
        {
          "id": "q7",
          "kind": "decision",
          "lane": "rep",
          "next": [
            {
              "to": "q8",
              "label": "Yes"
            },
            {
              "to": "q6a",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Does it look right?"
        },
        {
          "id": "q6a",
          "kind": "task",
          "lane": "rep",
          "next": [
            {
              "to": "q6"
            }
          ],
          "pain": {
            "note": "Quotes get re-checked by hand because the price book lives in three spreadsheets",
            "level": 2
          },
          "uses": [],
          "label": "Fix lines, discounts or terms"
        },
        {
          "id": "q8",
          "kind": "task",
          "lane": "cpq",
          "next": [
            {
              "to": "q9"
            }
          ],
          "uses": [],
          "label": "Generate a branded PDF with an expiry date"
        },
        {
          "id": "q9",
          "kind": "task",
          "lane": "rep",
          "next": [
            {
              "to": "q10"
            }
          ],
          "uses": [],
          "label": "Send it with a note on the value, not just the price"
        },
        {
          "id": "q10",
          "kind": "task",
          "lane": "buyer",
          "next": [
            {
              "to": "q11"
            }
          ],
          "uses": [],
          "label": "Reviews the quote"
        },
        {
          "id": "q11",
          "kind": "decision",
          "lane": "buyer",
          "next": [
            {
              "to": "q12",
              "label": "Yes"
            },
            {
              "to": "q13",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Any questions or changes?"
        },
        {
          "id": "q12",
          "kind": "task",
          "lane": "rep",
          "next": [
            {
              "to": "q10"
            }
          ],
          "uses": [],
          "label": "Revise the quote and resend"
        },
        {
          "id": "q13",
          "kind": "task",
          "lane": "buyer",
          "next": [
            {
              "to": "q14"
            }
          ],
          "uses": [],
          "label": "Accepts the quote"
        },
        {
          "id": "q14",
          "kind": "end",
          "lane": "rep",
          "next": [],
          "uses": [],
          "label": "Mark it won and hand off to the order process"
        }
      ],
      "title": "Create a quote customers actually say yes to",
      "parent": null
    },
    "m_build": {
      "id": "m_build",
      "lanes": [
        {
          "id": "rep",
          "name": "Sales rep",
          "type": "person"
        },
        {
          "id": "cpq",
          "name": "Quoting tool (CPQ)",
          "type": "system"
        }
      ],
      "steps": [
        {
          "id": "b1",
          "kind": "start",
          "lane": "rep",
          "next": [
            {
              "to": "b2"
            }
          ],
          "uses": [],
          "label": "Choose products and quantities"
        },
        {
          "id": "b2",
          "kind": "task",
          "lane": "cpq",
          "next": [
            {
              "to": "b3"
            }
          ],
          "uses": [],
          "label": "Check the compatibility rules"
        },
        {
          "id": "b3",
          "kind": "decision",
          "lane": "cpq",
          "next": [
            {
              "to": "b4",
              "label": "Yes"
            },
            {
              "to": "b2a",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Is the configuration valid?"
        },
        {
          "id": "b2a",
          "kind": "task",
          "lane": "rep",
          "next": [
            {
              "to": "b1"
            }
          ],
          "uses": [],
          "label": "Swap out the incompatible item"
        },
        {
          "id": "b4",
          "kind": "task",
          "lane": "cpq",
          "next": [
            {
              "to": "b5"
            }
          ],
          "uses": [],
          "label": "Apply the customer's contract pricing"
        },
        {
          "id": "b5",
          "kind": "end",
          "lane": "cpq",
          "next": [],
          "uses": [],
          "label": "Add shipping, tax and terms"
        }
      ],
      "title": "Build the quote",
      "parent": {
        "map": "m_root",
        "step": "q3"
      }
    },
    "m_approve": {
      "id": "m_approve",
      "lanes": [
        {
          "id": "rep",
          "name": "Sales rep",
          "type": "person"
        },
        {
          "id": "mgr",
          "name": "Sales manager",
          "type": "person"
        },
        {
          "id": "fin",
          "name": "Finance",
          "type": "person"
        }
      ],
      "steps": [
        {
          "id": "a1",
          "kind": "start",
          "lane": "mgr",
          "next": [
            {
              "to": "a2"
            }
          ],
          "uses": [],
          "label": "Reads the quote and the margin"
        },
        {
          "id": "a2",
          "kind": "decision",
          "lane": "mgr",
          "next": [
            {
              "to": "a3",
              "label": "Yes"
            },
            {
              "to": "a4",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Discount over 15%?"
        },
        {
          "id": "a3",
          "kind": "task",
          "lane": "fin",
          "next": [
            {
              "to": "a5"
            }
          ],
          "uses": [],
          "label": "Finance checks the deal margin"
        },
        {
          "id": "a5",
          "kind": "decision",
          "lane": "fin",
          "next": [
            {
              "to": "a4",
              "label": "Yes"
            },
            {
              "to": "a6",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Is the margin acceptable?"
        },
        {
          "id": "a6",
          "kind": "task",
          "lane": "mgr",
          "next": [
            {
              "to": "a1"
            }
          ],
          "uses": [],
          "label": "Counter with a smaller discount or add terms"
        },
        {
          "id": "a4",
          "kind": "end",
          "lane": "mgr",
          "next": [],
          "uses": [],
          "label": "Approved"
        }
      ],
      "title": "Discount approval",
      "parent": {
        "map": "m_root",
        "step": "q5"
      }
    }
  }
}
```
