The maintenance gap
Chicago has subsidized thousands of affordable rental units across its seventy-seven community areas. A first look at whether the city maintains the streets around them at the same speed.
Chicago's 311 register tracks resident-filed requests across the city's seventy-seven community areas — the stable socio-demographic geography that pre-dates the city's redrawn political wards. Three of those request types are unambiguous physical-maintenance work: an alley light out, a street light out, and a pothole in the street. The Department of Streets and Sanitation and CDOT own the response. The work is the same on the north and south sides of the city; the timing isn't.
The map below shades each community area by the weighted-average number of days the city takes to close one of those three maintenance tickets, since January 2024. Areas with fewer than fifty closed cases are excluded — the average isn't stable enough. Darker fill is slower.
The next map drops the city's direct affordable-housing footprint on top of the same seventy-seven polygons — every municipally subsidized, deed-restricted rental unit the Department of Housing tracks, in cobalt. Multiply-blended with the lag layer in brick, the darkest areas are the ones high in both measures. This is the question a two-stacked-maps approach asks the reader to do in their head; the bivariate form does the overlay for you.
Many of the names that surface in both lists overlap. The community areas that carry the heaviest concentrations of subsidized units are concentrated on the South and West sides — Near West Side, Grand Boulevard, Douglas, Oakland, Washington Park. The streetlights stay out longer in some of those same areas. The potholes stay open longer.
The honest version of this story is structural: we have two open datasets keyed on the same geography, and putting them next to each other surfaces a pattern worth investigating with harder methods. Drill into the underlying data on the dataset page — the curated views or the SQL playground will let you slice by sr_type, ward, or zip code, and isolate which of the three maintenance categories is driving the lag in each area.
View underlying data
Slowest-response community areas (weighted avg days, since 2024-01-01)
| Community area | Avg days |
|---|
Largest subsidized footprints (total units)
| Community area | Units |
|---|
Data Sources
311 lag: Chicago 311 service requests (v6vf-nfxy). Three queries fanned across the maintenance sr_types
(Alley Light Out Complaint, Street Light Out Complaint, Pothole in Street Complaint), each grouping by community_area and
averaging date_diff_d(closed_date, created_date). Combined client-side as a
case-count-weighted average. Source: VIEWS.responseLagByCommunityArea() in src/lib/data/datasets/chicago-311.ts.
Affordable housing: Affordable Rental Housing Developments (s6ha-ppgi). Grouped by community_area_number, summing units. Source: VIEWS.unitsByCommunityArea() in src/lib/data/datasets/chicago-affordable-housing.ts.
Polygons: Boundaries — Community Areas (current), igwz-8jzy. Stored at src/lib/data/static/chicago/community-areas.geojson; area_numbe is
the join key. 77 features.
Methodology: Both 311 and affordable-housing data fetched at runtime through
the Cloudflare Worker proxy at /api/socrata. The proxy KV-caches aggregates for
one hour. The polygon GeoJSON is committed to the repo and loaded via a SvelteKit ?url import — see the static-data README.