The prohibitive cost of new construction in Milwaukee

Four single-family homes on the 2000 block of W Vliet St

The photo above shows four of Milwaukee’s newest houses. They were built in 2024 in the Midtown neighborhood by the large affordable housing developer Gorman and Co.  Gorman’s goal for the project was to “serve as a proof of concept that market-rate, owner-occupied hous[ing] can work in the area,” according to reporting by Urban Milwaukee.

Instead, it looks like the original developers will lose their shirts on this project—yet another example of how impractical market rate construction remains in most of Milwaukee.

Back in 2021, Gorman expected the houses to cost around $250,000 to build, with sale prices somewhere under $200,000. To make up the difference, the city created a TIF district contributing $75,000 per home, funded by future property taxes from these new homes.

The market changed dramatically in the early 2020s with construction inflation far outstripping the consumer price index. Those “250k” houses wound up costing “approximately $400,000 to build” according to a Gorman official speaking near the project’s competition in August 2024.

Reflecting the 60% increase in costs, the houses originally went on the market at listings of $359,900 and $369,900 (for the two different floor plans). 324 days after the initial listing, the first home finally sold on April 4, 2025. The closing price: $281,000, 24% less than the initial asking price, which was itself below the reported development cost.

How much does new construction really cost?

It can be tough to find detailed, current, and public information about construction prices. Recently, I acquired the applications for all 47 proposed developments applying for affordable housing tax credits in Minnesota during 2024. These applications include a detailed development budget with dozens of line items for specific costs. I’ve requested the same information from Wisconsin but have not received it. Some legal fees likely vary between the states, but I expect development costs to be basically similar between Minnesota and Wisconsin.

This table shows a simple cost breakdown across all the projects. I’ve removed acquisition costs from these calculations, because many affordable housing projects get the land for free. Leaving aside any land costs, the median housing unit cost $414k to build. Of that cost 75% went to the construction budget, 10% to the developer, 7% in professional fees (architect, permitting, legal, etc.), and 6% to financing costs (insurance, interest, etc.).

table showing the median budgeted development costs of 47 projects applying for affordable housing tax credits in Minnesota in 2024

The next graph shows the per-unit total cost vs. the number of units in the development for each project. There is a wide range in costs per project, but generally, larger projects are cheaper. Projects with 50 or more units had a median per unit price of $389,000, compared with $454,000 for those with fewer than 50 units.

The absolute cheapest proposed development was a 65-unit senior-housing apartment building with a per-unit cost of $300,000. Any family-sized housing development inevitably cost more.

How do total construction prices translate to monthly rents? Imagine if you had to pay off a $300,000 unit at a fixed 6% interest rate over 30 years. The principal, interest, and taxes alone would be $2,415 a month. For the median $414,000 unit, the bare minimum PITI and tax payment would be $3,333. In reality, costs are even higher. Occupancy is always less than 100% and apartment developers must budget for repairs, maintenance, and insurance.

scatterplot showing the per unit development cost vs the number of units in each project

Where can the market afford to build new housing in Milwaukee?

This is one of the most underappreciated facts about housing in cities like Milwaukee. We don’t build housing because, in many (if not most) places, you cannot sell a new house for what it costs to build it. And without significant subsidizes, you cannot charge the rents required to finance the construction of a market-rate apartment building.

Let’s take $350,000 as the bare minimum price required to build a standard detached, single-family home. Citywide, just 7% of houses are worth this much.[i] This improves to 43% among houses built since 2000. Still, most ‘modern’ houses in the city are not worth what it would cost to replace them.

This simple fact, in most neighborhoods houses cost more to build than you can sell them for, explains why the city has so many empty lots. In total, I count 1,500 non-tax-exempt empty lots where you could build a house right now under existing land use rules.[ii] 38% of those lots allow single family development under the existing rules, 44% duplexes or triplexes, and 17% quadplexes or more. The quadplex-eligible empty lots are overwhelmingly in the poorest areas of the city. I count 150 lots in just the 6th and 15th aldermanic districts which a private developer could buy right now and build a quadplex on by-right.

map showing the locations of taxable vacant lots colored by max zoned density

This is the basic conundrum: vacant parcels are common in neighborhoods where prevailing values are far below the level needed to finance new construction. Where home values are high enough to finance new construction, buildable lots are scarce. While it’s possible that developers could tear down existing houses to build new ones, this is practically unheard of in Milwaukee, even in neighborhoods where denser development is already legal.

For example, there are over 3,500 single family homes which could be replaced with a quadplex under existing zoning and lot size rules. But I cannot find a single instance of a quadplex replacing a single family home in my parcel records going back to 1990.

Accessory Dwelling Units

For these reasons, I’m most optimistic about accessory dwelling units as a way to add housing units in Milwaukee. They are cheaper to build and can fit in those neighborhoods of the city where property values are highest.

Also, ADUs are nothing new for Milwaukee. I count about 1,200 city lots classified as a “single family” or “duplex” but which hold multiple residentially buildings. Sometimes called “carriage houses,” they are almost entirely in the older neighborhoods surrounding downtown.

According to this 2025 analysis by Angi, the home contractor marketplace, the typical ADU costs $180,000 to build, with prices ranging between $40,000-$360,000. Costs are cheaper for internal basement or garage conversions and higher for new construction.

I wanted to know how many homeowners in Milwaukee might be able to afford costs in this range, so I modeled the home equity of every local homeowner as of January 2025.[iii] Citywide, the median homeowner has accrued $128,000 in home equity. 66% have at least $100,000 and 26% have $180,000 or more. In total, I estimate 18,000 Milwaukee households have enough home equity to finance the average cost of an ADU.

How many would actually do it? I don’t know. In Seattle, where ADUs are far more expensive, they still permit close to 1,000 a year. Right now, in Milwaukee, we’re averaging fewer than 50 new single family homes or duplexes across the entire city in a typical year. We lose about the same number of units to conversions of duplexes into single family homes. Even a small number of people choosing to build ADUs would be a meaningful change from the status quo.


[i] I’m using the 2024 assessed value and adjusting it by the Wisconsin Department of Revenue’s 0.9024 equalized assessed value ratio for the City of Milwaukee.

[ii] I calculate this based on the lot’s current zoning classification and its lot size. Some lots may have idiosyncratic dimensions which further reduce the allowable density.

[iii] I have data on the purchase date and price of every owner-occupied house in the city. To calculate accrued equity, I subtract the owner’s modeled remaining principal from the 2024 equalized assessed value of the property. I model remaining principal by assuming that the owner paid 5% down, received a 30-year fixed-rate mortgage at prevailing interest rates, and has stayed current on their payments without refinancing. Obviously, individual circumstances will vary from the average predicted by the model.

Continue ReadingThe prohibitive cost of new construction in Milwaukee

How Donald Trump is Changing the Map in Milwaukee County

Small shifts from one election to another may be random and temporary, but consistent changes across three elections show something more enduring.

Across 29% of Milwaukee County, Trump in 2016 was more popular than Mitt Romney and he grew more popular still in each reelection campaign. In another 26% of the county he was less popular than Romney and continued to decline in each reelection campaign. Throughout the remainder of the county, his popularity has fluctuated—in most places dipping in 2020 and growing in 2024.

Subscribe to John’s newsletter to receive posts like this in your inbox.

maps showing the change in vote from one presidential election to the next

For this analysis, I compared the election results from each Milwaukee County suburb along with the 15 City of Milwaukee aldermanic districts (using 2024 boundaries).[i] Each aldermanic district is home to about 38,000 residents, making their population about the same as Oak Creek or Franklin.

Consider the following four regions.

line plot showing the change in vote since 2012 in different areas of Milwaukee County

Milwaukee Core

About 269,000 people live in the Milwaukee core region. This is the poorest area, with a per capita income of $22,000. Only 15% of adults over age 24 have a bachelor’s degree. About 14% of adults are white, 56% are black, and 23% Hispanic.

The voters in the Milwaukee core overwhelmingly support Democratic candidates—Kamala Harris won these 7 districts combined by 74 points. But Donald Trump has made significant inroads here. His 2024 performance was 12 points better than Mitt Romney’s in 2012.

Trump’s improvement here has been practically monotonic. Trump in 2016 was 3.9 points more popular than Romney in 2012. Trump in 2020 was 3.4 points more popular than Trump in 2016. And Trump in 2024 was 4.5 points more popular than Trump in 2020.

Northern Suburbs

The opposite political trend is occurring in Milwaukee’s northern suburbs (pop. 116,000). Across these communities the adult population is 78% white, 64% of those over 24 have a college degree, and the per capita income is $58,000.

Voters here have shifted sharply to the left in response to Trump. Romney lost the area by 13 points, Trump 2016 by 32 points, Trump 2020 by 42 points, and Trump 2024 by 45 points.

Southern Suburbs

Milwaukee County’s southern suburbs (pop. 246,000) are more working class than their northern counterpart. About 33% of adults over 24 have a college degree, and the per capita income is $41,000. The same share of population is white (78%) as in the northern suburbs, but more residents are Hispanic and fewer are Black.

The southern suburbs have long been the most conservative part of the county. Trump won them by 2.2 points in 2016, before losing them by 3.4 in 2020 and 2.9 in 2024.

Milwaukee Periphery

This leaves the collection of neighborhoods I’m calling the “Milwaukee periphery,” as they surround the Milwaukee core. These eight aldermanic districts hold 308,000 residents. The adult population is 57% white, 21% Black, and 14% Hispanic. The per capita income ($37,000) is slightly lower than in the southern suburbs, but the share of those ages 25 and up with a college degree (37%) is slightly higher.

Collectively, the Milwaukee Periphery gave Harris a 45-point victory, virtually identical to her margin of victory in the Northern Suburbs. However, the Trump-era political trajectory of the periphery has more closely resembled that of the southern suburbs.

Trump in 2016 declined by 2.8 points relative to Romney in 2012, and Trump in 2020 was 5 points less popular here than in 2016. Then, the trend reversed slightly, with Trump in 2024 improving by 1.2 points over his 2020 defeat.

Educational sorting

The results in Milwaukee are consistent with the national political realignment in the Trump era. If anything, Trump’s increase in support in Milwaukee’s urban core may trail the changes seen in some other cities.

Formal educational attainment remains one of the clearest predictors of a neighborhood’s changing levels of support for Donald Trump. About 32% of Wisconsin adults (ages 25 and older) have earned a bachelor’s degree (or more).

Since 2012, Democrats have gained the most in the parts of Milwaukee county where more than 50% have earned a bachelor’s degree. Democratic gains have been smaller in places where between 30% and 50% of adults have a college degree.

In places where college degree attainment trails the state average, Trump has usually made gains.

scatterplot comparing the shift in vote from 2012 to 2024 with the share of adults ages 25+ with a college degree

There are exceptions. Fewer than 20% of adults in the Village of West Milwaukee have a college degree, but Harris’ margin of victory was 10 points larger than Obama’s in 2012. This increase in Democratic support likely reflects changes to the racial composition of West Milwaukee, where the non-Hispanic white share of the population declined by about 15 percentage points over the past decade.

Keep this point in mind. Even though Black and Latino voters give Republicans more support than they once did, they still vote for Democrats at a higher rate than white voters overall. Consequently, an increase in the Black or Latino population of a community is still likely to increase its Democratic vote share.

Data Note:

See this repository for the data and graphics used in this article.

This table shows the trend in each Milwaukee County suburb and city aldermanic district in 2012 and 2024.

table showing how different places in Milwaukee County voted in the 2012 and 2024 presidential races

[i] Past elections were held under different ward boundaries, so I aggregated the Milwaukee city results into the current alder districts based on population overlap.

Continue ReadingHow Donald Trump is Changing the Map in Milwaukee County

An appreciation of walking to the polls

map showing a subset of Milwaukee polling place isochrones

This post also appeared in the Blue Book newsletter. Click here to subscribe.

During my years in Milwaukee, I’ve lived in 4 different neighborhoods. The walking distances to my wards’ polling places have been as follows: 0.2 miles, 0.2 miles, 0.3 miles, and roughly 400 ft. Walking has always been the simplest way to cast my ballot.

This is true for many Milwaukeeans. Compared to most parts of America, including most major cities, Milwaukee excels at making the polls convenient to access.

Over 56% of houses are within half a mile, or a 10 minute walk, of their designated election day polling place. And I’m not counting distance as the crow flies. This is the distance it takes to walk on streets and paths accessible to pedestrians.

Specifically, I calculate that 12.4% of Milwaukee houses are located fewer than 5 minutes from their polling place by foot. Another 44.1% are within a 5-10 minute walk; 27.4% are a 10-15 minute walk away; and just 16.1% are further.

For these calculations, I assume that it takes 1 minute to walk 80 meters, or 262 feet. This works out to 5 minutes per quarter mile, a common standard for walkability.

For instance, here are Milwaukee wards 240 and 285, both of which vote at the Humboldt Park Pavilion in the Bay View neighborhood. Together, these two wards have about 2,300 registered voters living in 1,600 housing units.

  • Because the polling place is in the middle of the park, only a tiny sliver of houses, about 1%, are within a 5 minute walk. This area is shown in purple.
  • Over half, 54%, are in the blue area, which is a 5-10 minute walk from the pavilion.
  • Another 39% are 10-15 minutes away, shown in green.
  • The remaining 6% of houses are in the yellow fringes of the two wards, where walking to the pavilion takes 15 minutes or more.
isochrone map of the Humboldt Park Pavilion

Here is another polling place, the Clinton Rose Senior Center, near the intersection of King Drive and Burleigh St. This location also serves about 1,600 homes, but more of them are apartments. In fact, 12% of the housing units are within a 5 minute walk, 71% are within 5-10 minutes, and the remaining 17% are 10-15 minutes away.

isochrone map of the Clinton Rose Senior Center

Click the image below to open an interactive map with statistics for each ward in the city. From the interactive map, you can click the ward name in each tooltip to open a png file with each polling place, as mapped above.

As you might expect, polling places are closest together in the most densely populated sections of the city. Many of the areas which appear poorly covered on the map are not actually populated—this includes the industrial Menomonee Valley, the port, the airport, and many large parks and cemeteries.

Exceptions include the far north and northwest sides, where few residents live within convenient walking distance of their polling place. Here the normal street grid breaks down, and many people live in subdivisions with poor pedestrian connectivity. The population is also less dense, so individual wards are larger.

map with link to interactive map of each ward's isochrone

The citywide map also reveals some wards which are physically much closer to a different polling place than their own. In these cases, it might be possible to better optimize ward-to-polling place assignments.

Overall, access to polling places is fairly even across the city’s racial or ethnic groups. Using 2020 census data, I estimate that 52% of Black, 57% of white, 63% of Hispanic, and 52% of Asian residents live within a 10 minute walk of their polling place. Conversely, those living 15 minutes away or further includes 18% of Black, 16% of white, 11% of Hispanic, and 22% of Asian residents.

Proximity is highest for Latino Milwaukeeans because their numbers are highest in the densely populated near south side. In contrast, much of Milwaukee’s Asian population lives in the less dense far north and northwest sides of the city.

table showing the proportion of different race or ethnic groups by proximity to their polling place

My methodology is too detailed to easily replicate across the United States, but fortunately the federal government collects information about polling places after each election through the biennial Election Administration and Voting Survey. I downloaded the 2022 data and compared the number of registered voters with the number of polling places in each jurisdiction.

Among the largest 500 jurisdictions in the country, Milwaukee ranked 51st for the most polling places per registered voters. There was one polling place for every 1,661 registered voters in 2022. The median, across the largest 500 jurisdictions, was one polling place for every 3,073 voters.

There is a lot of variation in this metric. Cities in Pennsylvania score especially well, holding 9 out of the top 10 spots. Philadelphia County had 630 voters per polling place, Allegheny County 710.

In contrast, most California cities have few polling places for their size. Los Angeles County had just 640 election day polling places in 2022, one for every 11,581 registered voters. For San Diego County it was one for 11,002 voters, for Orange county 11,267.

Milwaukee also provides proportionally more polling places than other cities in Wisconsin. By necessity, small towns often have higher rates of polling places per capita. But Milwaukee has a higher rate of polling places than all of the other 30 largest cities in the state. The largest community with more per capita than Milwaukee is Stevens Point (pop. 26,000).

Election administration is an increasingly difficult job, subject to conspiracy theories and threats of violence. It’s worth remembering and appreciating that, in Milwaukee, voting is still made admirably easy. For most Milwaukeeans, their polling place (and the opportunity to register) is just a short walk out their front door on November 5th.

How I did this

See this GitHub repository for detailed code and data.

I downloaded data from OpenStreetMap, subsetted pedestrian-friendly streets and paths, then converted these paths and their nodes into a network. An advantage to using OSM data (in addition to its being free) is that it includes informal paths, not just strictly official walkways as Google Maps generally does.

I used Jeremy Gelb’s excellent spNetwork R package to calculate isochrones around each polling place. The original isochrone just consists of lines, so I converted each isochrone to polygons using a minimum concave hull algorithm implemented in the concaveman R package. Finally, I subsetted each of these isochrone polygon sets to just the ward boundaries served by each polling place.

I combined all these individual polling place polygon isochrones, intersected them with the centroid coordinates for each parcel in the city, and aggregated the number of residential units in each.

Continue ReadingAn appreciation of walking to the polls