A first peek behind the scenes of Hillary Clinton’s technology operation
Did you know that Hillary Clinton has a team of software engineers? We don’t operate at Google scale, but we scale people and products rapidly. We’ve only been around for a year and we’ve accomplished a lot. We have about 50 backend services and 20 frontend applications in production. We have over 237 Git repos. We maintain a query intensive, 15TB data warehouse that services a team of data scientists and analysts. We’ve built a mountain of applications that range in purpose from fundraising to staff tooling to making it easier for grassroots supporters to organize and vote.
When I worked on the President’s 2012 reelection campaign we didn’t talk openly about our work. Our technology was a competitive secret and we didn’t want it to be part of the election year narrative. This time we’d like to be more open about some of the things our team is working on. Politics is a democratic sport and we feel that the more our community understands what we’re doing, the more likely they are to participate. So what exactly does a technology team on a presidential campaign do?
What we do
As you might assume our foremost goal is to get Hillary Clinton into the White House. To do this we are building relationships with several other departments within the campaign: Digital, Analytics, Finance, and Organizing. We bring the technology expertise and the other teams bring their political campaign expertise. This combination creates a collaborative environment where we are constantly learning.
The Digital department is responsible for all the content on our website, social properties, online advertising, outbound emails, campaign videos, grassroots fundraising, online organizing, and more. The Digital team is filled with talented people who have worked on many campaigns and are experts in their work.
The Field team is the campaign’s boots on the ground. To me this is one of the most inspiring teams on the campaign. These are people who go into field offices every day, knock on doors, make phone calls, and register voters. In 2012 I spent some time with the field team canvassing in Paul Ryan’s hometown, Janesville, Wisconsin. It’s backbreaking work. I always thought it was exhausting to write code for 10 hours a day, but field work is next level exhausting.
Our partnership with the Analytics team focuses on building and maintaining infrastructure to enable analysis on the campaign’s data. Our work with the Finance team is, unsurprisingly, all about fundraising.
The core of our engineering team’s work is to build technology products for these partners. These products provide vital functionality like voter education, fundraising, organizing, and distributing Hillary’s message.
Now that you have some context, let’s look at a small sample of things we’ve been working on.
Saved credit cards
Our Donation agile team manages many things related to accepting money, but the biggest application by far is our web donation platform. Anytime we accept a donation on the web the transaction is processed by this application. It has processed over 1 million donations in its short lifespan. We started the project in Q3 of 2015, deployed to production in December, and have been working to improve it ever since. We’ve added features like the ability to donate by ACH so the campaign can reduce the nearly $1 million dollars in credit card fees we paid in Q3 2015. But it’s not all about shipping new features. We also ship efficiencies. Individual a/b tests have increased conversion rates by more than 200%, 105%, and 80%. The team has run around 80 a/b tests thus far.
One of our most impactful tests was a complete redesign of the way in which we ask visitors to save their credit card after making a donation. This is important to use because, as you might expect, supporters who save their credit card are much more likely to donate again.
Originally supporters saw this screen after making a donation:
After clicking “Save my payment details” the user would be taken to the screen below. It’s worth noting that most donors do not have an account so they would have to click “Create account” (bottom left corner):
Then the donor would have to complete the create account form:
After the form was submitted, the donor’s credit card is saved. That’s a lot of confusing hoops. We knew we could do better.
In the new experience, supporters who don’t already have an account (the majority of users) saw the screen below. Note that we have pre-populated the email address — we pulled this from the email address field on the donation form.
Supporters who already had an account saw the screen below. We used the email from the donation form to determine if there was an account associated with the email.
Lastly, supporters who were already logged into their account when they made the donation saw the screen below.
All together we made these changes:
- Used the email address the user already provided in the donation form
- Determined if the user had an account and removed confusion around that
- Removed a click from the process
Here’s a screenshot of the results from Optimizely (our a/b testing platform of choice):
What you see in the screenshot above is a comparison of the rate at which supporters saved their payment information. The blue line is the original experience and the orange line is the newer experience. Below the chart you see the actual numbers. In the improvement column you see that based on the available data there is a 238.8% increase in the rate at which supporters saved their credit card. In the statistical significance column you see that the new experience is better than the original at the 99% confidence level. I’ve been doing a/b tests for about five years and this is the biggest, most conclusive win I’ve ever seen.
A common frustration with a/b testing is that sometimes the increase from a test does not show up in regular reports once the winner is deployed to 100% of all visitors. Below is a graph from a report that shows campaign leadership our saved credit card opt-in percentage. The large spike after January 1st is when we deployed the winner to production for 100% of visitors.
Commit to Vote
Another example of an impactful product is our Commit to Vote/Caucus app which you can use here: https://www.hillaryclinton.com/commit. This product gives voters the ability to show their support for Hillary by committing to vote for her. In most states voters can also look up their polling/caucus location and get information on when/who/where/how to vote in their state primary/caucus. To date the application has helped over 574,000 voters find their polling/caucus location. We use Geo IP data from our CDN to automatically determine your state. Here’s a screenshot of my polling place query:
One last example of the products we make is an email application we code-named Balloon. The story behind this application is pretty epic and was one of our Tech team’s biggest wins so far in the campaign. Last year a vendor’s product went down on the worst day: end of quarter. The vendor product was absolutely critical in our fundraising efforts for the FEC fundraising reporting deadline. If you’ve ever worked on a campaign you know this is one of the biggest five alarm fires that can exist.
When the outage occurred we quickly put together a team of engineers and connected them with email writers on the Digital team. The writers gave us some minimum viable product guidance and helped the engineers maneuver through the nuances of email delivery. Together they built a mass mailer in Python and AWS in about 4 hours. This saved us over $700,000 in donations. In its first hacked together state Balloon sent out over 14 million emails. Talk about quick impactful wins!
More to come
These examples are only a narrow look into what we’re working on this cycle. There’s so, so much more. In the weeks to come we will publish more posts that deep dive on the technologies we use to build applications. To give you the high level bit, on the backend, we have mostly standardized on Python/Django, though we have a decent amount of Node.js in production and even some Ruby/Rails and PHP. On the client side we have mostly standardized on a Flux implementation that consists of React and NuclearJS and we use Sass to pre-process our CSS.
In addition to talking about technology, products, and our approach to software engineering, we’ll also discuss our contributions to the open source community. Stay tuned!
P.S. We’re hiring across the board. Check out our open roles here: https://www.hillaryclinton.com/tech/