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