INSIDE MICHIGAN/ A humane public-data project
142,592 · records  ·  520,719 · sentences
VOL. I · NO. 01 · A PUBLIC-DATA PROJECT

People,
not offenders.

Michigan public corrections records describe 142,592 lives behind a difficult legacy web form. Inside Michigan turns that public record into a humane research tool. Every figure you see comes from the public record. Every design choice is ours to make.

§ 04 · Population Flow — the line the State stopped posting
23
Years since Michigan published a max-out rate

To max out is to serve every day of a sentence and walk out with no parole and no one watching. Michigan last reported how often that happens in 2003 — at 13%. It has published nothing since. So we measured it again, from the State’s own public records, and we’ll tell you exactly how little we’re yet sure of.

So we followed everyone who left.

SourceReleaseObserved outcomePRISONn=25 · observed this windowParole14released to supervisionMax-out10no supervisionsynthetic sink · split from prison→dischargeReturned1held or cycled backDischarge · 0

Left of the gate: the 32,213 people held in prison, drawn to scale. Right of the gate: the 25 status changes we actually observed this window — too few to even register against that wall, so the gate magnifies them. Ribbon thickness is strictly proportional to count.

Max-out10 of 25 observed transitions · 40% — released to no parole and no supervision.Caveatupper-bound artifact with sparse snapshots — NOT publishable; see maxOut.definitionPopulation stockInside Michigan flow_stats.json
On what we are — and aren’t — sure of

We observed 10 people discharged from prison this window. Every one of them — 10 of 10 — maxed out: released with no parole and no supervision. That is not a rate. It is too few people, over too short a window, and our snapshots cannot see a parole that began and ended between two of them. Read it as an upper bound: the true share is at most this, and we’ll say so until the count is large enough to mean more.

The reform scorecard — supporting evidence

People, not throughput.

The ledger behind the flow above — what the churn costs, and how often people cycle back through the system. Cited, provisional, and aggregate. (The max-out figure and its caveats are above.)

30-day cost of churn (observed moves)
$18.5k
25 moves · avg $742 per move (expected)
Marginal operating cost only (fuel + officer time + vehicle). Capital and facility overhead excluded. Source model cited in payload.
movement_costs aggregate tabledata/offenders.db (Aggregated SQL only; person-level movement_costs columns are not selected.)Corrections officer loaded wagehttps://www.michigan.gov/corrections/careers/salary-and-benefitsCorrections officer loaded wagehttps://www.bls.gov/oes/2023/may/oes_mi.htmCorrections officer loaded wagehttps://www.bls.gov/news.release/ecec.htmOfficers per movehttps://corrections.az.gov/sites/default/files/documents/policies/700/DO%20705%20-%20AL%20-%203-18-24.pdf (Arizona DOC Dept Order 705 — MDOC publishes no ratio)Processing time assumptionservice/data/cost_model.yaml:labor.processing_hours_per_move (ASSUMPTION — intake/outtake/property/medical-clearance time; item 7 not verified)IRS/GSA per-mile proxyhttps://www.irs.gov/newsroom/irs-sets-2026-business-standard-mileage-rate-at-725-cents-per-mile-up-25-centsIRS/GSA per-mile proxyhttps://www.gsa.gov/travel/plan-a-trip/transportation-airfare-rates-pov-rates/privately-owned-vehicle-pov-mileage-reimbursementEIA gasoline pricehttps://www.eia.gov/dnav/pet/pet_pri_gnd_dcus_r20_w.htm (Tracked in cost_model.yaml; current payload uses IRS all-in mileage rather than a separate fuel term.)EIA diesel pricehttps://www.eia.gov/petroleum/gasdiesel/ (Tracked in cost_model.yaml; current payload uses IRS all-in mileage rather than a separate fuel term.)Administrative overhead assumptionservice/data/cost_model.yaml:overhead.fixed_admin_per_move (ASSUMPTION — no verified source)Security multiplier assumptionservice/data/cost_model.yaml:security_multiplier (Applied on top; high tier reflects extra officers/special vehicles for max custody.)
Violation returns (observed)
21%
Parole/probation violation returns to prison (national benchmark cited for context; Michigan cohort tracking pending richer census)
This is a placeholder anchor until FlowCohort + longitudinal trend data exist. Every return is a person cycling back through the system.
Generated 5/31/2026 · Window: 2026-03-052026-05-29 · 25 status changes observed
Sources & caveats (do not cite without)
Population stockInside Michigan flow_stats.json (Current mirror status bucket counts.)
Observed status transitionsInside Michigan offender_events (Derived from aggregate offender_events status_change rows.)
Computed max-out groundworkInside Michigan flow_stats.json (Upper-bound local computation; not a published MDOC rate.)
2003 max-out anchorhttps://www.urban.org/sites/default/files/publication/58241/411172-Prisoner-Reentry-in-Michigan.PDF (Urban Institute reported 13% discharged at max in 2003; current MDOC publishes no comparable rate.)
Seed vs true intakeInside Michigan flow_stats.json (Seed observations are not real admissions.)
  • Aggregate-only. No named individuals.
  • Flow/max-out figures are low-n groundwork until ≥2 full censuses + discovery exist.
  • Flow and max-out rates are low-n groundwork; render warnings and basis before any percentage.
  • Flow edge prison_to_max_out is a synthetic Sankey sink split from prison_to_discharge; max-out is not an OTIS stock bucket.
View all observed transitions (accessible table)
FromToCountKind
prisonparole14prison_to_parole
prisonprison1prison_to_prison
prisonmax-out10prison_to_max_out
prisondischarged0prison_to_discharge

25 status-change events observed in window · Data is aggregate only · A soft-block is never recorded as a discharge.