STUD.com
← Objectives

Compute · Assess & Decide · Data & Research

Rank product features with a collaborative weighted scorecard

A product team prioritizing a roadmap gets each feature's weighted value, cost normalized to the most expensive feature, absolute value, and a deterministic rank, computed exactly per the CWS formula.

You receive: A pure function computing each feature's weighted value, normalized cost, absolute value, and rank from attribute weights, per-feature build costs, and feature x attribute scores, graded on hidden cases.

Part of Choose Business Model

What's verified: STUD verifies the math (weighted value, normalized cost, absolute value, ranking with the fixed tie-break: lower normalized cost, then feature name) matches the CWS reference on held-out inputs; a feature x attribute pair missing from the scores rows counts as score 0, and when a pair appears twice the last row wins. STUD does NOT judge whether the weights, scores, or man-week estimates are good, nor whether the top-ranked feature is the right thing to build.

Opens soon

Cost20 credits
AcceptanceAutomated check against your inputs
ProtectionHeld until verified delivery

This objective is verified and ready. It opens soon, once sign-in and payments are live.

Deliverable interface

The exact vocabulary the automated check enforces: keys, tokens, entry points, and worked examples. Generated from the verification source.

{
 "constants": {},
 "entryName": "solve",
 "expectNote": "expect is the comparison-space value (your return value goes through normalize first when one is published)",
 "hiddenCaseCount": 13,
 "hiddenCaseNames": [
  "hd_dup_pair_last_wins",
  "hd_tie_break_name",
  "hd_three_by_three",
  "hd_fractional_weights",
  "hd_missing_pair_first_feature",
  "gen0",
  "gen1",
  "gen2",
  "gen3",
  "gen4",
  "gen5",
  "gen6",
  "gen7"
 ],
 "inputKeys": [
  "absoluteValue",
  "attribute",
  "attributes",
  "feature",
  "features",
  "manWeeks",
  "name",
  "normalizedCost",
  "score",
  "scores",
  "weight"
 ],
 "normalizeSource": "def _normalize_cws_feature_priority(r):\n    if not isinstance(r, dict):\n        return repr(r)\n    try:\n        return {\"ranking\": [{\"feature\": str(x[\"feature\"]), \"weightedValue\": round(float(x[\"weightedValue\"]), 4),\n                             \"normalizedCost\": round(float(x[\"normalizedCost\"]), 4),\n                             \"absoluteValue\": round(float(x[\"absoluteValue\"]), 6),\n                             \"rank\": int(round(float(x[\"rank\"])))} for x in r[\"ranking\"]]}\n    except Exception:\n        return repr(r)\n",
 "returnShapes": [
  [
   "ranking"
  ]
 ],
 "signature": "def solve(inp):",
 "submission": "python exposing the entry function; inp is one input object; graded on held-out cases",
 "tier": "calculator",
 "visibleCases": [
  {
   "expect": {
    "ranking": [
     {
      "absoluteValue": 0.144,
      "feature": "A",
      "normalizedCost": 50,
      "rank": 1,
      "weightedValue": 7.2
     },
     {
      "absoluteValue": 0.066,
      "feature": "B",
      "normalizedCost": 100,
      "rank": 2,
      "weightedValue": 6.6
     }
    ]
   },
   "input": {
    "attributes": [
     {
      "name": "businessValue",
      "weight": 0.6
     },
     {
      "name": "strategicFit",
      "weight": 0.4
     }
    ],
    "features": [
     {
      "manWeeks": 5,
      "name": "A"
     },
     {
      "manWeeks": 10,
      "name": "B"
     }
    ],
    "scores": [
     {
      "attribute": "businessValue",
      "feature": "A",
      "score": 8
     },
     {
      "attribute": "strategicFit",
      "feature": "A",
      "score": 6
     },
     {
      "attribute": "businessValue",
      "feature": "B",
      "score": 5
     },
     {
      "attribute": "strategicFit",
      "feature": "B",
      "score": 9
     }
    ]
   },
   "name": "book_two_features"
  },
  {
   "expect": {
    "ranking": [
     {
      "absoluteValue": 0.07,
      "feature": "Only",
      "normalizedCost": 100,
      "rank": 1,
      "weightedValue": 7
     }
    ]
   },
   "input": {
    "attributes": [
     {
      "name": "value",
      "weight": 1
     }
    ],
    "features": [
     {
      "manWeeks": 4,
      "name": "Only"
     }
    ],
    "scores": [
     {
      "attribute": "value",
      "feature": "Only",
      "score": 7
     }
    ]
   },
   "name": "single_feature"
  },
  {
   "expect": {
    "ranking": [
     {
      "absoluteValue": 0.1,
      "feature": "F1",
      "normalizedCost": 50,
      "rank": 1,
      "weightedValue": 5
     },
     {
      "absoluteValue": 0.1,
      "feature": "F2",
      "normalizedCost": 100,
      "rank": 2,
      "weightedValue": 10
     }
    ]
   },
   "input": {
    "attributes": [
     {
      "name": "value",
      "weight": 1
     }
    ],
    "features": [
     {
      "manWeeks": 4,
      "name": "F1"
     },
     {
      "manWeeks": 8,
      "name": "F2"
     }
    ],
    "scores": [
     {
      "attribute": "value",
      "feature": "F1",
      "score": 5
     },
     {
      "attribute": "value",
      "feature": "F2",
      "score": 10
     }
    ]
   },
   "name": "tie_lower_cost_wins"
  },
  {
   "expect": {
    "ranking": [
     {
      "absoluteValue": 0.066,
      "feature": "Y",
      "normalizedCost": 100,
      "rank": 1,
      "weightedValue": 6.6
     },
     {
      "absoluteValue": 0.042,
      "feature": "X",
      "normalizedCost": 100,
      "rank": 2,
      "weightedValue": 4.2
     }
    ]
   },
   "input": {
    "attributes": [
     {
      "name": "value",
      "weight": 0.7
     },
     {
      "name": "fit",
      "weight": 0.3
     }
    ],
    "features": [
     {
      "manWeeks": 2,
      "name": "X"
     },
     {
      "manWeeks": 2,
      "name": "Y"
     }
    ],
    "scores": [
     {
      "attribute": "value",
      "feature": "X",
      "score": 6
     },
     {
      "attribute": "value",
      "feature": "Y",
      "score": 6
     },
     {
      "attribute": "fit",
      "feature": "Y",
      "score": 8
     }
    ]
   },
   "name": "missing_pair_scores_zero"
  }
 ],
 "vocabulary": [
  "absoluteValue",
  "attribute",
  "attributes",
  "feature",
  "features",
  "manWeeks",
  "name",
  "normalizedCost",
  "ranking",
  "score",
  "scores",
  "weight",
  "weightedValue"
 ]
}

Get early access to STUD the day it goes live.