Electoral Maps

Early on in 2017 I had two conversations that set me on the path of learning about maps. One was with Mike Gaughan, who suggested that it might be possible to identify neighborhoods in Kansas with larger-than-normal numbers of unregistered voters. The other was with Paul Davis, who suggested that it might be possible to identify Kansas state legislature districts that could be flipped with targeted outreach to just a few neighborhoods.

I knew that one of the big issues affecting election outcomes was how the maps get drawn for political districts: state legislative districts, congressional districts, etc. But how did those political district boundaries correspond to the votes that are cast? No one seemed to have a map that could show me, for any given district, how the votes in that district for a given election correspond to streets and addresses. Or how did a particular neighborhood vote from one election to the next. State elections can often be decided by dozens of votes, so knowing how a particular neighborhood votes (or fails to vote), from year to year, could be a significant datum to understand.

I realized that it was hard to take a research and data-driven approach to a geographic problem without good geographic data. And none of the Democrats I spoke with seemed to have that data. So I decided I was going to create a map-oriented research tool for elections over time.

The Map Is Not The Territory

One fact in particular made the map data hard to acquire and use. Election results are reported to the Kansas Secretary of State at the county level. Each county clerk tallies up the votes (a process called certifying an election) and sends those numbers to the SoS office. Kansas has 105 counties. If you look at a map of Kansas counties, one thing you will quickly realize is that they are all mostly the same size and shape. That’s because the county boundaries were drawn very early in the state’s history without regard to where people lived and without knowing where they would settle a century later. County boundaries ignore population and they do not change over time.

Political district boundaries, however, are entirely about population and they change over time based on relative movements in the population. The idea around equal representation is that each district has roughly the same number of people, not the same number of acres. This is what gives political map drawing its power, because the political district boundaries could be drawn in carefully constructed ways to maximize a particular kind of voter in a given district.

So elections are reported by counties. Counties are about land size and don’t change. Districts are about population and change frequently. To borrow a math metaphor, what is the least common denominator?

The Precinct

The precinct is a geographic boundary that aligns with a political boundary. Every county is made up of one (often dozens) or more precincts. Every ten years the county clerk’s office divides the county into territorial entities in order for the federal government to count all the people in the census. Those territorial entities are called census tracts. Everyone gets counted in exactly one (we hope). Each census tract is also a voting district, or precinct. (It gets more complicated in the ten years between census takings. Read on for more.)

Most significantly, political district boundaries align with precinct boundaries. In your precinct, you belong in exactly one state house district, one state senate district, one congressional district. A political district is, in other words, the sum of its precincts. (Precincts are also vital to how political parties work, which will be the subject of another post.)

So if I wanted a map that would show, over time, how Kansans in specific neighborhoods vote, or if there were neighborhoods with a predictably low voter registration or turnout record, I would need reliable precinct-level election data, voter registration data, and I would need precinct-level map coordinates in the form of shapefiles.

Seemed straightforward enough at the time, I thought. I just need to look around on the internet and between the SoS website and the census.gov website, I’m sure I’ll find everything I need.

Oh foolish, silly, naive man. I look back on you now and chuckle at your enthusiasm. Of course, if I had known how hard it was to acquire those data and make sense of them over time, I might not have started in the first place. Deceptively simple problems get a lot of yaks shaved.

Fortunately, I quickly stumbled upon other people who were thinking the same things about maps and precincts, and other people who had been working hard at the precinct election data problem for a long time. I was able to follow in their footsteps.

In my next post I’ll dive into the nitty gritty of the challenges I encountered building the map.

Talking to Democrats

I am not particularly attached to the Democratic Party. Until 2017 I wasn’t registered as a Democrat. (And I only registered as one because the KDP, reasonably, wouldn’t let me help with their data otherwise.) My personal politics are more green/socialist. I just saw the Democratic party as the group best positioned to swing state races in 2018 and defeat 45 in 2020.

So in 2017 I reached out to my state and county parties and started cold-calling people. Would they meet me for coffee and talk about politics and technology? Yes they would!

I asked everyone three questions:

  • could technology have changed the outcome of the 2016 election?
  • if yes, what could someone like me do to help for 2018 and 2020?
  • who else should I talk to?

I’m very grateful for everyone who explained how precincts work, how county and state parties work, how the voter file works, how campaigns work, how campaign technology works (and doesn’t work). I spent several months meeting all sorts of Democrats, in Kansas and elsewhere (thanks to the wonders of the internet) and listening to their answers to my three questions. It turns out I knew very little about how elections work. Everything else I have been doing since then stems from something I discovered while talking to the Democrats that year who were so generous with their time and knowledge.

Follow a Bill

After the election, reading was how I spent my free time in November and December of 2016. That, and talking to my brilliant partner about all I was learning about political machinery. As it happens, she is a professor who teaches social policy and takes her students on field trips to the state capital in Topeka. She suggested that if the state legislature was so important, I should learn how it actually works: find a bill and follow it through the legislative process.

So I went to the Kansas legislature website and tried to figure out how to follow a bill. I found I could search bill text and find bills if I knew their number, but I could not find a feature that would send me email whenever the status of the bill changed: when it was going to be discussed in committee, or voted on, etc. I knew from using the federal congress.gov site that it was possible to get alerts on federal legislation emailed to me if I created an account. The same kind of follow-the-bill alerts feature did not seem to exist for the Kansas legislature.

I figured that someone must have solved this problem already. The closest I found was openstates.org which did not have the alerts feature but did have an API that I could use. After touching base with the OpenStates developers to see if the alerts feature was planned (it was but without a timeline), I decided to see how quickly I could prototype the legislative alerts feature myself. A classic yak shaving exercise. I had three design goals:

  • The minimally viable product should take no more than a single weekend;
  • Send alert emails for a single bill or a saved search (like a Google alert);
  • Store the minimum amount of user account information possible.

Since I had been doing a lot of Ruby on Rails development for my day job, I decided to use that tool to meet goal number one. Goal number three was made possible thanks to the wonders of OAuth: I could let users log in using an existing account (Google, Twitter, GitHub, but not Facebook since I did not (yet) have a Facebook account). Goal number two proved to be the trickiest but that was where all the fun was. I found an existing Ruby client for the OpenStates API and after some experimentation, hit on a data model that did most of what I wanted. The end result seemed good enough to me that I decided to go ahead and register a domain name and set up a GitHub organization and a Twitter account. I figured I would use it, at least, and since it could search all US states, maybe others would find it useful.

What I did not know yet was what bill I should follow. This is what yak shaving can lead to: lots of energy spent working on the thing you think you need in order to do the thing you want to do, and then sort of forgetting about the thing that got you shaving that yak to begin with. (I did eventually find a bill to follow: my own.)

Each year since then I have updated the site to reflect changes to the OpenStates API and to make small improvements. But basically the site is as it was three years ago. It does one thing and it tries to do it well. I’m told that the OpenStates.org site itself will soon offer the same kind of functionality. When it does I’ll be glad to shut down legalerts.us and treat it as a learning exercise that helped me experience how a bill becomes a law.

How I Spent My Fall Vacation

In 2016 I could not have imagined I would come to know my way around the Kansas Statehouse, and yet two years later I was the one guiding my fellow members of the new governor’s transition team through the entry with the metal detectors and into the limestone catacombs. It’s funny how you find yourself places.

I am starting an accounting of what I was up to between Election Day 2016 and Inauguration Day 2019, and what I have learned the last few years as an accidental activist, things that went well and things that did not. A retrospective of one.

Election Day 2016

It would be too simple to say that the results of the 2016 American presidential election pushed me into politics. There were really a lot of factors that got me off the couch. But certainly I was angry and unmoored on Wednesday, November 9. Not because my candidate lost. My candidate wasn’t on the ballot. I gritted my teeth and voted Democratic on Tuesday, like a lot of people. I felt a lot like I did after the 2004 election. I was not enthusiastic about the Democratic candidate, but the Republican candidate was so obviously a poor choice that I just could not understand why so many of my fellow Americans voted for them. In this case, my primary fear was about the critical issue of the climate. We only get one planet, and science shows that the human species is pretty well screwing it up for ourselves and all the other species. The GOP candidate was going to ignore and belittle the science at a critical moment in history when decisive political action is needed by the world’s biggest economy and carbon producer. That was just unconscionable and unacceptable to me.

The Morning After

The first thing I did after Election Day was read a lot of the morning-after analysis and second-guessing. As an engineer, I was most interested in understanding the tactical and logistical reasons the election had ended the way it had, and what could be done to change the outcome next time. Setting aside the whole mess of presidential candidate narratives, and what campaigns and foreign governments did or failed to do, I took away a few things.

  • The maps are skewed. Republicans had systematically targeted state legislatures around the country, won control of many of them, and used the power of district boundary drawing after the 2010 census to gerrymander their way to control of the US House. It was really ingenious. Hats off to them for the strategy and the execution.
  • The state legislature is where the action is. Having wrestled away power at the state level, the Republican party was able to set the policy agenda and define the terms of political debate. Taxes, schools, roads, budgets, redistricting. This was very evident in Kansas where I live. Since the moment we moved here in 2013, my daily newspaper was filled with budget crises, Supreme Court suits over school funding, concealed carry gun rights expansion. All because the legislature and the governor’s office were controlled by conservative Republicans determined to starve the state government till it was small enough to drown in the bathtub.
  • The Democratic party, during the glamour years of the Obama administration, failed to invest in state and local parties, in campaign infrastructure, and in building a bench of local elected officials who could compete in federal races. School boards, county commissions, water boards, city councils: these local elected offices are where people learn the mechanics of campaigning and governing. Any professional sports fan knows most players don’t jump from high school to the pros. The senior teams develop and groom a pipeline of qualified players who can compete, and the best get promoted. The Democratic party had failed to do that.

I learned all that by reading: the New Yorker, the New York Times, the Atlantic, the Washington Post, the great raft of internet pundits, my local public library. We had recently acquired a new chair at my house, and I settled into what became known as my “nest” by our unlit fireplace, books and magazines stacked on the brick hearth.

I spent an unhealthy amount of time on Twitter. I created my first Facebook account so I could start to understand how people could be so affected by that product. I joined every email list for every nascent group committed to resisting the new administration. (I have since unsubscribed from nearly all of them.) And I got ready to get to work.

This is the first in a series of posts. The title of this one comes from one of my favorite songs. I didn’t want to be “just sitting at home, growing tenser with the times.”

I’m Just a Bill, Until I’m More

When Representative Miller introduced me to Governor Colyer at the bill signing ceremony, he made note of the fact that it was unusual for an ordinary citizen to initiate a bill, testify at a committee and see the bill signed into law. The Governor gave me a signing pen and shook my hand.

I think it’s regrettable that more ordinary folks do not get involved in the legislative process, but I certainly had no idea why I would want to or how to go about it, until I did. This is the story of what happened and what I learned.

Election Results Data

In the autumn of 2017, when I was struggling to find good data to make my election results map, I realized that the Kansas Secretary of State’s office had stopped publishing precinct level results on its website after 2012. When I called (multiple times), emailed and finally tweeted at the Secretary’s office to release the data, I received a combination of Excel files and PDFs, for some but not all races. When I suggested via email that it might be easier in the future if the office simply published those files on its website as it used to, I was met with silence.

I talked with several people that autumn about the issue, including a county clerk (the elected official who administers elections in Kansas), and a state representative (not my own but a friend of a friend). Everyone said it was a legitimate thing to require the SoS office to publish those results.

So in January of 2018, just after the start of the legislative session, I emailed my state House representative, Boog Highberger, and pitched him the idea. He responded immediately, and we chatted on the phone. He reached out to Vic Miller, the ranking Democrat on the House Elections committee and pitched the idea to him. Miller said he would bring it to the committee chair and try and get it on the agenda at the next meeting.

Here’s where things went quiet from my perspective. A couple of weeks passed. I’d never done this before, so I didn’t know what to expect. I knew that a bill might be drafted, and a committee would discuss and vote on it, and then (hopefully) the whole House would vote on it. I also knew the same process needed to happen on the Senate side. I mean, I watched School House Rock as a kid. I had a general understanding of how this worked.

I had one big fear about turning this idea over to the legislative process, and that was that if the language of any resulting law wasn’t specific enough about how the results were published, then the SoS office could create a bunch of PDF files (maybe even from scans of printed paper) and post those to its website, and thus satisfy the legal requirement without actually being very useful at all to anyone who wanted to handle the raw data electronically. I had seen what the SoS office had sent me already, and I knew that PDFs were a real threat. I also knew they could produce Excel spreadsheets since that had been done in the past. I had specifically mentioned “machine-readable documents” in my proposal, but as anyone who has tried to pull meaningful data out of a PDF knows, just because a document is electronic does not mean it is machine-readable.

So I checked the Elections committee web page every day to find out what was happening. Nothing appeared on the agenda. I could check minutes of each meeting, but those minutes aren’t published until a couple of weeks after each meeting. I wanted some input into the language in the bill, to appease my fear of the PDF Issue. I knew my modest little idea could easily fall through the cracks, since there were a lot more high-stakes election issues being argued over in the legislature, like voter id, proof of citizenship, Crosscheck, campaign finance, etc. I also knew that legislators were very busy people. How was I going to find out if/when my idea became a bill and when it would be discussed in committee? Could I have input into the language? And would it all happen before the end of the five-month-long session?

I admit I struggled to understand the process from the outside. I read the committee web page but I didn’t really know what I was looking for. The committee agenda seemed to appear just before the meeting on the site so it felt like little advanced warning. The site has recorded audio files of each meeting, but I wanted to have input before the meeting where the idea was discussed.


Thankfully, I had a few things going for me.

I had the Legislative Alerts website. I set up a daily alert for “elections AND state:KS” and then tried to be patient. Then one morning in late January I got an alert mentioning a precinct results bill and I knew progress had been made.

I had a partner who knew this process, and our dear friend Annie McKay, who is a registered lobbyist in Topeka. They both patiently explained what I needed to do:

  • Identify others on the Elections committee that might be in favor of the idea.
  • Had I contacted my Senator and started the process on the Senate side? I had not.
  • Write to the legislative assistant for the Elections committee and ask for guidance on how to provide testimony at the committee hearing.

Most importantly, I had the privileges of time and money to do all this research, writing and communication.

So I stayed busy. I wrote to Senator Miller with specific suggestions on changes to the bill language. I had recently heard Representative Brett Parker announce a couple of bills expanding voting rights and saw that he was on the committee. I wrote to him, introduced myself and included the same list of suggestions on the bill text.

I wrote to my Senator, Marci Francisco, pitching the same idea, explaining about the House bill, and asking about the process on the Senate side. She very graciously explained to me that it was too late to introduce new legislation to Senate committees, but that hope was not lost. The “turnaround deadline” of the legislature was February 22, and if the bill passed in the House before then it would be sent to the Senate leadership for consideration.

Another week passed. Then Senator Miller emailed with a date for the committee hearing and asking if I wanted to provide testimony. Boy did I ever. Annie helpfully suggested I remove the snark from my first version. I wrote it up and sent it in, and published it for the world.

Annie also suggested I should present in person to the committee, especially if there were questions. This turned out to be a very good idea. She volunteered to walk me over to the statehouse in Topeka, where I had never been before, and make sure I got to the right place on time.

At the Capitol

I was early. I sat in the back. I was nervous to be sure, mostly that I would make some faux pas in such a public and official space. But I was very confident in what I had to say, because it was directly from two decades of lived experience with technology. That helped a lot.

Bryan Caskey, who is the Kansas Director of Elections in the SoS office, sat down next to me, which turned out to be quite lucky for me. He was the person who had given me the election results months earlier and I had never met him in person. He also testified at the committee hearing, at the request of the committee, since his office would be most directly affected by the bill.

Rep Parker had his phone out and, I found out later, was re-reading the email I had sent him weeks before. During discussion of the bill, he raised one of the issues I was going to make in my testimony, so I made a mental note to skip that part.

When called I got up and read from my prepared testimony, making mention of the fact that Rep Parker had already voiced one point. There were questions about the format of the election results. The Chair, Keith Esau, asked if Open Office format would be acceptable. How lovely to hear an elected official speak about an open source product!

One of the most important points came up during Mr. Caskey’s testimony, when he said that one reason that the SoS office stopped publishing results in 2014 was that the largest 4 counties had gotten new ballot machines that would only output PDF files and so that was the only format available to the SoS office. There was some discussion of whether it was possible that the machines could output some other format, and about the fact that new ballot machines were possibly going to be in play for the 2018 election because of the national attention being paid to election interference.

After the hearing was over, Representative Esau came over to where Mr. Caskey and I were sitting and the three of us had a very lively chat about the mechanics of elections.

The next day I wrote to Reps Esau and Mill and Mr Caskey:

I took to heart Bryan Caskey’s comments about the difficulty his office has getting machine-readable documents from some counties, and the potential resource burden that creates in converting those counties’ data to a spreadsheet. There’s a bigger technical issue at work there with the voting machine apparatus, and as Bryan noted in our conversation after the hearing yesterday, the process is undergoing rapid and as-yet-unknown changes this year.

I recognize that my request for an open data format is an ideal that most states do not yet live up to. I’m not interested in letting the perfect become the enemy of the good.

I still think getting timely publication of the best data the office has available serves Kansans’ interests in open and transparent elections. I’d rather see a mix of PDF and XLS files on the website within 30 days, than the current situation of zero published data. XLS files for 100 counties and PDFs for 5 counties is a decent trade-off, in my opinion.

Not publishing the data, even in its mixed formats, creates a resource drain on Bryan’s office for every KORA request that comes in. In the spirit of the FOIA “release to one, release to all” policy, let’s get them published preemptively and allow the public at large the chance to turn the data into whatever format is most helpful.

The committee schedule called for the bill to be voted on the next week, so I was pleased when it came up for a vote and passed out of the committee unanimously with my suggested amendments.

Then it was on to a full House vote the following week, where again it passed.


Then I had to wait for the bill to make its way to the Senate elections committee for a hearing on that side of the building. I reached out to the election committee administrator, asking to be added to her email list for agenda announcements. She also gave me instructions on submitting testimony to the Senate committee. I submitted written testimony in favor of the bill. It passed out of committee on the Senate side and then was assigned to the conference committee.

This is where things got dicey, because we were running out of time in the session. If it didn’t get a Senate vote, we’d have to start all over again next year. The conference committee is where bills get reconciled between House and Senate versions so that both sides of the building vote on identical language. Six weeks later my bill passed out of conference committee and then a full Senate vote. Along the way it got merged with a bunch of other election-related bills into a single conference committee report for a Senate vote, which is apparently a common practice, especially near the end of the session, because it can save the time and overhead of separate votes. I really appreciated Vicki Schmidt, then a Senator on the committee, who went out of her way to clarify with me in several email exchanges, that the bill had in fact been included, voted on, and passed.

So there I was, four months after I first proposed the idea, with a bill on the Governor’s desk ready to be signed into law. I again reached out to Rep Miller to ask about when it might be signed, and at the urging of my partner, to find out if I could attend. Rep Miller graciously set me up with details and passed on instructions for attending the following week.

In the Governor’s Office

This was my second trip to to the Statehouse but my first to the Governor’s office. There were two other bills being signed into law that day. Mine was last on the agenda. I chatted with both Rep Miller and Rep Esau, who were both gracious and happy I was there. I have to admit, it was pretty cool to be a part of government for-and-by-the-people in a ceremony like that.

The best part of the process? Now you can get precinct-level election data on the SoS site again! Even if it sometimes takes some nudging.

Things I Learned

  • Time is short. There’s only four weeks after the session starts to get new legislation introduced. The “turnaround” deadline is only seven weeks after the session starts. If you want to see things done, you must queue things up before the session starts and get out of the gate immediately.
  • Pick ideas that are easy to sell. Elected folks want to say yes, so find something they can say yes to.
  • Embrace what’s possible, then ask for a little more.
  • Make friends with the committee administrators. They are the church secretaries of the legislative process.
  • Policy is like anything else. There is always more to learn, more work to do, and it’s good to make friends while you do it.

Managing projects

An associate asked me for advice about being a project manager. This is an excerpt of my email response.

Things I find most helpful in managing projects:

* Learn how to run a meeting.

* Be organized. Really. Most of PM work is being the one in the room who is organized. Use a calendar, a ticketing system to manage tasks and who is doing them. Take notes. Be the one other people count on to be organized, because most people aren’t.

* Learn how to manage up. The busiest people are often the ones with the most power, who also happen to be the ones as a PM you need to corral when decisions need to get made.

* Learn to manage your own anxiety. The PM must read the room, herd the cats, finesse the decision-making. The PM cares about the schedule and the resources available. That can make you stressed. Figure out how to let that go, in whatever way works best for you. A kind of involved detachment works for me.

* Learn to recognize who holds the Truth. As the PM, it’s likely you.

Radio Heartland

Note to myself that the stream URL for iTunes for Radio Heartland is http://radioheartland.stream.publicradio.org/radioheartland.aac

Elasticsearch development

Over the last few years I have done a lot of development against Elasticsearch, especially using the Ruby libraries. The Elasticsearch::DSL is very powerful, but anything beyond a simple query can take hours of debugging to get the syntax just right. I always learn the hard way that it is better to handcraft the JSON first to get the logic correct, and then translate it to the Ruby DSL code.

I don’t do it often enough to remember, so after my latest struggle with ES, I thought it useful to document.

The curl command is:

curl -X POST localhost:9200/myindex/_search \
-H 'Content-Type: application/json' -s \
-d '@q-test.json' | json_xs  | jq .hits.total

where q-test.json is a file with the DSL JSON.

Layout tips

Was reviewing a brochure mockup today and was struck by some poor practices. Found these references to reinforce my memory about the best way to layout text for accessibility and readability.


Just finished my last day at 18F. Dropped off my #FedEmployeeInABox at UPS. Feeling all the feelings right now, but mostly gratitude for the opportunity to use my technical skills to benefit so many people.

I wrote this Medium essay about my experience.

(Edit 2020-01-24: added a copy of the Medium article here for posterity)

Leaving 18F

Two years ago, when I accepted the opportunity to serve my country within the US government as part of 18F, the digital consultancy within the General Services Administration, I had some unspoken expectations. Now that my two-year term is ending and I am leaving government, I have reflected on how my experience did and did not meet those expectations, and some new expectations about what I’m going to do next.

I expected career government employees to resent and resist the technical hero narrative.

And they would be right to do so.

All the press I read about 18F and the U.S. Digital Service and the Presidential Innovation Fellows before I started suggested that everyone was a Silicon Valley Mensa member with a big-name tech company pedigree, and that all these experts (who seemed overwhelmingly younger than me) were swooping in to government to fix things and rescue the befuddled civil servants from the dragons of Byzantine regulation and bureaucracy and bad technology.

Those stories are false. They perpetuate a larger false narrative that the government is a monolithic, faceless force, bent on making people miserable, made up of “them” and that all the rest of “us” are powerless to affect it. That story is just wrong. The government is us. Its effectiveness and illumination, darkness and implacability, are our own. Our Constitution says it clearly: “We the people” — not us the people and them the government. I’ve not ever felt that quite so clearly as while working within the government.

The truth is that most 18Fers are not from Silicon Valley and do not come from big-name tech companies. Our team lives all over the country, and our distributed-first ethos allows us to span many geographies, including my own, here in Kansas. Sure, we have some experience doing technology at a faster pace and with a newer toolset than government is used to. But most of us had very little experience with how government operating authorities, regulations and procurements work. 18F is not made of up of experts in government. So there’s learning and negotiating in both directions.

Whenever 18F has been effective as civil servants with technical skills, it has been due to active and engaged partnerships with folks already in government, who were already working hard at reforming technical attitudes and processes long before 18F existed. We are not heroes or saviors. We are partners, in a long process of reimagining how technology can help improve people’s experience of digital government services.

I expected my spirit to be slowly ground into dust under the harsh stone wheel of government bureaucracy.

Based on my previous experiences doing technology within large, bureaucratic organizations, I expected to barely manage the two years of my term before I ran screaming from rules and procedures that made little sense to my personal mental model of the Way Things Should Be. Imagine my welcome relief at finding that my 18F colleagues shared my feelings and had already done so much work to make onboarding and getting questions answered downright pleasant.

I won’t lie. There are things about government that make me want to pull out what’s left of my hair. But most of them are the same things that any large organization suffers from: processes to mitigate risk (and blame), rules and traditions whose original motivations are now opaque if not completely lost, and the kind of small-p political squabbles that constitute fairly normal human interactions. (There are large-P Politics too, which I’ll get to later.)

I am grateful for my fellow travellers in government, and to the Slack channel #scream where catharsis was always a keyboard smash away. The quality of good humor is not strained.

I expected my fellow 18Fers to be really smart.

I was not disappointed. Everyone is really smart.

Better, everyone is really fun. I’ve had so many delightful conversations with folks while waiting for meetings to start. Our Slack channels are emoji-filled rivers of humanity and brilliance and sympathy and insight and puns and fascination.

Better yet, there is a culture of empathy and learning and humility and humor that is a joy in which to participate. I have been personally stretched and challenged by the hard work of the diversity guild, the “hey guys” Slackbot response, and the community of engineering peers who take documentation, testing and code reviews as seriously as any code, and I am a better person for it all.

Best of all, the lack of ego makes the air feel lighter, like hiking above the smog. Folks take the work very seriously, far more seriously than they take themselves. I was inspired, every day.

If you know me, you know I’ve loved The West Wing since it debuted nearly two decades ago. My favorite character is Charlie Young, who in this scene joins the president’s staff. I’ve thought of this scene often during the last couple years because of the final exchange between Charlie and Josh Lyman.


I expected to do the minimal two-year term of service and no more.

It is possible to work for 18F for more than two years. Many of my peers serve a second two-year term, working the maximum of four years. I knew of that possibility when I started, yet based on what I knew about my own capacity for working within bureaucracy, I expected to be quite ready to leave after two years.

So I was surprised, in the fall of 2016, a year into my term, that I could imagine serving another term. I was working on a very interesting project (login.gov) and feeling hopeful about the work we were accomplishing.

Then the election happened.

We don’t talk about candidates or political parties at work. An essential part of the culture and ethics of the civil service is the non-partisan nature of our work. Our oath is to the Constitution and we serve the people, not a party or an administration. Still, it’s not an exaggeration to say that every morning since Election Day has been a challenge to summon the will and focus necessary to do the work. It is demoralizing to work within a system headed by an administration that does not respect the system. I believe my colleagues feel this too, not just at 18F but throughout the civil service. The reason is obvious: the current administration does not respect the civil service and is actively working to dismantle it.

I am not registered with a political party. I believe in people organizing themselves to improve the welfare of our species and the planet we share. That’s the tl;dr of the preamble of the US Constitution.

So that’s what I’m going to keep doing: helping to organize to improve the welfare of our species and the planet we share. For now, I’m going to do that outside of government.

I expect to be sad for awhile.

A few weeks ago someone asked me what I look for in an ideal co-worker. Without hesitation, I said someone just like the people I work with at 18F. I spoke quite passionately about all the virtues of the people I have worked with for the last two years. Some of those words probably made it into this essay.

That person responded, wow, you must be sad to leave. I had not, until that moment, realized the depth of my emotional attachment to my colleagues and to the work and to the institutions which we serve. I will indeed be sad for some time about my decision to leave, and I apologize to all my future employers and co-workers right now, because 18F has set a high-water mark for me in terms of what I expect from a workplace.

In a few days I will no longer be an 18Fer. I’ll be an 18FXer, an alum. It is one of the proudest professional badges I will ever wear.

I expect to focus more on the process of building things, and less on the things.

The real product of 18F is not software or websites or improved procurement policies. The real product is the process by which we make those things: focused on the people who use the things we help build, in open, agile collaboration with the partner agencies we serve. The product is the process. The artifacts we produce are the means, not the ends. We don’t have an enthusiastic commitment to open source because it necessarily produces superior code (though it often does). We do open development because the process of working in the open is a good exercise for government. Like voting, it reminds us that the work belongs to all of us.

It took me a year to realize all that about the 18F product. Once I did, it became far easier to trust that we were delivering it, every day. Of course, producing great websites is a requirement for this process-as-product. If we failed to deliver great websites, it would be hard to trust that the process really has the quality we claim it does.

My own epiphany during these last two years has been that it takes deliberate, conscious action on the part of individual team members to perpetuate the culture of open process. Openness doesn’t just happen by itself. Someone needs to remember the disciplines: daily standups, retrospectives, sprint planning, documentation, agile methodologies, adherence to team practices, working in public. Like democracy itself, open process requires daily practice, permission to fail and be messy, reflect and try again.

I expect to experiment more, in direct conversation with the people who use the things I build.

Before I started at 18F, I knew intellectually the value of user-centered design and user experience research and iterative development. Now I know it in my bones. I’ve never worked at a place where design and user experience professionals numbered as many as software developers. It has changed forever my appreciation of the varieties of human experiences, of suspending as best I can my assumptions about how things are supposed to work, of trying things out to validate hypotheses, of changing my mind and trying something else. Learning as I go, listening to others’ experiences of the things I build, and trusting that their experiences are not a value judgement of me, but that instead we are working together to build a thing that benefits us all.

These obviously aren’t new ideas, or even new to me. What 18F did was give me an opportunity to practice those ideas as a technologist every day by treating them as core virtues, not nice-to-haves.

I expect to be politically involved.

Political engagement is a continuum, from alive and breathing on one end, to running for office and active leadership on the other. I have never been particularly politically active. In my cynical 20s I voted only in presidential elections, reluctantly, and even then doubted the effects. Back then I believed that my vote did not matter, and that organizing to affect political change was not very effective. What I’ve come to believe is that my individual vote doesn’t change the election. My vote changes me. It moves me along the continuum, and turns me into someone who cares about the outcome because I have invested myself in the process. It connects me to “we the people.” With all the obstacles to voting that exist in this country, it’s an experience being denied to large groups of people. That’s not right, and it’s not good for our democracy.

One thing I have learned from my time in government is that the long, slow, difficult repentance from cynicism looks a lot like showing up, doing the work that needs to be done, and trusting that it matters.

So what I’m doing next is going to be a lot of listening to people who have been politically active for a long time, trying to learn from them, and using my technical skills to improve the systems that power the democratic process at the local and state level. Make it easier for people to register and vote. Make it easier for people to run for office. And make it easier for the candidates who reflect my values to win those elections.

If the 2016 election had turned out differently, would I be leaving government now? Probably not. I’d probably be content to do another term. Am I leaving because I don’t want the efforts of my labor to reflect well on the current administration? Partly, but that’s a pretty minor reason for me. The American people benefit from improved services far more than any administration does, and I respect my colleagues who are staying and continuing the work. Mostly I’m leaving because, while the unjust parts of the American story sometimes threaten the whole, I still love this place more than ever. I respect the history and integrity of the office of the president and what it stands for, and I don’t ever want to feel again like I’ve felt for the last six months.

Because here’s the thing: our current president disgraces the office and undermines the trust necessary for democracy to work. And by its daily silence and denial, the party that claimed and elected him disgraces itself and the democratic institutions of our country. I believe how we fix that starts with our local school boards, and our city councils, and our county commissions, and our state legislatures. It starts with deepening the bench of folks, inclusive of all genders, ethnicities, colors and classes, who feel empowered to run for higher office. So that’s where I’m headed next.

If you have specific ideas about how to do any of those things, I’d love to hear from you.