Brian Keegan is a regular opinion columnist for Boulder Reporting Lab. His “Charting Boulder” column uses public data to make sense of how the city is changing — from housing and politics to income and population — with clear explanations and a focus on equity.

One of my goals in writing this column is to raise the bar for how our community makes — and evaluates — arguments. In a world where political and media claims are often repeated until they become “facts,” we owe it to ourselves to examine these assumptions closely. Are these beliefs still true? Were they ever?

Another part of this mission is accountability. Today, we have more data and better methods for understanding our community than ever before, but fewer ways to turn facts into change. Politicians are more insulated, reporters are stretched more thinly, and scientists face greater pressure to avoid public interest topics. Yet science, at its core, belongs to all of us. That means scientists should engage the public, and the public should hold scientists to high standards.

To do my part, I make two promises to you:

First, I will use public datasets and share all my data and code openly. Our governments (federal, state, county and city) release an abundance of data, sometimes in accessible formats like CSV or JSON, sometimes buried in PDFs or audio files. Using these data resources is not just about transparency or curiosity; it’s essential for keeping them public, as there are very real efforts to enclose or destroy open data. You can always find the data and code for these columns (usually Jupyter Notebooks in Python) on my GitHub repository. Pull requests are welcome!

Second, I invite your scrutiny and feedback. I am human — mistakes will happen, and I am committed to correcting them. An already promising part of writing this column is hearing from readers. Your questions spark important conversations that go far beyond what fits in one column. Many of your insights will — and should — shape future contributions.

My June 29 column challenged the widely held belief that Boulder is “full,” using decades of population data to show how slow-growth policies have stalled growth, shifted development to neighboring communities and weakened Boulder’s long-term vitality.

Here’s a look at some of the feedback it received, particularly around Boulder’s plateauing population growth:

CU student population

Many of you pointed out that my last column did not examine the impacts of CU Boulder’s enrollment, often with the assumption that the university disproportionately burdens the city. (Full disclosure: I am faculty at CU Boulder.) Conflicts between a university and its neighboring community — often called “town-gown tensions” — are hardly unique to Boulder, and several readers asked how CU’s student numbers shape our city’s population.

Combining CU’s historical enrollment data with the State Demography Office’s annual municipal population estimates since 1980, the figure below plots CU enrollment as a percentage of the city’s population. CU’s student population in 2023 was at its highest fraction since 1980. 

But there are some caveats to consider. First, not all CU Boulder students reside in Boulder. CU’s estimates of where students live since 2017 show approximately 15% of undergraduates and 25% of graduate students live outside of Boulder. 

Second, CU’s enrollment hasn’t grown steadily, and its future is in flux. There were several significant declines in the late 1990s and early 2010s. And while the Prime Effect is real, the consequences of Trump 2.0 policies and the impending “demographic cliff” are just beginning to affect CU enrollment

Finally, research universities are essential shock absorbers for cities and regions, helping to cushion against economic downturns, policy shifts and demographic changes. More students means more customers in local businesses, more tax dollars for our governments, more skilled graduates, more progressive citizens and a stronger university, especially as TABOR continues to strangle higher education funding in Colorado.

Jobs-housing balance

Another recurring critique argues the number of jobs within the city is greater than the amount of housing. The argument goes that the city’s encouragement of job growth without adding enough housing creates a mismatch that drives up housing costs and contributes to sprawl, traffic and pollution. In other words: Because Boulder is already full, send new jobs somewhere else to stop attracting new people.

While historical data on employment are readily available for the county, numbers about jobs within the city are harder to find.

Then I came across a gem of a Census dataset with the pithy name “Longitudinal Employer-Household Dynamics Origin-Destination Employment Statistics” (LODES) that describes employment “where workers are employed and where they live” with data from 2002 to 2022. Dividing the number of jobs from the “workplace area characteristics” by the SDO’s municipal housing data (only available back to 2010), the figure below is one way of capturing the number of jobs per housing unit in Boulder since 2010.

This jobs-housing ratio increased modestly from 2010 to 2019 before crashing during the Covid-19 pandemic and bouncing back to pre-pandemic levels in 2022 (the last data available). While the trend is upward, the change in absolute terms is modest: from 1.86 jobs per house in 2010 to 1.93 in 2022. It is certainly not a flood of Silicon Valley refugees commuting in from Louisville, like some overheated rhetoric would have us believe.

Suburbanization

One of my favorite critiques came from a Redditor who piquantly argued that my column purposefully misunderstood “the most basic contours of suburbanization.” They claimed that the tapering growth of the city relative to the county “happened to every single city” and should not be attributed to Boulder’s adoption of slow-growth policies in the 1970s.

This is a genuinely interesting question. To understand whether Boulder was just a normal suburbanizing metropolis, I created a “basket” of 24 mid-sized peer cities that also contain major universities as a comparison. Using historical data from the National Historical Geographic Information System, I retrieved the diennial population for each of these cities and their counties since 1970 (no place-level data is available before then). The population growth of the cities from 1970 to 2020 was divided by the growth of their counties: Did university towns keep up with their counties? The figure below ranks the ratios of these city-to-county growth rates.

Boulder still comes in as the third slowest-growing university city relative to its county in this basket, which is right alongside similar growth-anxious communities like Berkeley, Santa Barbara and Mountain View. However, other college towns like Eugene, Iowa City and College Station grew more quickly than their surrounding counties. It turns out different cities have different historical patterns of suburbanization.

A single column cannot answer every question, nor is it the final word. But your feedback and the discovery of other local data resources (Downtown Boulder Partnership has fascinating pedestrian count data!) could sharpen our debates. As Boulder’s demographics, politics and economy change, so should the way we use local data resources to guide community decisions — like the Boulder Valley Comprehensive Plan that will shape development for decades to come.

That’s the promise of public interest data science: not just to mythbust, but to make arguments about our community more accountable and actionable. By openly sharing data, code, precedent and other evidence, we can create more — dare I say — enlightened civic values where empirical scrutiny is the norm and hazy nostalgia and lazy ad hominems are exceptions. 

So keep the feedback coming, and let’s hold each other to higher standards in our arguments.

The data and code for replicating these analyses can be found on GitHub.

Brian C. Keegan, Ph.D., is a computational social scientist and an associate professor in the Department of Information Science at the University of Colorado Boulder. He teaches courses on data storytelling, network science, and web data science, and his research examines high-tempo online collaborations, the governance of online communities, and public-interest data science. He is the vice chair of the City of Boulder’s Cannabis Licensing and Advisory Board, a board member of Boulder Progressives, and serves on the editorial board of the Boulder Housing Network.

Join the Conversation

29 Comments

  1. I find this article very refreshing. I live in the Goss-Grove neighborhood–have since 1978–and find the City’s recent idea regarding pay-to-park in Goss-Grove whimsical. Supposedly Goss-Grove residents will receive free RTD eco-passes from the money collected. First, most residents, I believe, are CU students; don’t they already receive RTD passes for free? Second, as I walk my dog, I notice there is a comfortable amount of on-street parking all year round–younger folks seem to be more into walking than their predecessors were. Even the Boulder High School students seem to be walking/bussing to classes. Just wondering how this came to pass–unless the plan is to charge the football crowd for their clogging the streets in Goss-Grove.

  2. The housing issue is exacerbated by Boulder’s large amount of open space, which was widely supported by residents when the initiative to conserve began. Now many lament the lack of housing in the city. So be it – you made your bed, now lay in it. The open space effort should be widely applauded. Not everyone can live in Boulder. That’s reality.

    1. He doesn’t consider at all ( very typical) , the impact more people will have on wildlife and wild lands. Boulder’s slow growth policies have meant we have preserved something for other species.

      1. Unfortunately Boulder’s slow growth policies have a negative impact on the environment. It forces people into the surrounding suburbs that take significantly more space from wildlife. It means they commute into Boulder to study or work, creating more pollution and greenhouse gases. Boulder’s open space is to be commended, but it works best with more density in Boulder (which means people take up less space and there’s more space for wildlife). Gentle density of 3-4 stories in appropriate areas, townhouses and duplexes in others, supports more local business, allows people to take alternative transport to their work in Boulder, and reduces their environmental impact. It allows us to live in more harmony with nature.

  3. I’m one of the new people moving to Boulder with my spouse. We are relocating from Washington DC. We decided to rent given the very limited supply of condos at a price point that works for us. Surprisingly, Boulder real estate is more expensive than DC. While I like the focus on slower growth or strategic growth, I do think there is opportunity for more multifamily condos and apartments that are three or four story tall, like what has been built in Boulder Junction. The concentration of residents is good for local businesses and is more economical for providing services. Keep sharing the data and thank you!

  4. I’m all for data! Can you supply the following for the City of Boulder: 1) how many new housing units have been added each year from 2015 to 2025? 2) what percentage of these units are permanently affordable and how that is defined? (For example, if 200 attached housing units were added in one year, how many are in a category defined as affordable and how does that rental or purchase price compare to the market price for a similar unit at that time?) I’d also be interested in the current vacancy rate for non-single family housing.

    1. Patricia, these are good questions. The State Demography Office repackages American Community Survey data from the Census Bureau that can address your first and third questions.

      https://demography.dola.colorado.gov/assets/html/housing.html
      https://data.census.gov/table/ACSST1Y2023.S2504?g=160XX00US0807850&moe=false

      Your second question about permanently affordable housing construction isn’t systematically collected as far as I know. But it would be worth checking in with something like BHP’s Board of Commissioners: https://boulderhousing.org/about/board-of-commissioners/

      1. There must be other sources for the information on the number of permanently affordable housing units built in Boulder each year without going to BHP for the answer. After all, the city has a goal of 15% of the housing stock to be affordable by 2035, and that will require significantly more new building (since affordable housing is no longer going to be magically “naturally occurring” in Boulder from here on out). So who is tracking that data? BHP is developing somewhere around 90% of all new affordable housing in the city, and they also own and operate that housing as well. Some separate independent organization needs to track and report this data! The city would also know.

      2. Brian, Thanks for the reply and link. I took a look and see that it will take some time to download and parse the data available from State Demography. To be honest, I was expecting that the City of Boulder would have this info readily available, since they are the arbiters of affordable housing. As I said, I appreciate data, but at least as salient to this discussion is how city residents, voters and taxpayers feel about the direction Boulder is taking in terms of development and transportation under our current government, and relative to past policies on growth. I do not accept that it is morally or economically imperative that Boulder continues its current rate of growth nor do I believe it will benefit current and future residents to do so. I just returned from a trip to England, where one finds many small to medium size towns, with extremely good train access when one needs to venture out from the village where they live. Frankly, I find this to be a higher quality of life than high density cities where the infrastructure–including and especially roads–are overloaded and poorly maintained. In response to Ethan Decker’s comment: yes, I arrived here in the 70’s (1971) so I have a perspective of 54 years of change. Boulder is a unique physical space of particular beauty and I feel that the actions taken by city leaders in the past–the greenbelt, open space, blue line, height restrictions, etc.–were visionary and in keeping with the preservation of this space. And, in a broader sense, I think that the increase in University enrollment and attendant growth of industry and population in the city, would have been better directed at another place in the state that could use the economic stimulus. I believe that the “affordable housing” objectives, and use of the word “progressive,” are mostly a smoke screen for more selfish motives, for the most part. And, while I haven’t the data, I think it’s likely that little progress towards housing that is suitable for our public sector and service workers has actually been made.

        1. Interesting observations and opinions. England is probably not a great comparison for Boulder since it’s a very old, very tiny country. The culture of England is unique as are cultures of every county. But, sure, wouldn’t we all enjoy a “small town” atmosphere with really good light rail transportation so we weren’t trapped here in Boulder, or we didn’t have to take an uncomfortable rattletrap of a bus to the big city or rely on the dreaded cars to get us out of here. But I agree, we are not taking a smart, innovative approach to housing – and we do need a lot more actually affordable housing just for existing residents. But the newly built “affordable” housing of today is really only affordable to middle income residents unless renters have a housing voucher – which will be unavailable for the foreseeable future.

      3. Patricia & Brian: You can find the year-by-year data for new housing in Boulder at the city’s Affordable Housing Data Dashboard here: https://bouldercolorado.gov/boulder-measures/affordable-housing-boulder
        There you will see how many units of housing were completed, which of those were deed-restricted permanently affordable for low-income families, and which ones were rental vs. available for ownership.

        With respect to Patricia’s question of definition of permanently-affordable, many use the federal definition based on Area Median Income. Under that definition, a home is affordable to a low-income family if the cost of housing (rent or mortgage) is no greater than 30% of the gross earning of a family making 60% of the Area Median Income. In Boulder County, the current AMI for a family of four is about $150,000 per year.

        Finally, in response to Patricia’s inquiry about vacancy rates for multi-family apartment buildings, a good source might be the Boulder Area Rental Housing Association (https://www.barhaonline.org). CBRE reported a multi-family vacancy rate in the first quarter of 2025 of 4.8% (https://www.cbre.com/insights/figures/q1-2025-us-multifamily-figures).
        – Bob Yates

        1. Thank you, Bob, for this link to City data! Using that and the “Municipal Population and Housing Timeseries, 2010 to Current Year” on the state’s DOLA site that Brian referenced, I did some quick and dirty analysis (including all housing types, i.e., units in multi-family buildings and single-family homes) and, if my calculations are correct, the numbers show the following. In brief, from 2010 to 2023, the City of Boulder added a total of 4350 housing units, according to the DOLA site. The City website indicates for that time period, 3969 of those units were “affordable” (which, it is important to note, encompasses several income levels up to and including “moderate” and “middle” income households). The percentage of “permanently affordable” units in Boulder was around 8% in 2023 and, according to the City website, 8.7% in 2024. The DOLA vacancy data shows in that time period, the number of vacant units rose from 2132 in 2010 to 3822 in 2023, or about a 2% increase to approx. 7% in 2023. Data alone doesn’t drive decisions but this info begs the questions for me: 1) with a rising vacancy rate, shouldn’t we pause to consider if we need more housing, and 2) if so, what sort of housing would meet the actual needs in the community? And 3) aren’t infrastructure stresses and quality of life issues relevant to this discussion also?

  5. Nice work, Brian. I appreciate your efforts to bring data to these questions. And it’s pretty good data, too (which is, as you know, a big issue too).

    Is boulder full? IMO, the TL;DR is NO. I mean, certainly not by any metric of land use or urban density. I did a quick population density comparison for your set of college towns. I’ll email you the chart, but the summary is Boulder (4,383 people/square mile) is 15% above the median density for those towns (3,810) and ranks 11th of 25. We’re just above Ann Arbor & Eugene & just below Tempe & Santa Barbara.

    Of course, how this FEELS totally depends on tons of things: where the city limits are drawn, how much open space there is, how tall the buildings are, how much is rent, etc etc.

    I think the people who FEEL that Boulder is full are those who, yes, were here in the ’70s. And since then, the town population has indeed almost doubled, and the county population has indeed almost tripled. So yeah, that’s a lot of growth. And as you mentioned, many are transplants themselves who now want to shut the door behind them.

    1. Thank you, Ethan! And 🏆 for helping raise the standard for arguments in our community!

  6. Yes, how it feels is a big deal. It’s the increasing congestion on the roads that is most telling. If we had light rail it would make sense to build more density around transportation, but to build it around bus stops that almost no one uses makes little sense. It will just exacerbate the problems of more vehicle congestion on roads not designed for increased traffic, and make urban destinations less accessible for everyone which has a cascading effect of residents avoiding these business districts. Unless you are on a direct bus route from your home to your destination, bus travel is a time-consuming and frustrating experience for the most part. CU students can rent rooms in the central districts on direct routes to school, but most of us have more complex situations.

    1. I am also super-interested in this question of traffic and congestion over time! Let’s come back to it 📆

  7. I belong to the TL;DR cohort of readers. I LOVED this article and longed for a summary of each section. I want summaries and then I want data.

    My summary: TL;DR:
    Boulder isn’t “full.” It has stopped growing for complex, often intentional reasons.

    CU Boulder matters, but it’s not the main culprit.

    Jobs-housing imbalance exists, but it’s not the crisis some claim.

    Boulder’s growth pattern is unusual among college towns — and shaped by past choices.

    We need more public interest data work and stronger civic discourse built on shared evidence.

  8. Kudos to Brian for using open data, etc. But his jobs/housing analysis misses that what makes Boulder the most expensive housing market between the coasts except a few resort towns is the CUMULATIVE effect of new jobs outnumbering new housing units by almost 2 to 1 during the ENTIRE time series of the graph (and likely for much longer), not the modest upward trend of the graph! (What matters is the integral of the curve, not the derivative.)

  9. Fascinating writeup and way of thinking about it, thank you.

    One potential additional line of inquiry might be to look at the surface area of each of these towns relative to the county size they’re in (or just in general).
    And, this gets very into the weeds, but adjusting for buildable contiguous land.
    Madison comes to mind as being even more geography-constrained than Boulder, but they clearly have had a different trajectory.

    All of this reminds me of the classic Washington Post article showing CO2 transportation emissions scaling with city footprint more than population (Atlanta and Barcelona have some stark differences). A paper adjusting for the impact of transportation emissions created by a jobs-housing imbalance also comes to mind:
    https://boulderbeat.news/2021/06/04/boulder-commuting-emissions/

  10. I commend Mr. Keegan for wanting to raise the bar for discussing policy issues. His desire to rely on publicly available data rather than perception is refreshing. In his quest, though, the data should be as much “apples to apples” comparisons as possible. The perception that Boulder is “full” has a lot to support it that wasn’t included in the data Mr. Keegan analyzed. By way of example, which of the cities reviewed has the same acreage as Boulder? Which cities are landlocked ? Which cities were able to accommodate population growth by growing its boundaries? Which cities draw 40k to 60k daily visitors (50% of Boulder’s population each day)? Which cities have a similar density (people per acre)? Which cities have chosen to not increase its infrastructure (e.g. roadways; recreation facilities), while at the same time reducing access/lanes and hours creating more crowded conditions? Which cities have seen a decline in entertainment venues, retail establishments, and restaurants which means the remaining ones have to accommodate more people? These are just some of the factors affecting our perception that Boulder is full, but since such variables are difficult to measure or don’t relate to funding and tax issues, they aren’t considered.

    Maybe Mr. Keegan can find some of this data and let us know how Boulder compares.

    Keep up the good work at BRL.

    1. Your point about incoming visitors is well-taken. The feeling that Boulder is an “attraction” for daytrippers is overwhelming on the weekends downtown. (And, don’t tell me these folks are riding their bikes here…) With Sundance coming to town, along with the huge new hotels to attract more tourists year-round, our Disneyland environment will only increase. Am I “nostalgic” for the days when Boulder preserved quality of life for people who live here–you bet! It feels to me like we are in the second wave of massive irreversible changes to our town, i.e., while there has been much gradual change, the last few years have tipped the scales in noticeable ways as to traffic, tourism, lack of municipal maintenance, construction of thousands of small residential units in large buildings, loss of small local businesses downtown, etc. And, this week’s elimination of minimum parking standards for new residential construction will surely solve the problem of too many people driving cars, right? Well, at least it sounds like we may actually get some of the light rail we voted for years ago!

Leave a comment
Boulder Reporting Lab comments policy
All comments require an editor's review. BRL reserves the right to delete or turn off comments at any time. Please read our comments policy before commenting.

Your email address will not be published. Required fields are marked *