← Back to story

Specific schoolsMethodology recipe

The legacy of the small-schools movement: 20 years later, did it work?

A reproducibility log: the data this analysis touched, the queries it ran, the outside sources it leaned on, and the steps a third party would follow to re-run it.

Summary

Used New York City's DBN-suffix convention as a cohort proxy for the 2002-2008 Bloomberg-era small-schools wave (suffix ≥ 500), validated against MDRC's documented count of 23 large 'failing' high schools closed during the program. Pulled per-cohort survival rates and average four-year graduation-rate trajectories.

Data sources

  • Database tableschools

    One row per New York City public school (DBN, name, district, borough, school_type, grade_band, latest_enrollment, proclivity_decile, proclivity_score, closed_at, admission_category).

  • Database tableschool_year_metrics

    Long-format per-school per-year metric facts (school_dbn, year, metric_key, subgroup, value, suppressed). Loaded from DOE/NYSED public files via scripts/loaders/*.

  • Loader scriptscripts/loaders/_small_schools_query.ts
  • Cached outputdata/stories/small-schools-data.json

Steps

  1. Split high-school cohort by DBN suffix. Sanity check: cohort with suffix <400 should yield ~23 closed schools, matching the MDRC-documented 2002-2008 closure wave.

    SELECT CASE
             WHEN (SUBSTRING(dbn FROM 4 FOR 3))::int >= 500 THEN 'small_post2002'
             WHEN (SUBSTRING(dbn FROM 4 FOR 3))::int >= 400 THEN 'medium'
             ELSE 'legacy_comprehensive'
           END AS cohort,
           COUNT(*), COUNT(*) FILTER (WHERE closed_at IS NOT NULL)
      FROM schools WHERE grade_band::text='HS'
     GROUP BY cohort;
  2. Average per-cohort four-year graduation rate by year, restricted to still-open HS schools.

    SELECT cohort, year, AVG(value), COUNT(DISTINCT school_dbn)
      FROM schools s JOIN school_year_metrics m ON m.school_dbn=s.dbn
     WHERE s.grade_band::text='HS' AND s.closed_at IS NULL
       AND m.metric_key='graduation_rate_4yr' AND m.subgroup='ALL' AND m.suppressed=false
     GROUP BY cohort, year;

Caveats

The DBN-suffix heuristic is approximate. Some legacy schools carry suffixes ≥ 400 (DeWitt Clinton is 440); some post-2002 creations may have inherited low suffixes. The 23-closure match against MDRC's documented closure count is a validation point, not a proof. Aggregate grad-rate gap (small schools 5 pp below legacy) reflects student-selection differences, not a small-school disadvantage — MDRC's lottery-based design (which controlled for selection) found a positive program effect.

References

Reproduce

Run `npx tsx scripts/loaders/_small_schools_query.ts > data/stories/small-schools-data.json`. To strengthen the cohort definition: pull MDRC's 123-school study roster (in their 2014 sustained-effects publication) and replace the DBN-suffix heuristic with a name-by-name DBN list. To replicate MDRC's lottery-based effect estimate, the city Department of Education's Office of Enrollment holds the high-school-admissions lottery data; access typically requires a research-data agreement.

The recipe lives at data/stories/recipes.ts in the repo. Corrections welcome.