Tech on a Presidential Campaign: from Google to Warren for President
“Big, structural change” — Elizabeth Warren’s slogan. One day I worked at Google building the frontend on the Firebase Console and the next I had an offer to join Elizabeth Warren’s presidential campaign. I echoed her battle cry and gave notice on my apartment, packed up all my stuff, and moved from San Francisco to Boston on a Saturday (10 days later). The gist: make big change and do it as fast as you can!
The hours were extremely long, but we thrived on the belief that we were changing the world. I literally “ran on Dunkin.” There was no time for the gym or catch-up-calls with friends, let alone touring my new city. My rare “free” weekends were spent knocking doors in New Hampshire or calling people in Iowa. The New York Times toured our office one day and Representative Ayanna Pressley stopped by to talk with us the next.
Why did I leave my job for politics? What does tech look like on a Presidential Campaign? I’d like to share my experience — in the hopes that others will relate or find it interesting. These are my own thoughts and feelings, and they do not reflect the campaign as a whole.
Super Tuesday, 2016 to Super Tuesday, 2020
In 2016, I was working at a startup in NYC that had recently been acquired by Google. Honestly, the primaries weren’t top of mind. I donated, bought a Hillary hat, and made a few phone calls, but did not do much more than that.
After I moved to San Francisco, I was fortunate enough to live with and meet some amazing and politically active friends. They taught me about the fight to get DACA signed into law. They taught me the history of public transit in San Francisco and other cities. They taught me about local politics and how showing up is an important tool. In the 2018 election, I volunteered with Sister Districts to make calls and raise money for purple districts in state elections–a key piece of the gerrymandering puzzle (Sister Districts helped to elect women, people of color and LGTBQ people). Through Indivisible, I made calls for TJ Cox in CA-21.
Over time I started going to protests, sometimes leaving the Google office on a lunch break to go protest on Market Street(with my protest signs hidden under my desk afterwards). I spent my free time paying more attention to local politics–I was starting to knock doors, make calls, and go to community meetings for local elections. San Francisco is a wild city, but it felt good to be taking small steps to make it better.
As 2020 approached, the presidential election was taking up more of mental energy. It felt like I needed to do more with my skillset — Silicon Valley is all about changing the world and, to me, the most equitable way to change the world was to get into politics. I looked into working for local, state, and constituent groups, but I was all in for Elizabeth Warren. Presidential politics isn’t the only way to make a difference–state and local elections are crucial–but the presidential election was all I could think about.
It was late summer in 2019 and Elizabeth Warren was everywhere. She spoke to thousands at rallies and stood for hours on end talking to constituents and taking countless selfies with them. Elizabeth Warren is a powerful woman. Among her many attributes, I cared that she has always fought for the average American and that she truly listens to black women. She is smart, quick, and had similar morals as me. I jumped at the chance to work on her campaign.
I worked 135 fascinating and thrilling days on the campaign. On the campaign, I never had the feeling like what I was doing didn’t matter or wasn’t helping others (I would tell friends that I had a distinct lack of ennui). We would go from idea to implementation in a single day. It’s both extremely tiring and freeing to know that you are doing everything you can to make something happen.
Campaign tech is set up a bit differently from a tech company. We were led by a CTO and a Chief Technology Strategist, but we didn’t have a traditional management chain. Generally, we were split between Tech (website & tools) and Data. We had engineers, analysts, product managers, and project managers. I was a full-stack engineer on the Organizing Tech team — a team charged with building a suite of organizing tools. Below I’ll give an overview of the teams and what we did.
Data handled A LOT — creating voter contact lists, data analysis, database management, and so much more. They used Civis, a progressive tech database system that runs on top of Amazon’s Redshift. The Tech and Data teams worked together to route all data sources back to Civis — the source of truth. Civis has a built-in UI for querying large data sets, but, like any tool, Civis was not without problems — the UI is a little complex — searching for scripts/tables was difficult and it sometimes falsely identified tables as empty. Sometimes things slowed to a crawling speed, leading to many groans throughout our open-floor-plan-warehouse-office. Interestingly, on big nights (debates and elections) everything would slow as progressive campaigns all over were pulling intensive queries with us–Civis commands the progressive market. We started running into more speed issues, so we made the hard call to take our system offline for 12 hours (which was a hard sell on the long hours of the campaign). The data team upgraded our RedShift to a bigger cluster. Unfortunately, the speed improvements were minimal and it led to more disk space being used (Due to Redshifts minimum table size requirements).
It wouldn’t be an overview of campaign tech without a mention to NGP Van. NGP Van is an organizing tool that allows volunteers and organizers to reach out to voters. While the campaign used Civis as the one source of truth, all information had to also live in NGP Van to inform volunteers and state campaigns. The elaborate coordination of data refined voter contact lists, drove new ads, and informed new decisions hourly.
The Tech team was further divided into website and Organizing Technology. The website team was responsible for (obviously) the website and the store (get your Bailey merch people!). Organizing Technology built a suite of tools to reach voters. Since we were a grassroots campaign, reaching out to individual voters was extremely important.
The website was much more than a static website. Every time Elizabeth Warren said “I’ve got a plan for [x]”, you better believe there was a page for [x]. It even sported a ‘billionaire calculator’ to emphasize the reach of her proposed Wealth Tax. Looking to volunteer? There’s a page for that. Want to know more about Elizabeth Warren? There’s a stunning visual-storytelling page for that! Want to donate? There’s a page for that! And, even a donor wall page to find your name on. On those big nights that Elizabeth Warren ruled the debate stage, we’d have dashboards up watching traffic spikes and monitoring performance. The website was a tool for organizing, a tool for fundraising, and a tool for learning about Elizabeth Warren. A majority React app, content was managed by using Contentful, a way for many teams (including Policy) to constantly update content without unnecessarily redeploying the website. The website was locally run on Docker container and deployed via CloudFlare.
Since the Elizabeth Warren campaign was a grassroots campaign, we had to reach out to our supporters and ask them to help however they could. Our team built tools to contact voters — either through helping create more succinct email flows, creating tools to contact volunteers who wanted to get involved, or building an entire texting platform. We signed up 25,000+ people for events within a single month. Using our in-house texting product (Spoke), we texted 14 million people in two weeks. We onboarded over 5,000 volunteers onto different tools and platforms. And we helped get a million donors for the campaign!
Our team used a mix of python scripts, web apps, and django apps to do all of these amazing things. We put all of those services on serverless infrastructure (aurora serverless + lambda functions).
The main projects we worked on were:
- Switchboard (FE and BE): an in-house tool built to contact hot leads (people who had said they wanted to volunteer with the campaign) in your area
- Pollaris: a tool to locate your polling location (this information can be frustratingly hard to get right, as in people in the same building can have entirely different zip codes and polling locations)
- Spoke: an in-house texting tool (built off of an open source tool and in the span of a few weeks due to an intense cost pressure)
- Automated organizing email: automated event recruitment emails
- Back up Mailer: a way to send mail via Amazon SES in case our main mail systems went down (we were particularly careful about systems going down as so many campaigns use the same technology)
- Event Signup: We used a vendor for event signups (Mobilize America), but we kept a local copy of events and signups to control which events we showed to users and to make sure they were available if Mobilize America was down
- Caucus App: we wanted our volunteers and precinct captains to have an app to report findings back to us faster
Most of these projects have been open sourced. I recommend checking them out. When thinking about campaign tech, the key vectors we cared about were: cost efficient, well tested, and secure.
Cost Efficient: We built our systems to run cost efficiently. For instance we put our django app in a lambda function because you paid per use (a technique I wouldn’t recommend for a variety of reasons, but it saved the campaign money and worked for the traffic we were getting on that tool). Another example was one of our RDS clusters had a capacity of two for a long time (I also wouldn’t recommend this if you expect any spike in usage, as we learned the hard way after Elizabeth’s amazing Nevada debate performance causes such a strong spike in usage that some of our backend systems went down for a few minutes due to traffic spikes overwhelming the autoscaling)
Tested: In terms of testing and reporting, by Super Tuesday we had rather expansive tests and reporting systems for all of our tools. We had always had a good testing culture on the tooling we built (although some projects got more tests than others). When I joined the team, we didn’t have any reporting — if a system went down, we’d hope that someone told us. We quickly set up monitoring, terraform, and serverless.yamls for the larger projects we worked on, and we created a common library for error reporting (along with a slack channel for those alerts to live).
Secure: In terms of security, it was interesting to work somewhere that we knew would be a target for hacking — we expected it would happen eventually. Before I joined the campaign I got an email requesting that I basically clear out my social media (lock down my facebook, make my twitter private/delete old tweets, and don’t share publicly that I was working on the campaign). We had two-factor authentication set up on every service (personal and business — email, amazon, slack, etc) for everyone on the campaign. There were training sessions about in-person attacks like project veritas (like people following us into the building or reporters hanging out in the Dunkin Donuts across the street [that did actually happen]).
For the products I worked on, we spent time thinking about how it might be hacked and how we could mitigate the risk. We set up rate limiting on key endpoints, limited the number of users who could be invited, and spent a great deal of time thinking about attack vectors and how those tradeoffs affected usability.
By focusing on those key vectors (cost, testing and security), the team grew sustainable products that we could be proud of and rely on (even if the 3rd party vendor systems went down). Working on this team helped me rapidly grow my skills as an engineer coming from a big company. When I first joined, I hadn’t used Git or AWS professionally for years. On my first day, I jokingly said “so we just force push to master,” hoping that joke would lead to someone telling me what our git workflow was without admitting I didn’t remember any of my favorite commands. I quickly ramped up on those skills, on AWS infrastructure and on the political tech companies in the space. The campaign taught me how to work faster and leaner, adapt to ever-changing priorities, and to believe in and push for big structural change (even on the engineering side).
Honestly, the kind of energy one puts into working on a campaign isn’t sustainable. Being a life-long campaigner isn’t for the faint of heart. After almost throwing up from exhaustion on Iowa Caucus day, I had to learn how to find self-care in my ten hour work days (shoutout to our CTO, Nikki Sutton, who constantly reminded me that Elizabeth Warren would want me to take care of myself). I learned a lot about what things I need in place to do my best work. Taking time for yourself can lead to more productive work hours — a lesson I had learned at Google and then promptly ignored when I joined the campaign.
I’d like to end with another favorite quote, from when Representative Ayanna Pressley stopped by the office. New Hampshire had just happened. I was fighting for Elizabeth Warren, but I also felt so tired and small. I had done everything I could and the race didn’t go how I wanted it to. Representative Pressley came through the office and shook all of our hands. She thanked us for our work, read us the Marge Piercy poem “To Be Of Use” and said a phrase I think about often: “We do not have the luxury to be void of hope.” To me, that meant that having hope to fight for a fair and equitable future is an act of strength. That the next step is taking that hope and doing something with it, but that the first step is to hope.
I hope this intro was interesting and useful to people curious about the campaign from a tech side or for tech people looking to get involved in future campaigns. If you have any questions please feel free to ask me and I’m happy to go in depth on anything here or navigate the questions to the correct people. Contact me on twitter or via email.
Finally would like to thank everyone who read different versions of this post, and especially thank you to Nora & Chelsi for adding so many thoughtful edits.