The 1.15 City: Zürich's Dividend Cascades Outward While 1.6 Million Places Wait Inside
Urban scaling says dense cities pay off, yet Zürich lost 21,500 residents to its hinterland. The OECD finds room for 1.6 million inside today's zones.
Cities are machines with an unusual property: they get better per person as they grow. That is the core finding of urban-scaling science, the framework built by Luís Bettencourt, José Lobo, Deborah Strumsky and colleagues in 2007. As Fabiano L. Ribeiro and Vinicius M. Netto summarise in their 2024 review Urban Scaling Laws (arXiv 2404.02642), socio-economic quantities scale with population at an exponent of about 1.15, while infrastructure scales at about 0.85.
Read it as a system diagram. Two curves diverge, and the gap is the density dividend: more exchange per resident, less network per resident. Behind every scaling plot sit decades of census tables, compiled by statistical-office staff whose names never appear in a citation. The theory stands on their counting.
The paradox in one number
According to UBS CIO analysis reported by AWP on cash.ch and by Daniel Hügli in Bilanz on 22 October, the city of Zürich gained a net of almost 38,000 residents from abroad between 2021 and 2025, and lost a net of about 21,500 to other Swiss municipalities, the largest outflow on record. Zürich still grows; the growth arrives from abroad while resident households move outward.
UBS calls the pattern an ausgeprägte Binnenmigrationskaskade, a pronounced internal-migration cascade: from Zürich to the Unter- and Oberland and Winterthur, then on to Aargau, Schaffhausen and Thurgau. Those cantons, with Wallis and Freiburg, grew fastest, at 1.4 to 1.6 % a year. Nationally, UBS counts nearly 460,000 more people, about 240,000 new households and about 220,000 new dwellings over the five years. The difference travels down the cascade.
The counter-number
“Switzerland’s housing problem is essentially a problem of supply,” writes Priscilla Fialho of the OECD Economics Department in an ECOSCOPE post on 19 October, drawing on the OECD Economic Survey of Switzerland published on 15 September. Its figures: unused reserves inside existing building zones could house 1.6 million more people; 32 % of built-up area in building zones has densification potential, greatest in Zürich and Geneva; and about 80 % of undeveloped buildable land in urban municipalities has at least average public-transport access. Presenting the survey in Bern, Secretary-General Mathias Cormann listed the need to “unlock housing supply”.
←TODAY: A Swiss building permit takes 140 days on average; Zürich 214, Geneva 497.
→3012: Zone rules ship as executable code, and a massing is checked before it is drawn.
Fulcrum: The scaling dividend is only earned where the rules let density be built near the transit that already exists.
So the constraint sits in process rather than concrete. The OECD reports that permit delays rose 67 % over the past decade, that about 10 % of projects remain on hold after a permit is granted, and that only about 43 % of municipalities had adapted their land-use plans to the revised 2014 Spatial Planning Act by 2024. Codes differ canton by canton and are read by hand on both sides of the counter. The OECD’s remedies are harmonised codes, electronic permitting that checks applications against zoning and building rules, and more mixed-use zones. Harmonisation has a real cost: each cantonal rule set encodes local knowledge, and flattening it trades that fit for speed.
Atelier: If permitting moves toward machine-checked applications, the offices that already hold their zone rules as structured data will adapt fastest, and AI assistants become useful only once those rules are explicit rather than buried in PDFs. Monday move: have one person transcribe the Bau- und Zonenordnung of the municipality you build in most into a single parameter table (height, setbacks, Ausnützungsziffer), each value tagged with its article number.
Hack: Test a massing against height, setback and utilisation before anyone opens the permit set. In a GHPython component in Grasshopper, take the massing Brep, the plot and footprint curves, the gross floor area and three limits from your table:
import Rhino.Geometry as rg
h = massing.GetBoundingBox(True).Max.Z
zone = plot.Offset(rg.Plane.WorldXY, -setback, 0.01, rg.CurveOffsetCornerStyle.Sharp)[0]
pts = [footprint.PointAt(t) for t in footprint.DivideByCount(40, True)]
ok = h <= max_h and gfa / rg.AreaMassProperties.Compute(plot).Area <= max_az and all(zone.Contains(p, rg.Plane.WorldXY, 0.01) == rg.PointContainment.Inside for p in pts)Model the site datum at Z = 0, and flip the offset sign if your plot curve runs clockwise. One boolean, three rules, every iteration.
PAZ has followed this thread before: Kalkbreite, read from the rails up showed a Zürich cooperative housing 256 people over a working tram depot at 31.2 m² each, density written as explicit rules from the first sketch. Once the check passes, the PAZ Grasshopper↔Archicad Library carries the validated massing into Archicad without redrawing it. From where I sit in the late 2070s, the cities that kept their dividend made their rules legible to machines and people alike. Encode your municipality’s zone rules and run every early massing through them.
PAZ Kaffi · multidisciplinary editorial, led by PAZ Academy