{
  "$schema": "./question-pack-v2.schema.json",
  "format": "math-drill-question-pack",
  "schemaVersion": 2,
  "kind": "market_sizing",
  "id": "market-sizing-method-cookbook",
  "packVersion": "1.0",
  "title": "Market Sizing Method Cookbook",
  "description": "Four original compact exercises demonstrating every supported market-sizing method and guided input kind.",
  "publisher": "Math Drill Project",
  "license": "CC BY 4.0",
  "templates": [
    {
      "id": "reusable-pickup-demand",
      "title": "Reusable Container Pickup Demand",
      "prompt": "Estimate annual consumer revenue for a reusable-container pickup service in a metropolitan area.",
      "description": "Build a demand-side estimate from eligible households, adoption, annual pickup frequency, and the fee per pickup.",
      "difficulty": "intermediate",
      "industry": "marketplaces",
      "sizingType": "demand_side",
      "inputSteps": [
        {
          "id": "eligible-households",
          "label": "Eligible households",
          "inputKind": "integer",
          "required": true,
          "helperText": "Count households in neighborhoods the service could reach.",
          "unit": "customers",
          "variableName": "eligibleHouseholds",
          "assumptionRange": {
            "min": 450000,
            "max": 650000,
            "unit": "customers"
          }
        },
        {
          "id": "household-adoption",
          "label": "Share of eligible households that adopt",
          "inputKind": "percentage",
          "required": true,
          "helperText": "Enter a fraction such as 0.12 or a percentage such as 12%.",
          "unit": "percentage",
          "variableName": "adoptionRate",
          "assumptionRange": {
            "min": 0.08,
            "max": 0.18,
            "unit": "percentage"
          }
        },
        {
          "id": "annual-pickups",
          "label": "Pickups per adopting household per year",
          "inputKind": "number",
          "required": true,
          "unit": "units",
          "variableName": "annualPickups",
          "assumptionRange": {
            "min": 6,
            "max": 14,
            "unit": "units"
          }
        },
        {
          "id": "pickup-fee",
          "label": "Consumer fee per pickup",
          "inputKind": "currency",
          "required": true,
          "unit": "currency",
          "variableName": "pickupFee",
          "assumptionRange": {
            "min": 5,
            "max": 9,
            "unit": "currency"
          }
        },
        {
          "id": "demand-rationale",
          "label": "Optional note on the adoption assumption",
          "inputKind": "note",
          "required": false,
          "helperText": "Record the analogy or observation you used; this note does not enter the formula."
        }
      ],
      "finalFormula": {
        "expression": "eligibleHouseholds * adoptionRate * annualPickups * pickupFee",
        "outputVariable": "annualConsumerRevenue",
        "roundingRule": "nearest_1m",
        "tolerance": {
          "type": "percentage",
          "value": 0.1
        }
      },
      "outputUnit": "currency",
      "rubric": [
        { "id": "structure", "label": "Structure", "maxPoints": 25 },
        { "id": "assumptions", "label": "Assumptions", "maxPoints": 25 },
        { "id": "math", "label": "Math", "maxPoints": 25 },
        { "id": "units", "label": "Units", "maxPoints": 10 },
        { "id": "sense_check", "label": "Sense-check", "maxPoints": 10 },
        { "id": "interpretation", "label": "Interpretation", "maxPoints": 5 }
      ],
      "senseCheck": {
        "prompt": "Choose one useful lens for reflecting on the estimate.",
        "required": true,
        "interpretationOptions": [
          {
            "id": "compare-household-spend",
            "label": "Compare implied annual pickup spending per adopting household with similar convenience services."
          },
          {
            "id": "test-adoption-range",
            "label": "Recalculate the total at the low and high ends of the adoption range."
          },
          {
            "id": "compare-service-capacity",
            "label": "Compare the implied annual pickup count with a plausible local operating capacity."
          }
        ]
      }
    },
    {
      "id": "community-imaging-capacity",
      "title": "Community Imaging Capacity",
      "prompt": "Estimate the annual number of diagnostic imaging exams that a regional clinic network can complete.",
      "description": "Build a capacity-based estimate from clinic count, scanners, daily throughput, operating days, and utilization.",
      "difficulty": "advanced",
      "industry": "healthcare",
      "sizingType": "capacity_based",
      "inputSteps": [
        {
          "id": "clinic-count",
          "label": "Clinics in the network",
          "inputKind": "integer",
          "required": true,
          "unit": "stores",
          "variableName": "clinicCount",
          "assumptionRange": {
            "min": 20,
            "max": 40,
            "unit": "stores"
          }
        },
        {
          "id": "scanners-per-clinic",
          "label": "Average scanners per clinic",
          "inputKind": "number",
          "required": true,
          "unit": "units",
          "variableName": "scannersPerClinic",
          "assumptionRange": {
            "min": 1.5,
            "max": 2.5,
            "unit": "units"
          }
        },
        {
          "id": "exams-per-day",
          "label": "Exams per scanner per operating day",
          "inputKind": "number",
          "required": true,
          "unit": "units",
          "variableName": "examsPerDay",
          "assumptionRange": {
            "min": 18,
            "max": 26,
            "unit": "units"
          }
        },
        {
          "id": "operating-days",
          "label": "Operating days per year",
          "inputKind": "integer",
          "required": true,
          "unit": "days",
          "variableName": "operatingDays",
          "assumptionRange": {
            "min": 240,
            "max": 300,
            "unit": "days"
          }
        },
        {
          "id": "scanner-utilization",
          "label": "Share of theoretical scanner capacity used",
          "inputKind": "percentage",
          "required": true,
          "unit": "percentage",
          "variableName": "utilizationRate",
          "assumptionRange": {
            "min": 0.65,
            "max": 0.85,
            "unit": "percentage"
          }
        },
        {
          "id": "sense_check",
          "label": "I compared the implied exam frequency with a reasonable population-level benchmark",
          "inputKind": "boolean",
          "required": true,
          "helperText": "Check this after completing at least one plausibility comparison."
        }
      ],
      "finalFormula": {
        "expression": "clinicCount * scannersPerClinic * examsPerDay * operatingDays * utilizationRate",
        "outputVariable": "annualExamCapacity",
        "roundingRule": "nearest_1k",
        "tolerance": {
          "type": "percentage",
          "value": 0.05
        }
      },
      "outputUnit": "units",
      "rubric": [
        { "id": "structure", "label": "Structure", "maxPoints": 25 },
        { "id": "assumptions", "label": "Assumptions", "maxPoints": 25 },
        { "id": "math", "label": "Math", "maxPoints": 25 },
        { "id": "units", "label": "Units", "maxPoints": 10 },
        { "id": "sense_check", "label": "Sense-check", "maxPoints": 10 },
        { "id": "interpretation", "label": "Interpretation", "maxPoints": 5 }
      ],
      "senseCheck": {
        "prompt": "Choose one additional way to interpret the capacity result.",
        "required": true,
        "interpretationOptions": [
          {
            "id": "population-frequency",
            "label": "Translate total exams into exams per regional resident."
          },
          {
            "id": "downtime-sensitivity",
            "label": "Stress-test the result for maintenance downtime or staffing gaps."
          },
          {
            "id": "clinic-throughput",
            "label": "Compare implied exams per clinic with a peer network range."
          }
        ]
      }
    },
    {
      "id": "compliance-software-revenue-pool",
      "title": "Compliance Software Revenue Pool",
      "prompt": "Estimate the annual revenue pool for compliance software sold to eligible businesses in one country.",
      "description": "Build a revenue-pool estimate from eligible accounts, paid penetration, and annual contract value while recording the segment frame.",
      "difficulty": "intermediate",
      "industry": "saas",
      "sizingType": "revenue_pool",
      "inputSteps": [
        {
          "id": "segment-frame",
          "label": "Segment frame used for the estimate",
          "inputKind": "choice",
          "required": true,
          "helperText": "Either frame is acceptable; align the numeric assumptions with the frame you choose.",
          "options": [
            {
              "id": "broad-small-business",
              "label": "Broad small-business segment with a lower contract value"
            },
            {
              "id": "regulated-mid-market",
              "label": "Narrower regulated mid-market segment with a higher contract value"
            }
          ]
        },
        {
          "id": "eligible-accounts",
          "label": "Eligible business accounts",
          "inputKind": "integer",
          "required": true,
          "unit": "customers",
          "variableName": "eligibleAccounts",
          "assumptionRange": {
            "min": 12000,
            "max": 20000,
            "unit": "customers"
          }
        },
        {
          "id": "paid-penetration",
          "label": "Share purchasing a paid compliance product",
          "inputKind": "percentage",
          "required": true,
          "unit": "percentage",
          "variableName": "paidPenetration",
          "assumptionRange": {
            "min": 0.12,
            "max": 0.25,
            "unit": "percentage"
          }
        },
        {
          "id": "annual-contract-value",
          "label": "Average annual contract value",
          "inputKind": "currency",
          "required": true,
          "unit": "currency",
          "variableName": "annualContractValue",
          "assumptionRange": {
            "min": 4000,
            "max": 8000,
            "unit": "currency"
          }
        }
      ],
      "finalFormula": {
        "expression": "eligibleAccounts * paidPenetration * annualContractValue",
        "outputVariable": "annualRevenuePool",
        "roundingRule": "nearest_1m",
        "tolerance": {
          "type": "percentage",
          "value": 0.1
        }
      },
      "outputUnit": "currency",
      "rubric": [
        { "id": "structure", "label": "Structure", "maxPoints": 25 },
        { "id": "assumptions", "label": "Assumptions", "maxPoints": 25 },
        { "id": "math", "label": "Math", "maxPoints": 25 },
        { "id": "units", "label": "Units", "maxPoints": 10 },
        { "id": "sense_check", "label": "Sense-check", "maxPoints": 10 },
        { "id": "interpretation", "label": "Interpretation", "maxPoints": 5 }
      ],
      "senseCheck": {
        "prompt": "Choose one useful interpretation of the revenue-pool estimate.",
        "required": true,
        "interpretationOptions": [
          {
            "id": "revenue-per-eligible-account",
            "label": "Express the result as revenue per eligible account, including non-buyers."
          },
          {
            "id": "segment-boundary-test",
            "label": "Rebuild the estimate under the other segment frame and compare the totals."
          },
          {
            "id": "vendor-share-test",
            "label": "Apply several plausible vendor shares to translate the pool into company revenue."
          }
        ]
      }
    },
    {
      "id": "appliance-repair-supply",
      "title": "Independent Appliance Repair Supply",
      "prompt": "Estimate annual household appliance repair jobs completed by independent providers in a region.",
      "description": "Build a supply-side estimate from provider count, technicians, monthly jobs, active months, and the relevant service share.",
      "difficulty": "beginner",
      "industry": "consumer_goods",
      "sizingType": "supply_side",
      "inputSteps": [
        {
          "id": "independent-providers",
          "label": "Independent repair providers",
          "inputKind": "integer",
          "required": true,
          "unit": "stores",
          "variableName": "providerCount",
          "assumptionRange": {
            "min": 600,
            "max": 900,
            "unit": "stores"
          }
        },
        {
          "id": "technicians-per-provider",
          "label": "Average technicians per provider",
          "inputKind": "number",
          "required": true,
          "unit": "users",
          "variableName": "techniciansPerProvider",
          "assumptionRange": {
            "min": 2,
            "max": 4,
            "unit": "users"
          }
        },
        {
          "id": "jobs-per-technician-month",
          "label": "Repair jobs per technician per active month",
          "inputKind": "number",
          "required": true,
          "unit": "units",
          "variableName": "jobsPerTechnicianMonth",
          "assumptionRange": {
            "min": 35,
            "max": 55,
            "unit": "units"
          }
        },
        {
          "id": "active-months",
          "label": "Active months per year",
          "inputKind": "integer",
          "required": true,
          "unit": "months",
          "variableName": "activeMonths",
          "assumptionRange": {
            "min": 10,
            "max": 12,
            "unit": "months"
          }
        },
        {
          "id": "appliance-job-share",
          "label": "Share of provider jobs involving household appliances",
          "inputKind": "percentage",
          "required": true,
          "unit": "percentage",
          "variableName": "applianceJobShare",
          "assumptionRange": {
            "min": 0.7,
            "max": 0.9,
            "unit": "percentage"
          }
        },
        {
          "id": "supply-caveat",
          "label": "Optional note on excluded channels or capacity constraints",
          "inputKind": "note",
          "required": false,
          "helperText": "Record a limitation you would mention when presenting the estimate."
        }
      ],
      "finalFormula": {
        "expression": "providerCount * techniciansPerProvider * jobsPerTechnicianMonth * activeMonths * applianceJobShare",
        "outputVariable": "annualIndependentRepairJobs",
        "roundingRule": "nearest_1k",
        "tolerance": {
          "type": "percentage",
          "value": 0.08
        }
      },
      "outputUnit": "units",
      "rubric": [
        { "id": "structure", "label": "Structure", "maxPoints": 25 },
        { "id": "assumptions", "label": "Assumptions", "maxPoints": 25 },
        { "id": "math", "label": "Math", "maxPoints": 25 },
        { "id": "units", "label": "Units", "maxPoints": 10 },
        { "id": "sense_check", "label": "Sense-check", "maxPoints": 10 },
        { "id": "interpretation", "label": "Interpretation", "maxPoints": 5 }
      ],
      "senseCheck": {
        "prompt": "Optionally choose a lens for reviewing the supply estimate.",
        "required": false,
        "interpretationOptions": [
          {
            "id": "jobs-per-household",
            "label": "Compare implied annual jobs per household with appliance ownership and failure frequency."
          },
          {
            "id": "provider-throughput",
            "label": "Compare implied jobs per provider with a plausible technician schedule."
          },
          {
            "id": "channel-comparison",
            "label": "Compare independent-provider volume with manufacturer and retailer service channels."
          }
        ]
      }
    }
  ]
}
