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?

Open Sopact Sense, paste your program description, and put it to work.

Try in Sopact