Rank · Assess & Decide · Analysis & Finance
Partner prioritization matrix
Every partner placed on the SOM-by-value 2x2 with a next-best-action per quadrant, so your time goes to the highest-leverage partners.
You receive: A reviewed partner-prioritization calculator + the passing test report, run on your partners.
Part of Grow Partnerships
What's verified: STUD verifies the mechanical part of the partner-prioritization 2x2: that every partner lands in the correct SOM-by-value quadrant given your cut-lines and boundary convention (on-the-line counting high or low, applied per axis), that the quadrant's action label is attached exactly, and that your input order is preserved. Verification runs the deliverable against held-out test cases pinning all four quadrants and both boundary rules. STUD does NOT verify that your SOM and value-lift scores are accurate for any partner, that the cut-lines you chose are sensible, or that the quadrant actions are the right strategy for your business (those are your judgment calls, the calculator classifies them faithfully).
Opens soon
This play is verified and ready. It opens soon, once sign-in and payments are live.
Example
A sample of what this play produces. Your result is generated for your inputs.
""" STUD.com: partner prioritization matrix (play: prioritize-partners-matrix)
Places each partner on the SOM-by-value 2x2 and attaches a next-best-action label per quadrant, so effort goes to the highest-leverage partners first.
Rules (frozen, matches the play's honestScope):
- A partner's SOM score is compared against som_cut; its value-lift score against value_cut. Each axis lands "high" or "low".
- boundary_rule decides how an exact tie on a cut-line counts: "high" (default) counts a tie as high (>=); "low" counts a tie as low (>) so the partner needs to clear the line, not just meet it.
- The quadrant key is "{som_side}_{value_side}", e.g. "high_high". The caller supplies quadrant -> action labels; a quadrant with no label maps to an empty action string rather than raising.
- Partner order is preserved; an empty partner list returns an empty list. """ from future import annotations
from typing import Any
def classify_partner_quadrants(inp: dict[str, Any]) -> list[dict[str, Any]]: som_cut = float(inp.get("som_cut", 50) or 0) value_cut = float(inp.get("value_cut", 50) or 0) boundary_rule = str(inp.get("boundary_rule", "high")) labels = inp.get("labels") or {}
def is_high(score: float, cut: float) -> bool:
return score >= cut if boundary_rule.startswith("high") else score > cut
placed = []
for partner in inp.get("partners") or []:
som = float(partner.get("som", 0) or 0)
value = float(partner.get("value", 0) or 0)
som_side = "high" if is_high(som, som_cut) else "low"
value_side = "high" if is_high(value, value_cut) else "low"
quadrant = f"{som_side}_{value_side}"
action = str(labels.get(f"q_{quadrant}", ""))
placed.append({
"id": str(partner.get("id", "")),
"som": som,
"value": value,
"quadrant": quadrant,
"action": action,
})
return placed
if name == "main": # Worked example: STUD.com (pre-seed) triaging its own ecosystem partners # ahead of the launch window. Partner names below are illustrative # placeholders, not real counterparties; STUD has no signed partners yet. demo_input = { "partners": [ {"id": "agent-framework-partner", "som": 82, "value": 88}, {"id": "dev-community-partner", "som": 91, "value": 34}, {"id": "payments-infra-partner", "som": 28, "value": 76}, {"id": "content-syndication-partner", "som": 22, "value": 19}, ], "som_cut": 50, "value_cut": 50, "boundary_rule": "high", "labels": { "q_high_high": "Invest", "q_high_low": "Nurture", "q_low_high": "Develop", "q_low_low": "Deprioritize", }, } for row in classify_partner_quadrants(demo_input): print(row)
Get early access to STUD the day it goes live.