play icon for videos
← Academy
Analyze · Youth framework rating

How to Measure Youth Development Against a Framework

Rating youth development needs evidence per domain, not a gut call. This shows how to map a young person's progress to a development framework in Sopact Sense — rated, evidenced, and growth-tracked.

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> @keyframes pulseDot{0%,100%{opacity:1}50%{opacity:.35}} *{box-sizing:border-box} body{margin:0;font-family:'Hanken Grotesk',-apple-system,BlinkMacSystemFont,sans-serif;background:#EEF2F9;padding:26px;display:flex;justify-content:center} .card{width:600px;max-width:100%;background:#FFFFFF;border:1px solid #E3E9F4;border-radius:20px;box-shadow:0 26px 64px -32px rgba(15,30,70,.34),0 2px 4px rgba(15,30,70,.05);overflow:hidden} .hdr{display:flex;align-items:center;gap:11px;padding:16px 20px;border-bottom:1px solid #EEF1F7;background:#F5F8FE} .hdr .ic{display:inline-flex;width:30px;height:30px;align-items:center;justify-content:center;border:2px solid #155DFC;border-radius:50%;color:#155DFC;font-size:15px;font-weight:800;flex-shrink:0} .hdr .t{min-width:0} .hdr .t .n{font-weight:800;font-size:14.5px;color:#0F172A;letter-spacing:-.2px} .hdr .t .s{font-size:12px;color:#64748B} .hdr .pill{margin-left:auto;display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:700;color:#155DFC;background:#E6EEFF;padding:5px 10px;border-radius:20px;white-space:nowrap} .hdr .pill .d{width:6px;height:6px;border-radius:50%;background:#155DFC;animation:pulseDot 2s infinite} .tabs{display:flex;gap:0;padding:12px 16px 0;background:#F5F8FE} .tab{flex:1;display:flex;flex-direction:column;align-items:center;gap:5px;cursor:pointer;font-family:inherit;font-size:11.5px;font-weight:700;color:#64748B;background:transparent;border:none;border-bottom:2px solid transparent;padding:8px 4px 10px} .tab.on{font-weight:800;color:#155DFC;border-bottom-color:#155DFC} .tab .num{display:inline-flex;width:20px;height:20px;align-items:center;justify-content:center;border-radius:50%;font-size:11px;font-weight:800;color:#64748B;background:#EEF1F7} .tab.on .num{color:#fff;background:#155DFC} .divider{height:1px;background:#EEF1F7} .body{padding:20px} .eyebrow{font-size:10.5px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;color:#155DFC;margin-bottom:5px} .eyebrow.g{color:#15884F} .headline{font-family:'Inter',Georgia,serif;font-size:18.5px;font-weight:600;line-height:1.25;color:#0F172A;margin-bottom:12px} .lede{font-size:12.5px;line-height:1.55;color:#475569;margin:0 0 14px} .rows{display:flex;flex-direction:column;gap:8px;margin-bottom:14px} .row{display:flex;align-items:center;gap:11px;background:#F5F8FE;border:1px solid #EEF1F7;border-radius:11px;padding:11px 13px} .row .emoji{font-size:17px} .row .rt{flex:1;min-width:0} .row .rt .n{font-size:13px;font-weight:700;color:#0F172A} .row .rt .s{font-size:12px;color:#64748B} .pillsm{font-size:11px;font-weight:800;color:#155DFC;background:#E6EEFF;padding:4px 9px;border-radius:6px;flex-shrink:0} .pillsm.gray{font-weight:700;color:#64748B;background:#EEF1F7} /* chain / timeline */ .chainwrap{position:relative;padding-left:26px} .chainline{position:absolute;left:8px;top:8px;bottom:8px;width:2px;background:#E3E9F4} .cnode{position:relative;margin-bottom:14px} .cdot{position:absolute;left:-26px;top:4px;width:16px;height:16px;border-radius:50%;background:#fff;border:3px solid #94A3B8} .clabel{font-size:9.5px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;color:#64748B;margin-bottom:4px} .cbox{background:#F5F8FE;border:1px solid #EEF1F7;border-radius:11px;padding:10px 12px;font-size:12px;line-height:1.5;color:#334155} .cbox.graded{display:flex;align-items:flex-start;gap:9px;border-left-width:3px;border-left-style:solid} .cnote{margin:0 0 14px 4px;font-size:11px;line-height:1.5} .cnote .plus{display:inline-flex;width:16px;height:16px;align-items:center;justify-content:center;background:#155DFC;color:#fff;border-radius:4px;font-size:10px;font-weight:800;flex-shrink:0;margin-right:6px} .csummary{display:flex;align-items:center;gap:12px;background:#0A1B3D;border-radius:13px;padding:11px 15px;margin-top:4px} .csummary .t{flex:1;font-size:11.5px;color:#CBD8F5} .csummary .t b{color:#F1F5FF} /* matrix */ .mxwrap{border:1px solid #EEF1F7;border-radius:12px;overflow:hidden;margin-bottom:10px} .mxhead{display:grid;grid-template-columns:118px 1fr 1fr;background:#F5F8FE;border-bottom:1px solid #EEF1F7} .mxhead div{font-size:9px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;color:#64748B;padding:7px 9px} .mxrow{display:grid;grid-template-columns:118px 1fr 1fr;border-bottom:1px solid #EEF1F7} .mxrow:last-child{border-bottom:none} .mxrow>div{padding:9px;font-size:11.5px;line-height:1.4;color:#334155;display:flex;align-items:center;flex-wrap:wrap;gap:5px} .mxrow .mxlabel{font-weight:700;color:#0F172A;background:#FAFBFE} .mxchip{font-size:9px;font-weight:800;letter-spacing:.3px;text-transform:uppercase;padding:3px 6px;border-radius:5px;white-space:nowrap} .promptwrap{padding:0 20px 18px} .promptlbl{font-size:10px;font-weight:800;letter-spacing:1px;text-transform:uppercase;color:#94A3B8;margin-bottom:7px} .prompt{display:flex;align-items:flex-start;gap:9px;font-family:ui-monospace,'SF Mono',Menlo,monospace;font-size:11px;line-height:1.5;color:#1E293B;background:#F5F8FE;border:1px solid #EEF1F7;border-left:3px solid #155DFC;border-radius:9px;padding:11px 12px} .prompt .car{color:#155DFC;font-weight:800;flex-shrink:0} .flagrow{display:flex;align-items:flex-start;gap:10px;background:#F5F8FE;border:1px solid #EEF1F7;border-radius:11px;padding:10px 12px;border-left-width:3px;border-left-style:solid;margin-bottom:8px} .flagtag{font-size:9.5px;font-weight:800;letter-spacing:.4px;text-transform:uppercase;padding:4px 8px;border-radius:5px;white-space:nowrap;flex-shrink:0} .flagtxt{font-size:12px;line-height:1.45;color:#334155} .lp{display:flex;align-items:center;gap:12px;background:#0A1B3D;border-radius:13px;padding:14px 16px;margin-top:6px} .lp .ic{display:inline-flex;width:34px;height:34px;align-items:center;justify-content:center;background:#14295C;border:1px solid #26407A;border-radius:9px;color:#7FA8FF;font-size:16px;flex-shrink:0} .lp .rt{flex:1;min-width:0} .lp .rt .n{font-size:13px;font-weight:800;color:#F1F5FF} .lp .rt .s{font-size:11.5px;color:#9DB2D9} .lp .open{font-size:11px;font-weight:800;color:#0A1B3D;background:#7FA8FF;padding:6px 11px;border-radius:7px;white-space:nowrap} </style> </head> <body> <div class="card"> <div class="hdr"> <span class="ic">&#127793;</span> <div class="t"> <div class="n">Case-management program (synthetic) · Youth Framework</div> <div class="s">DEMO-08 · Sopact Sense · Case Management</div> </div> <span class="pill"><span class="d"></span>Mapping</span> </div> <div class="tabs" id="tabs"></div> <div class="divider"></div> <div class="body" id="body"></div> <div class="promptwrap"> <div class="promptlbl">The prompt behind this step</div> <div class="prompt"><span class="car">&gt;</span><span id="promptTxt"></span></div> </div> </div> <script> (function(){ var TABS = ["Setup", "Map", "Fix", "Report"]; var CONTENT = [{"eyebrow": "Step 1 · Load the Decision Brief", "headline": "Rating youth development needs evidence per domain.", "lede": "Not a gut call — the Assistant works only from the Caseload dataset (DEMO-08), a synthetic case-management program.", "prompt": "You are the Sopact Sense Assistant working over the [DEMO] dataset (clean data + persistent contact IDs). Load my Decision Brief (decision, audience, outcomes, indicators, evidence standard) first, then wait for my task."}, {"eyebrow": "Step 2 · Assess youth against the framework domains", "headline": "Evidence per domain, not a gut call.", "lede": "Rate emerging/developing/demonstrated with evidence, graded <strong style=\"color:#15884F\">green</strong>, <strong style=\"color:#C9820A\">amber</strong>, <strong style=\"color:#C63E2B\">red</strong> per domain.", "prompt": "Assess youth [ID] against [FRAMEWORK] domains; rate emerging/developing/demonstrated with evidence; growth since intake. Grade green/amber/red."}, {"eyebrow": "Step 3 · One-fix follow-up", "headline": "Evidence the gap.", "lede": "Agency sits at AMBER — not assessed. The Assistant names the single data point that moves it to green.", "prompt": "Take the lowest-graded element above and fix it using only what the program could realistically measure. Show the before → after grade and the single indicator/edit that moves it to green."}, {"eyebrow": "Step 4 · Missing & incomplete report", "headline": "Strong social-emotional; agency unmeasured.", "lede": "Every amber or red item becomes one named ask — the report leads with the decision it informs.", "prompt": "Create a 'missing & incomplete' report from this analysis in Sopact branding [or paste your website URL / brand guideline to apply your own]. List every element graded amber or red, what is missing, and the one input that fixes each. Lead with the decision this report informs."}]; var BODIES = { setup: "<div class=\"row\"><span class=\"emoji\">&#128221;</span><div class=\"rt\"><div class=\"n\">Decision Brief</div><div class=\"s\">Decision, audience, outcomes, indicators, evidence standard loaded first</div></div><span class=\"pillsm\">Pasted</span></div><div class=\"row\"><span class=\"emoji\">&#128203;</span><div class=\"rt\"><div class=\"n\">Five elements</div><div class=\"s\">Dataset · framework domains · evidence per domain · growth since intake · grade G/A/R</div></div><span class=\"pillsm gray\">Structure</span></div><div class=\"row\"><span class=\"emoji\">&#128274;</span><div class=\"rt\"><div class=\"n\">No hallucination rule</div><div class=\"s\">Only what the program states; infer = flagged</div></div><span class=\"pillsm gray\">Required</span></div>", build: "<div class=\"mxwrap\"><div class=\"mxhead\"><div></div><div>Level</div><div>Evidence</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Social-emotional</div><div>demonstrated<span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div><div>3 dated notes</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Academic</div><div>developing</div><div>grades up</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Identity</div><div>emerging<span class=\"mxchip\" style=\"background:#C9820A;color:#fff\">AMBER</span></div><div>thin evidence</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Agency</div><div>—<span class=\"mxchip\" style=\"background:#C63E2B;color:#fff\">RED</span></div><div>no evidence</div></div></div>", fix: "<div class=\"mxwrap\"><div class=\"mxhead\"><div></div><div>Level</div><div>Evidence</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Social-emotional</div><div>demonstrated<span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div><div>3 dated notes</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Academic</div><div>developing</div><div>grades up</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Identity</div><div>emerging<span class=\"mxchip\" style=\"background:#C9820A;color:#fff\">AMBER</span></div><div>thin evidence</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Agency</div><div>—<span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div><div>Add an agency reflection prompt to check-ins</div></div></div><div class=\"cnote\" style=\"color:#15884F;margin-left:0\"><span class=\"plus\">+</span><strong>Fix applied:</strong> Add an agency reflection prompt to check-ins — moves the agency domain from AMBER (not assessed) to GREEN (assessable).</div>", reportFlags: "<div class=\"flagrow\" style=\"border-left-color:#C9820A\"><span class=\"flagtag\" style=\"color:#C9820A;background:#FBF0DA\">AMBER</span><div class=\"flagtxt\">Identity domain: thin evidence. Fix: capture more identity-related reflections.</div></div><div class=\"flagrow\" style=\"border-left-color:#C63E2B\"><span class=\"flagtag\" style=\"color:#C63E2B;background:#FCE9E7\">RED</span><div class=\"flagtxt\">Agency domain: no evidence. Fix: add an agency prompt to check-ins.</div></div>", lpTitle: "Missing & incomplete report · shareable link", lpSub: "Decision-first · Sopact branding · Case-management program (synthetic) · Youth Framework", summaryBefore: "Grade: 1 green &middot; 1 amber &middot; 1 red. agency domain unassessed", summaryAfter: "Grade: 2 green &middot; 1 amber &middot; 0 red. agency prompt added, assessable" }; var phase = 1; var tabsEl = document.getElementById('tabs'); var bodyEl = document.getElementById('body'); var promptEl = document.getElementById('promptTxt'); function renderTabs(){ tabsEl.innerHTML = ''; TABS.forEach(function(label, i){ var b = document.createElement('button'); b.type = 'button'; b.className = 'tab' + (i === phase ? ' on' : ''); b.innerHTML = '<span class="num">' + (i+1) + '</span><span>' + label + '</span>'; b.addEventListener('click', function(){ phase = i; render(); }); tabsEl.appendChild(b); }); } function renderBody(){ var c = CONTENT[phase]; var eyebrowClass = (phase===2) ? 'eyebrow g' : 'eyebrow'; var out = '<div class="' + eyebrowClass + '">' + c.eyebrow + '</div><div class="headline">' + c.headline + '</div><p class="lede">' + c.lede + '</p>'; if (phase === 0) { out += '<div class="rows">' + BODIES.setup + '</div>'; } else if (phase === 1) { out += BODIES.build; out += '<div class="csummary"><div class="t"><b>' + BODIES.summaryBefore + '</b></div></div>'; } else if (phase === 2) { out += BODIES.fix; out += '<div class="csummary"><div class="t"><b>' + BODIES.summaryAfter + '</b></div></div>'; } else { out += BODIES.reportFlags; out += '<div class="lp"><span class="ic">&#128196;</span><div class="rt"><div class="n">' + BODIES.lpTitle + '</div><div class="s">' + BODIES.lpSub + '</div></div><span class="open">Open &rarr;</span></div>'; } bodyEl.innerHTML = out; promptEl.textContent = c.prompt; } function render(){ renderTabs(); renderBody(); } render(); })(); </script> </body> </html>

In short: Rating a young person's development is too easy to do on a gut call. In Sopact Sense the assessment maps each youth against the framework's domains, rates every domain emerging, developing, or demonstrated with a quoted line, and tracks growth since intake — so the rating rests on evidence, not impression.

1 · Set up over your data

Point the Assistant at a clean caseload with persistent contact IDs so each youth's intake and current evidence stay linked. Load your Decision Brief first — the decision, the audience, the framework you use, and your evidence standard — so every domain rating is grounded in what the program actually records.

2 · Write the prompt

Assess youth [ID] against [FRAMEWORK] domains; rate emerging/developing/demonstrated with evidence; growth since intake. Grade green/amber/red.

The prompt carries five elements. The dataset is the loaded caseload. Framework domains are the development areas you assess against. Evidence per domain ties each rating to a quoted line. Growth since intake compares now against the baseline. Grade G/A/R rates how well-supported each domain rating is.

3 · What Sense produces

Run on the Caseload dataset (DEMO 08) already loaded in Sopact Sense.

GRADE: green | 1 | Demonstrated domain; amber | 1 | Thin-evidence domain; red | 1 | Unassessed domain

Sense returns a rating per domain with its evidence. A domain rated 'demonstrated' on solid, dated evidence comes back green. A domain rated on a single weak note comes back amber — the rating might hold but the evidence is thin. A framework domain with no rating and no evidence at all comes back red: it was never assessed.

4 · Turn a weak link green

Take the lowest-graded element above and fix it using only what the program could realistically measure. Show the before → after grade and the single indicator/edit that moves it to green.

For the unassessed red, the fix is a brief intake-and-review prompt covering every domain, so none is left blank. That single change turns silent gaps into rated, evidenced domains you can report against the framework.

5 · Make the report and share it

Create a 'missing & incomplete' report from this analysis in Sopact branding [or paste your website URL / brand guideline to apply your own]. List every element graded amber or red, what is missing, and the one input that fixes each. Lead with the decision this report informs.
Create a shareable link for this report and open it in a new tab.

Tricks, tips, and troubleshooting

Require evidence for every rating. A domain rated 'demonstrated' with no quote is an opinion. Tie each rating to at least one dated line.

Two evidence points beat one. A single note can mislead. Ask for two before you let a domain move up a level.

Treat blanks as red, not green. An unrated domain isn't 'fine' — it's unassessed. Surface it so it gets covered.

Always read growth against intake. A 'developing' rating means little without the baseline.

Compare each current rating to the intake rating for the same domain, so growth — not just status — is what you report.

Frequently asked questions

How do you measure youth development outcomes?

Map each young person against your framework's domains, rate every domain emerging, developing, or demonstrated with a quoted line, and compare against intake to show growth. Sopact Sense does this in one prompt so the rating is evidenced, not a gut call.

Why does each domain rating need evidence?

Because a rating without a quote is an impression the program can't defend. Tying every emerging, developing, or demonstrated rating to a dated line keeps the framework assessment credible and consistent across assessors.

What makes a domain grade red?

A domain grades red when it has no rating and no evidence — it was simply never assessed. The fix is an intake-and-review prompt that covers every domain so none is left blank.

Ready to try it for yourself?

ChatGPT, Claude, and Gemini are fine for a quick test — but not for an answer you'll put in front of a funder or board. When it has to hold up, run it in Sopact Sense.

Try it in Sopact →