Sopact is a technology based social enterprise committed to helping organizations measure impact by directly involving their stakeholders.
Copyright 2015-2026 © sopact. All rights reserved.
every mid-point response scored on arrival — an at-risk flag with the evidence that triggered it, the confidence trajectory against the same baseline, and one recommended action routed to a named human while there's still time to change the ending.
For: program leads and case managers who only discover a drop-out at exit — when the file closes and it’s too late to do anything about it.
Why: traditional case management logs attendance and writes notes nobody reads at scale, so quiet disengagement is invisible until someone stops showing up for good.
Outcome: every mid-point response scored on arrival — an at-risk flag with the evidence that triggered it, the confidence trajectory against the same baseline, and one recommended action routed to a named human while there’s still time to change the ending.
This is Chapter 4 of the Case Intelligence series — the mid wave. In Chapter 3 you captured a baseline mapped to your theory-of-change outcomes, structured on arrival and stamped with a persistent ID. This article is about what that baseline was for: the mid-point re-asks the same questions, and the gap between the two numbers is your earliest warning that someone is slipping.
The running example stays the same: RiseWorks Foundation / Pathways 2027 (Train → Match → Place → Earn). RiseWorks enrolled 80 and completed 62 — 18 people lost between intake and exit. Mid-program is where those 18 should have been caught, because by the midpoint most of them were already sending signals: attendance dipping, confidence sliding, a blocker aging in an open-text box that no one had read.
As in every chapter, each step is tagged [DIY] or [SENSE]: designing the mid-point check and defining what “at-risk” means is thinking work you can do in any AI today; scoring every response on arrival and assembling the caseload early-warning list is what the product does over the store.
Here is the economics nobody puts on a slide: a barrier caught at the midpoint costs a phone call; the same barrier caught at exit costs a participant.
Traditional case management is built to record, not to watch. It logs attendance in one system, stores mentor notes in another, and drops the participant’s own words into a free-text box that gets read — if ever — during the exit review. Each of those is a lagging indicator read on a lag. By the time a case manager notices that Carmen has missed her third session, or that Diego’s confidence has flatlined, the training is two-thirds over and the intervention that would have worked in week 4 is a condolence in week 12.
The RiseWorks funnel makes the cost concrete: 80 enrolled → 62 completed. Eighteen people left. Read their mid-point records and the pattern is not mysterious — attendance drifting below the cohort, a confidence number pointing the wrong way, and a specific, nameable blocker sitting in the open text: “childcare fell through twice this month,” “the pace is fast and I’m struggling to keep up,” “my car broke down and now I feel lost.” None of these people vanished without warning. They disengaged in plain sight, in a field no one was scoring.
The fix is not more data collection. RiseWorks already had the attendance, the confidence, and the open text. The fix is reading it the day it arrives, on the whole caseload at once, and flagging who needs a human before the window closes. That is the entire job of the mid wave.
What you do. Keep it short — three signals, no more, because a mid check that takes twenty minutes doesn’t get filled out by the people most likely to drop. One engagement signal, the same confidence question from intake, and one open question about what’s getting in the way right now.
Real example — RiseWorks. The mid-point form carries exactly this, on the real fields:
The discipline: the confidence question must be byte-for-byte the same as intake — same 1–10, same wording — or you have a mid number with no baseline, which can describe a moment but can never show movement. A mid measure with no matching pre is a check-in, not an early-warning system.
Prompt 1: Mid-Point Designer
PROMPT 1 — MID-POINT DESIGNER [DIY]
Chapter 4 of the Case Intelligence series · How to Spot At-Risk Participants Mid-Program
Copy-paste this into any capable AI — Claude, ChatGPT, or the Sopact Sense Assistant.
Purpose: design a mid-program check short enough to get filled out and
precise enough to matter — three signals, no more.
------------------------------------------------------------
You are designing a SHORT mid-program check-in. A mid check that takes
twenty minutes does not get filled out by the people most likely to drop.
TASK
Build exactly three signals:
1. ONE engagement signal — attendance plus a self-rated engagement item
(1–5), because attendance can look fine while a person has already
checked out. Behavior and felt-engagement together.
2. The SAME confidence question used at intake — identical wording,
identical scale (e.g. 1–10) — so the mid number is a TRAJECTORY
against its baseline, not a fresh number.
3. ONE open blocker question: "What's getting in your way right now?"
Worded for specifics, because a named blocker is an actionable one.
For each question, label the outcome or signal it tracks and the intake
item it pairs with. Confirm the check joins to intake by the same
persistent ID (email) so the confidence item pairs with its baseline.
RULES (deterministic — do not soften them)
- Three questions maximum. A long mid survey loses the quiet people you
most need to hear from.
- The confidence item must match intake byte-for-byte — same scale, same
wording. A mid measure with no matching pre is a check-in, not an
early-warning system.
- Do not add questions "while we have them." Every extra question costs
completion among exactly the participants closest to leaving.
- The same intake form must yield the same mid check every run. Do not
invent items.
OUTPUT FORMAT
A field list: Question | Type/scale | Tracks | Pairs with (intake item) —
plus the persistent-ID line.
WORKED EXAMPLE (RiseWorks Foundation / Pathways 2027)
The RiseWorks mid-point form carries exactly this, on the real fields:
attendance_rate_pct and mid_engagement_1to5 (the engagement signal);
mid_confidence_1to10 — the identical 1–10 confidence question from
intake; and mid_challenges_openended ("What's getting in your way right
now?"). The pairing is the point: Carmen Coleman's mid confidence of 4.0
means nothing alone; 4.3 → 4.0 — a drop, while the on-track cohort was
climbing toward 7.1 — means everything.
------------------------------------------------------------
PASTE YOUR INTAKE FORM BETWEEN THE MARKERS, THEN RUN.
<<<
[your intake form — or at minimum its confidence item and the outcomes it maps to]
>>>
What you do. “At-risk” is not a vibe — it’s a rule you write down once, so the same participant gets the same flag whether they land on a Tuesday or a Friday, and whether the reviewer is caffeinated or exhausted. Turn your three signals into three tiers, each with a one-line rule.
Real example — RiseWorks. From attendance, confidence trajectory, and blocker language:
The rule matters most for the cases attendance alone would wave through. Carmen Coleman attended 95.7% of sessions — a green light in any attendance-only system — but her confidence fell 4.3 → 4.0, her self-rated engagement was 2/5, and her open text named a specific, aging skill blocker. Two signals off while behavior looked perfect: at-risk. Write the rule, and she gets flagged. Leave it to instinct, and she gets a gold star until she quietly stops enrolling in the next module.
Prompt 2: At-Risk Criteria
PROMPT 2 — AT-RISK CRITERIA [DIY]
Chapter 4 of the Case Intelligence series · How to Spot At-Risk Participants Mid-Program
Copy-paste this into any capable AI — Claude, ChatGPT, or the Sopact Sense Assistant.
Purpose: turn your three mid-check signals into on-track / watch / at-risk
tiers with a one-line rule each — so the flag doesn't depend on who reads
the note, or when.
------------------------------------------------------------
You are defining what "at-risk" means for one program. "At-risk" is not a
vibe — it is a rule written down once, so the same participant gets the
same flag whether they land on a Tuesday or a Friday, and whether the
reviewer is caffeinated or exhausted.
TASK
From my three signals (attendance, confidence trajectory vs baseline,
blocker language):
1. Define exactly three tiers — ON-TRACK / WATCH / AT-RISK — each with a
ONE-LINE rule.
2. Use TRAJECTORY, not level: a confidence DROP from the participant's
own baseline is a signal even when the absolute number looks fine.
3. Make AT-RISK require compounding — two or more signals moving the
wrong way at once, or a blocker that has recurred, or engagement at
the floor regardless of attendance — so the list stays short and real.
4. Name the blocker language that escalates immediately regardless of
tier (safety, housing loss, transport collapse, childcare collapse).
RULES (deterministic — do not soften them)
- Exactly three tiers. Fixed names: ON-TRACK / WATCH / AT-RISK.
- Every rule must be mechanical — thresholds and combinations a
spreadsheet could apply. No "use judgment" clauses inside the rule;
judgment belongs to the human the flag routes to.
- The rule must catch the high-attendance case: attendance alone can
never force ON-TRACK if confidence is falling and engagement is at the
floor.
- The same signals must produce the same flag every run. Do not invent
signals I did not provide.
OUTPUT FORMAT
A rule table: Flag | One-line rule | Example trigger — plus the
immediate-escalation list.
WORKED EXAMPLE (RiseWorks Foundation / Pathways 2027)
ON-TRACK — Attendance ≥ 85%, confidence flat or rising vs baseline, no
aging blocker in the text.
WATCH — One signal off — attendance 70–85%, or confidence dipped a
point, or a solvable blocker named — but not compounding.
AT-RISK — Two or more signals compounding — e.g. attendance sliding AND
confidence down vs baseline, or any blocker that has recurred ("twice
this month"), or engagement ≤ 2/5 regardless of attendance.
The rule matters most for the cases attendance alone would wave through.
Carmen Coleman (RW2-046) attended 95.7% of sessions — a green light in
any attendance-only system — but her confidence fell 4.3 → 4.0, her
self-rated engagement was 2/5, and her open text named a specific, aging
skill blocker. Two signals off while behavior looked perfect: AT-RISK.
Write the rule, and she gets flagged. Leave it to instinct, and she gets
a gold star until she quietly stops enrolling in the next module.
------------------------------------------------------------
PASTE YOUR MID-CHECK SIGNALS BETWEEN THE MARKERS, THEN RUN.
<<<
[paste Prompt 1 output — your three signals and their scales]
>>>
One real participant, exactly as the fields arrive — RW2-046, Carmen Coleman, Advanced Manufacturing track, midpoint check submitted mid-program:
email — (the persistent ID that joins this row to her intake and exit)
Engagement: attendance_rate_pct 95.7% · modules_completed 4 · mid_engagement_1to5 2 · mentor_assigned Yes
Confidence: mid_confidence_1to10 4.0 (intake baseline was 4.3 — a drop, on the same 1–10 scale)
mid_challenges_openended — “I don’t get the blueprint symbols yet and it’s stressing me out.”
Read that the way an attendance report can’t. Her behavior is exemplary — 96% attendance would put her at the top of any roster. But the confidence trajectory points down while her cohort’s points up, her felt-engagement is a 2 out of 5, and her own words name the problem precisely: a specific technical module (blueprint symbols) she hasn’t cracked, and the stress that comes before the giving-up. This is not a person with a motivation problem. This is a person one targeted tutoring session away from back on track — if someone reads the box this week instead of at exit. RiseWorks has dozens of these mid records, each with a blocker sitting in plain text, waiting to be read.
From here, this is product output, not a prompt you run. An Intelligent Cell on mid_challenges_openended classifies the blocker the moment the record lands and reads it against the confidence trajectory; an Intelligent Row assembles the At-Risk Profile. Here is Carmen’s, as Sense produces it on arrival:
INTELLIGENT ROW — At-Risk Profile · RW2-046 · Carmen Coleman · Advanced Manufacturing · midpoint
Notice what arrived structured, with zero notes to re-read: the open text became a classified blocker (technical/skill, not logistical) pinned to Carmen’s exact words; the flag fired because the confidence trajectory contradicted the attendance; and the recommended action is specific and time-boxed — not “monitor,” but “instructor session on blueprint symbols this week.” The flag routes a human to Carmen while the fix is still a tutoring slot, not an exit interview. And because the row hangs on her persistent ID, this mid snapshot sits between her intake (4.3) and her exit — the middle point of a trajectory, not an isolated reading.
Prompt 3 — At-Risk Flagger on Arrival
PROMPT 3 — AT-RISK FLAGGER ON ARRIVAL [SENSE]
Chapter 4 of the Case Intelligence series · How to Spot At-Risk Participants Mid-Program
This is product configuration — it runs on arrival in Sopact Sense, not in a chat window.
A chat prompt reads the one response you paste; this fires on every
mid-point response as it lands, reads it against the participant's own
baseline by persistent ID, and re-runs as new check-ins arrive.
------------------------------------------------------------
WHERE IT SITS
Cell 1 on mid_challenges_openended → classifies the blocker and quotes
the exact trigger language
Cell 2 across the record → applies the fixed at-risk tiers
(from Prompt 2) to attendance,
engagement, and the confidence
trajectory vs the intake baseline
CELL INSTRUCTION (the text Cell 1 runs)
Read the blocker text exactly as written. Classify it into the fixed
set — pace/reading load / specific module or skill / childcare /
transport / financial / health / other — and quote the exact words that
triggered the classification. Note whether the blocker is recurring
("twice this month") or aging (raised before, never closed), and
whether it matches a barrier flagged at this participant's intake.
Do not invent blockers the text does not contain. The same text must
classify the same way every run.
ROW ASSEMBLY (the At-Risk Profile spec)
Assemble the per-record profile: the flag (ON-TRACK / WATCH / AT-RISK,
applied by the fixed rules) · the trigger evidence, quoted · the
confidence trajectory — this participant's mid number against their own
intake baseline, same 1–10 scale, with the cohort trend for contrast ·
ONE recommended action, specific and time-boxed, connected to any
barrier flagged at intake · the human to route it to. Hang the row on
the persistent ID so the mid snapshot sits between intake and exit as
the middle point of a trajectory, not an isolated reading.
WHAT IT RETURNS — real record, as Sense produces it on arrival
INTELLIGENT ROW — At-Risk Profile · RW2-046 · Carmen Coleman ·
Advanced Manufacturing · midpoint
Flag: AT-RISK
Trigger (evidence): skill blocker + confidence drop despite high
attendance — "I don't get the blueprint symbols yet and it's
stressing me out" · engagement 2/5 · attendance 95.7%
Confidence vs baseline: 4.3 → 4.0 (down, while cohort trends to 7.1)
Recommended action: instructor-led session on blueprint symbols THIS
WEEK; brief her assigned mentor to check in — attendance masks the
risk, act now
The flag fired BECAUSE the confidence trajectory contradicted the
attendance. The open text became a classified blocker (technical/skill,
not logistical) pinned to Carmen's exact words, and the action is
specific and time-boxed — not "monitor."
WHY THIS NEEDS SENSE
Flagging must happen on arrival, consistently, across the whole caseload,
and re-run as new check-ins land. A one-off prompt cannot watch 80
records, and it cannot connect a mid blocker to its intake baseline —
the join runs on the persistent ID inside the store. A barrier caught at
the midpoint costs a phone call; the same barrier caught at exit costs a
participant.
One participant’s flag is a case note. The whole caseload’s flags, ranked by urgency and routed to named humans, is an early-warning system — and it’s what a case manager actually needs on a Monday morning. The Sopact Assistant produces it across the store: everyone showing early-warning signals right now, ordered by how close they are to walking, each with the evidence and the person who should reach out.
RiseWorks’ early-warning list, as the Assistant assembles it from the live mid store:
The themes cluster, and that’s a program signal, not just a caseload one: across RiseWorks’ at-risk mid records, the most common blockers are pace/reading load (11), childcare (10), a specific hard module (welding positions, 9; subnetting, 6), and transport (7). A childcare pattern showing up ten times isn’t ten individual conversations — it’s a program-design fix. Two people say “too embarrassed to ask” about the same subnetting module: that’s a curriculum flag, surfaced mid-program instead of in an exit survey.
The point a skeptic remembers: the list updates as responses land, and nobody re-reads 80 notes by hand. A case manager opens it Monday, sees the four names that moved into at-risk over the weekend, and spends the week on the people who can still be saved — instead of discovering at exit that eighteen of them left.
Prompt 4 — Early-Warning List
PROMPT 4 — EARLY-WARNING LIST [SENSE]
Chapter 4 of the Case Intelligence series · How to Spot At-Risk Participants Mid-Program
Run this in the Sopact Sense Assistant over your store.
One participant's flag is a case note. The whole caseload's flags, ranked
by urgency and routed to named humans, is an early-warning system — and a
standalone prompt cannot build it, because it never sees the caseload.
------------------------------------------------------------
THE ASSISTANT PROMPTS TO RUN (plain language, over the mid-point store)
1. "List everyone showing early-warning signals right now, ordered by
urgency — at-risk before watch, two compounding signals before one."
2. "For each: the triggering evidence quote, the confidence trajectory vs
their own baseline, and the named human to route to."
3. "Surface aging blockers — open problems logged weeks ago that nobody
closed."
4. "What blocker themes cluster across the at-risk records? Which are
individual conversations and which are program-design fixes?"
WHAT IT RETURNS — RiseWorks Foundation / Pathways 2027, from the live mid store
RW2-066 · Whitney Ferreira | attendance 41% · engagement 2/5 · NO
mentor assigned | "falling behind on the subnetting module and too
embarrassed to ask" | → assign a mentor TODAY + instructor outreach
RW2-002 · Diego Washington | attendance 41% · confidence flat-low
2.9 → 2.8 · engagement 2/5 | "the pace is fast and I'm struggling to
keep up with the reading" | → mentor check-in + pace/tutoring support
RW2-074 · Rosa Dixon | attendance 49% · NO mentor · aging blocker |
"falling behind on the subnetting module and too embarrassed to ask"
| → assign mentor + peer study group
RW2-046 · Carmen Coleman | attendance 96% BUT confidence 4.3 → 4.0 ·
engagement 2/5 | "I don't get the blueprint symbols yet and it's
stressing me out" | → brief assigned mentor — attendance hides the risk
THE THEME CLUSTERS (a program signal, not just a caseload one)
Across RiseWorks' at-risk mid records, the most common blockers: pace/
reading load (11), childcare (10), a specific hard module (welding
positions 9; subnetting 6), and transport (7). A childcare pattern
showing up ten times is not ten individual conversations — it is a
program-design fix. Two people saying "too embarrassed to ask" about the
same subnetting module is a curriculum flag, surfaced mid-program instead
of in an exit survey.
THE POINT A SKEPTIC REMEMBERS
The list updates as responses land, and nobody re-reads 80 notes by hand.
A case manager opens it Monday, sees the names that moved into at-risk
over the weekend, and spends the week on the people who can still be
saved — instead of discovering at exit that eighteen of them left
(RiseWorks' funnel: 80 enrolled → 62 completed).
WHY THIS NEEDS SENSE
The ranking spans every mid record, joined to every intake baseline by
persistent ID, re-sorted as new check-ins arrive. A chat window holds
what you paste; the store holds the caseload. The system prevents
attrition instead of describing it — which a static export or a pile of
case notes cannot do.
Monitoring attendance and calling it early warning. Attendance is a lagging behavioral signal — by the time it drops, disengagement already happened. Carmen attended 96% of sessions and was at-risk. Pair attendance with a confidence trajectory and the participant’s own words, or you will keep missing the quiet ones.
Asking a mid confidence question on a different scale than intake. A mid 1–10 that was a 1–5 at intake is not a trajectory — it’s two unrelated numbers. The mid confidence item must match the baseline byte-for-byte, or “confidence is dropping” is a claim you can’t make.
Collecting the open blocker and never reading it. The mid_challenges_openended box is where the intervention lives — “blueprint symbols,” “childcare fell through,” “too embarrassed to ask.” If it isn’t classified the day it lands, it will be read at exit, which is to say never in time. Score it on arrival or don’t ask it.
Flagging by instinct instead of by rule. Without a written at-risk rule, the same signals produce different flags depending on who’s reviewing and how tired they are. Write the three-tier rule once; apply it identically to everyone.
Treating the flag as the finish line. An at-risk flag with no routed human is a spreadsheet cell. The point is the action — a named person, a specific support, this week. The flag exists to start a conversation, not to end one.
A mid-point check that’s short enough to get filled out and precise enough to matter: one engagement signal, the same confidence question as intake, one open blocker. A written at-risk rule that flags the same person the same way every time — including the ones whose attendance looks fine. An At-Risk Profile produced on arrival, with the evidence and a time-boxed action. And a caseload early-warning list that ranks who’s closest to leaving and routes each to a human — refreshed as responses land, not reconstructed at report time.
Because the mid confidence question matches the baseline, every mid reading is a trajectory — you see the direction, not just the dot. Because the blocker text is classified on arrival, the intervention is a tutoring slot in week 4, not a post-mortem in week 12. Because the flag carries a routed action, “at-risk” becomes a phone call instead of a label. And because every record joins on the persistent ID, the mid snapshot sits inside the same pre/post story the whole series is building — 4.3 → 7.1 → 7.4 for the people who stayed, and a documented, acted-on reason for everyone who was at risk of not. The skeptic’s one-liner: act mid-program on evidence, or explain at exit on hindsight — and hindsight never saved anyone.
Add two fields to your mid-point check, on the exact scales that let them talk to your other waves: your same 1–10 confidence question from intake, and one open “what’s getting in your way right now?” The confidence number becomes a trajectory the moment it has a baseline to compare to; the blocker text becomes your intervention list the moment someone reads it on arrival. Everything else in this article is refinement on those two.
A screen-by-screen walkthrough — configuring the at-risk Cell, watching Carmen’s blocker classify on arrival, and pulling the caseload early-warning list from the Assistant — is in production. Check back on the Academy.
Program leads who find out at exit that they lost eighteen people and can’t say why. Case managers drowning in attendance logs and un-read notes, with no way to see who’s slipping until they’ve slipped. Evaluators who want the mid number to mean something — which it only does against a baseline. If your program notices drop-off in the exit report instead of in week four, the fix starts here.
Catch at-risk participants in Sopact Sense — sopact.com/academy.
Next in the series: How to measure change at exit — the exit wave closes the pre/post pair the baseline opened and the midpoint tracked, turning three readings on the same scale into a provable outcome.
Open Sopact Sense, paste your program description, and put it to work.
Try in Sopact