play icon for videos
← Academy
SOPACT ACADEMY · AI SKILLS

Build a Results Framework, Objective to Sub-IRs

Describe your program and Sopact Sense maps the results framework — strategic objective to intermediate results to sub-IRs — grading each with its baseline indicator and flagging the results that don't ladder up.

<!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">&#128200;</span> <div class="t"> <div class="n">Vista Workforce Collaborative · Results Framework</div> <div class="s">DEMO-01 · Sopact Sense · Framework Builder</div> </div> <span class="pill"><span class="d"></span>Building</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", "Build", "Fix", "Report"]; var CONTENT = [{"eyebrow": "Step 1 · Describe the program", "headline": "The input is your description, nothing else", "lede": "Use only what the program states — anything inferred gets marked, never invented.", "prompt": "You are the Sopact Sense Assistant. Here is my program description: [PASTE PROGRAM DESCRIPTION]. Use only what it states; mark anything you infer as [INFERRED]. Wait for my task."}, {"eyebrow": "Step 2 · Map the results framework", "headline": "Strategic Objective down to Sub-IRs", "lede": "Every level is graded <strong style=\"color:#15884F\">green</strong>, <strong style=\"color:#C9820A\">amber</strong>, <strong style=\"color:#C63E2B\">red</strong> — results that don't ladder up and missing baselines get flagged.", "prompt": "Map a Results Framework for [PROGRAM]: one Strategic Objective, 3–5 Intermediate Results, and Sub-IRs, each with a baseline / target indicator. Flag any result that doesn't ladder up and any missing baseline. Use only what the program states; mark anything inferred [INFERRED]. Grade every element green / amber / red."}, {"eyebrow": "Step 3 · One-fix follow-up", "headline": "Ladder the orphan result", "lede": "The lowest-graded element gets one realistic fix — the single edit that moves it toward 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": "Every gap becomes one named ask", "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\">Program description</div><div class=\"s\">Vista Workforce Collaborative — 12-week coding bootcamp, ~60 adults/cohort</div></div><span class=\"pillsm\">Pasted</span></div><div class=\"row\"><span class=\"emoji\">&#127919;</span><div class=\"rt\"><div class=\"n\">Results Framework structure</div><div class=\"s\">Strategic Objective → 3–5 Intermediate Results → Sub-IRs</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 [INFERRED]</div></div><span class=\"pillsm gray\">Required</span></div>", build: "<div class=\"mxwrap\"><div class=\"mxhead\"><div></div><div>Indicator</div><div>Sub-IR</div></div><div class=\"mxrow\"><div class=\"mxlabel\">IR1 · Job-ready skills</div><div>Completion rate set — but &#x27;mentoring builds confidence&#x27; is unmeasured<span class=\"mxchip\" style=\"background:#C9820A;color:#fff\">AMBER</span></div><div>Curriculum matches employer demand</div></div><div class=\"mxrow\"><div class=\"mxlabel\">IR2 · Secure employment</div><div>6-month placement = 71%, verified (baseline set)<span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div><div>Employer partnerships active</div></div><div class=\"mxrow\"><div class=\"mxlabel\">IR3 · Sustained employment</div><div>Wage growth — no baseline / target<span class=\"mxchip\" style=\"background:#C63E2B;color:#fff\">RED</span></div><div>Ongoing alumni support — doesn&#x27;t ladder up</div></div></div>", fix: "<div class=\"mxwrap\"><div class=\"mxhead\"><div></div><div>Indicator</div><div>Sub-IR</div></div><div class=\"mxrow\"><div class=\"mxlabel\">IR1 · Job-ready skills</div><div>Completion rate set — but &#x27;mentoring builds confidence&#x27; is unmeasured<span class=\"mxchip\" style=\"background:#C9820A;color:#fff\">AMBER</span></div><div>Curriculum matches employer demand</div></div><div class=\"mxrow\"><div class=\"mxlabel\">IR2 · Secure employment</div><div>6-month placement = 71%, verified (baseline set)<span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div><div>Employer partnerships active</div></div><div class=\"mxrow\"><div class=\"mxlabel\">IR3 · Sustained employment</div><div>Wage growth — no baseline / target<span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div><div>Link it to IR3 (sustained employment) and set a baseline / target</div></div></div><div class=\"cnote\" style=\"color:#15884F;margin-left:0\"><span class=\"plus\">+</span><strong>Fix applied:</strong> Link it to IR3 (sustained employment) and set a baseline / target</div>", reportFlags: "<div class=\"flagrow\" style=\"border-left-color:#C9820A\"><span class=\"flagtag\" style=\"color:#C9820A;background:#FBF0DA\">AMBER</span><div class=\"flagtxt\">IR1 — completion rate is set, but the mentoring-builds-confidence claim is unmeasured.</div></div><div class=\"flagrow\" style=\"border-left-color:#C63E2B\"><span class=\"flagtag\" style=\"color:#C63E2B;background:#FCE9E7\">RED</span><div class=\"flagtxt\">IR3 — wage growth has no baseline or target, and its sub-IR (ongoing alumni support) doesn&#x27;t ladder up to any IR.</div></div>", lpTitle: "Missing & incomplete report · shareable link", lpSub: "Decision-first · Sopact branding · Vista Workforce Collaborative · Results Framework", summaryBefore: "Grade: 1 green &middot; 1 amber &middot; 1 red. One orphan, one missing baseline.", summaryAfter: "Grade: 2 green &middot; 1 amber &middot; 0 red. One link closed the orphan." }; 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: One prompt now builds a funder-ready results framework from nothing but what a program publicly states. It names the decision the reader must make, arranges the program as a hierarchy — one Strategic Objective, a handful of Intermediate Results, Sub-IRs beneath them — grades every result by evidence, flags the results that don't ladder up and the indicators with no baseline, and ends with a prioritized plan. Below, we run it on a real public page and walk through what each part of the prompt produces.

What is a results framework, and who asks for one?

A results framework is the hierarchy USAID and similar funders ask for: it shows how a program's lower-level results add up to its top aim — one Strategic Objective, several Intermediate Results that must each occur to reach it, and Sub-IRs beneath those, every level carrying a baseline-and-target indicator. Most results frameworks fail two ways: a result that doesn't ladder up to anything above it, or an indicator with a target but no baseline to judge it against.

The prompt below turns that logic into a complete audit. It reads only what your program states publicly, grades every result Green, Amber, or Red, flags the orphans and the missing baselines, and tells you the one result to fix this quarter. We ran it on The Lantern Network's public mentoring-program page — the sections that follow show the prompt for each part, then what came back.

1 · Name the decision, then run one prompt

Every grade depends on who is reading. A board sees "87% placed" as a headline; a renewing funder asks what evidence sits behind each result, and whether every result actually rolls up to the objective. So the prompt's first instruction is a decision frame: before building anything, state in one line who would use this results framework and for what decision. For Lantern, that came back as a corporate sponsor deciding whether to renew its grant. Every judgment below is made from that reader's chair.

Here is the full prompt. Paste it whole, swap in your program name and source, and Sense produces all four parts in one pass:

Build a Results Framework for [PROGRAM NAME] using only what the program publicly states at [SOURCE — URL or pasted program description]. Before building, state in one line who would use this framework and for what decision — then make every judgment from that reader's perspective. PART 1 — Map the hierarchy: one Strategic Objective, 3–5 Intermediate Results that must each occur to reach it, and the Sub-IRs beneath them. Give every level a baseline-and-target indicator. Flag any result that doesn't ladder up to the level above, and any indicator with no baseline. Color every element: GREEN = specific AND evidenced, with a baseline; AMBER = stated but vague, or a target with no baseline; RED = missing, doesn't ladder up, or exists only as [INFERRED]. Tag anything not explicitly stated as [INFERRED]. Include a legend, program name, source URL, and date. PART 2 — One row per result: Result | Level (SO / IR / Sub-IR) | Grade | Baseline & Target (or "none") | one measurable indicator that would test it, phrased so the program could actually collect it (who is measured, what changes, by when). PART 3 — List every orphan result and every AMBER and RED element, ranked by how much the framework depends on it. For each: why it is weak in one sentence, what claim collapses if it fails, and whether the fix is a program-design problem or a measurement gap. PART 4 — The top 3–5 fixes, in priority order for the decision named above. For each: current language (or "missing") → proposed rewrite, plus the single data collection step that would move it toward green. CLOSING SUMMARY — 3–4 sentences: overall strength of the results logic, the weakest link a skeptical funder would attack first, and the one action to take this quarter. RULES — Source fidelity is absolute: never invent program content; if the source does not say it, mark it RED or [INFERRED]. Every green grade must be traceable to specific source language.

Example source: https://www.lanternnetwork.org/mentoring-program. The rules do the heavy lifting — no invented content, every green traceable to a quote and a baseline. The hierarchy is the claim; the table in Part 2 is its evidence trail.

2 · Part 1 — the results hierarchy

Map the hierarchy: one Strategic Objective, 3–5 Intermediate Results, and Sub-IRs beneath them, each with a baseline-and-target indicator. Flag any result that doesn't ladder up and any indicator with no baseline. Color every element green, amber, or red. Tag anything not explicitly stated as [INFERRED]. Include a legend, program name, source URL, and date.

Two disciplines make this different from a wish-list of outcomes. First, every result must ladder up: each Sub-IR rolls into an IR, each IR into the objective — anything that doesn't connect is flagged as an orphan. Second, no result is judged without a baseline: a target with nothing to measure against earns an amber at best. For Lantern, the pattern was immediate — the employment IR is concrete and baselined (288 mentees, 251 internships, 87% placed) while the sustained-outcome results past placement rest on three testimonials with no baseline at all.

The rubric is strict on purpose. Green means specific, evidenced, and baselined ("87% secured internships, jobs, or promotions"). Amber means stated but vague, or a target with no baseline. Red means missing, doesn't ladder up, or exists only as [INFERRED].

GRADE: green | employment IR | 87% placed, 251 internships — baselined, ladders up; amber | confidence sub-IR | claimed in three stories, no baseline; red | sustained-outcome IR | no baseline, and an orphan sub-IR that doesn't ladder up

3 · Part 2 — the indicator & baseline table

For every result, produce one row: Result | Level (SO / IR / Sub-IR) | Grade | Baseline & Target (or "none") | one measurable indicator that would test it, phrased so the program could actually collect it — who is measured, what changes, by when.

This table is the evidence trail behind the hierarchy — one row per result, so nothing in the ladder floats free of a baseline. The indicator column is the practical payoff: each is phrased so the program could actually collect it. For Lantern's weakest result — the sustained-outcome IR — the baseline column reads "none: no follow-up past first placement," and the indicator that would fix it is "share of placed mentees still employed at 12 and 24 months, same mentees tracked by ID." That's not a critique; it's a work order.

4 · Part 3 — the weak-link diagnosis

List every orphan result and every amber and red element, ranked by how much the framework depends on it. For each: (a) why it is weak in one sentence, (b) what claim collapses if it fails, (c) whether the fix is a program-design problem or a measurement gap — these require different responses.

The ranking is by dependence, not level — the question is which weakness takes the most down with it. Lantern's number one wasn't its red impact claims; it was the missing baseline under the sustained-outcome IR: with no follow-up past placement, the whole top of the ladder rests on the 87% number alone. An orphan sub-IR — ongoing alumni support that connects to no IR — came second.

The design-versus-measurement tag matters just as much. A measurement gap means the result plausibly holds but has never been baselined — the fix is data collection. A design problem means a result genuinely connects to nothing — the fix is re-linking or removing it. Lantern's diagnosis came back mostly measurement gaps, plus one orphan to re-link.

5 · Part 4 — the improvement plan

Give the top 3–5 fixes, in priority order for the decision named above. For each: show the current language (or "missing") → a proposed rewrite, plus the single data collection step that would move it toward green.

Each fix is a before-and-after pair. Lantern's first: the sustained-outcome IR, currently a target with "no baseline," gets a stated baseline and target — "X% of placed mentees still employed at 12 months" — fed by a single data step: a short follow-up survey against a persistent participant ID. Fixes two through five follow the same shape: re-link the orphan alumni sub-IR to the employment IR, baseline the confidence sub-IR, and publish the denominator behind the 87%.

6 · The closing summary — one action this quarter

Close with 3–4 sentences: the overall strength of the results logic, the weakest link a skeptical funder would attack first, and the one action to take this quarter.

The summary is the executive read. Lantern's verdict: the framework is strong at its employment IR and unproven above it — the objective and its sustained-outcome results carry targets with no baselines, and one sub-IR ladders up to nothing. The one action this quarter: baseline the sustained-employment result with a 12-month follow-up against a persistent participant ID, so next year's renewal case rests on tracked results rather than three stories.

Take the prompt with you. The full prompt pack — the master prompt plus each part as a standalone prompt you can run separately — is available to download: Download the Results Framework prompt pack.

Tricks, tips, and troubleshooting

Every result must ladder up. The defining test of a results framework is that each sub-IR rolls into an IR, and each IR into the objective. Ask Sense to flag any result that doesn't connect — an orphan result is the most common reason a framework reads as incoherent.

No baseline, no IR. An intermediate result with a target but no baseline can't be judged. Ask Sense which results are missing a baseline and to suggest one the program could realistically collect.

Turn one result green per cycle. Fix the reddest result with the one indicator Sense suggests, collect it next cycle, and re-run the framework.

Tighten your program page while you're here. Once Sense has graded the framework, ask it to bring your public claims in line with your evidence:

Based on the grades above, suggest edits to my program page so its claims match the evidence. Flag every sentence that overstates what we can show, and rewrite it to be accurate and specific.

The same prompt works for a Theory of Change, Logic Model, or Logframe — swap the framework name and keep the parts, rubric, and rules unchanged.

Frequently asked questions

What is a results framework in M&E?

A results framework is a hierarchy used in monitoring and evaluation that shows how a program's lower-level results add up to its top-level aim: one Strategic Objective, several Intermediate Results that must each occur to achieve it, and Sub-IRs beneath those — every level carrying a baseline-and-target indicator. It's favored by USAID and similar funders for showing the logic of “what leads to what.”

What's the difference between a results framework and a logframe?

A results framework shows the hierarchy of results — how sub-results ladder up to intermediate results and to the strategic objective. A logframe is a 4×4 matrix that adds indicators, means of verification, and assumptions for each level. The results framework answers “what leads to what”; the logframe adds “how we'll measure and what must hold true.” Many funders ask for both.

How do you build a results framework with AI?

Describe your program and ask the AI to map one strategic objective, three to five intermediate results, and their sub-IRs, each with a baseline-and-target indicator, then flag any result that doesn't ladder up and any missing baseline. In Sopact Sense this takes minutes and stays grounded only in what your program states, grading each element so the unlinked results and gaps are obvious.

Ready to try it for yourself?

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

Try in Sopact