This article is based on my presentation “Gusto & Xero: 4 Offices, 2 Countries, 1 Massive Payroll Integration” given at Kiwi Ruby on November 1, 2019 in Auckland, New Zealand.

In January 2019, Gusto became the preferred payroll provider of Xero in what was both companies’ largest software integrations to date.

Payroll with Gusto from xero.com

In other words, Xero’s US payroll customers were migrated to Gusto by the end of 2018 and new customers could easily set up Gusto payroll accounts through their Xero dashboard. This was a 7 month long process that began in July 2018 and required close collaboration between both companies. There were strict deadlines, multiple domestic and international offices, as well as a lot of customers’ pay on the line. So what exactly did we build and how did it go? Before we dive in, let’s introduce the two key players first.

Who is Gusto?

Gusto's payroll dashboard

Gusto (the team behind this blog) is a “people platform” providing payroll, benefits and HR for over 100,000 small businesses in the US. Our mission is to make running a small business as easy as possible by building products that bring personal prosperity and peace of mind to business owners and their employees. Gusto currently serves the US exclusively with offices in San Francisco, Denver, and New York City.

Who is Xero?

Xero's main dashboard

Xero is also a SaaS company that provides accounting software, payroll, and other financial services for small businesses and their advisors across the globe. Similar to Gusto, their mission is to take away the pain points of running a business with more of a focus on the financial and bookkeeping side of things. Xero has offices worldwide including in New Zealand, US, Australia, Canada, UK, and Singapore.

How did the partnership with Gusto and Xero begin?

No significant business collaboration forms overnight and that was certainly the case with Gusto and Xero. We had previously collaborated with them on a smaller scale accounting integration where we got to know each other’s teams and found success in this venture. What made us drawn to wanting to work with them again? Aside from being in similar tech space, Gusto and Xero share key core values such as being customer service driven. We both take pride in making beautiful, high quality software that makes a problem space that has traditionally been intimidating easier to approach.

Testimonial from gusto.com

Thus in July 2018, the teams came together again to integrate Xero’s US product with Gusto’s full-service payroll solution.

What exactly did we build?

There were two main focuses outlined in our contract that we needed to finish by the end of 2018:

  1. Migration: Migrate existing US Xero payroll customers to Gusto payroll.
  2. Provisioning: Allow US customers of Xero to set up Gusto payroll and have a seamless experience between the platforms.
The main Xero projects that Gusto EPD worked on

Sub-projects varied in size and consisted of teams of 1-3 engineers. Some projects were small and took about 2-3 weeks to complete—such as co-branding which involved displaying Xero’s logo in Gusto when a user SSO’d into our app. Other projects were more lengthy and required significant amounts of cross-collaboration between teams. The meatiest project by far, which we'll dive into a bit, was creating our migrations API.

Building the API

Prior to Xero, we had never had to migrate customers in bulk on a very tight timeline into Gusto's main app before. These requirements prompted the migration API project.

One of the biggest questions we faced was how to ensure speed of migration as well as correctness of data (payroll is something you do not want to mess up). There was a lot of information missing from Xero's US payroll customers that Gusto needed since we offer full-service payroll—meaning we will file all tax documents on behalf of a company—while Xero did not. On top of this, when Xero happened to have data that Gusto needed, the format was not always compatible with our validations. For example, Xero’s phone formatting was more relaxed due to the variation of international phone combinations they accept while ours strictly requires a US 3 digit area code followed by a 7 digit number.

In order to optimize for conversion and gather as much data as possible, we designed the API so that we could use the minimum amount of information to create a company and admin in Gusto. There was a tradeoff here in that having more relaxed constraints to take in companies meant that we would have fewer companies that would be completely ready to run payroll after they were sent over from Xero. To counterbalance this, we relied on our internal transfers team to reach out to customers and help them finish onboarding.

To assist our transfers team, we made some enhancements to the tools they use so they could be more efficient in fully migrating companies. One way we accomplished this was by displaying the entire payload of migration requests to transfers team members so that they could pick it apart and manually backfill data that was not automatically saved.

A sample migration record

Testing the API

We tested the API in several stages starting with our pre-production environment. Xero would POST mock companies to us that mimicked a realistic set up and we would fix any bugs that came up.

Example migration request

We used Slack threads to our advantage during testing and isolated each day’s correspondence into a thread. This organized communication between Gusto and Xero and made it easy to refer back to.

Once we felt like we worked out all of the major hiccups surfaced in our pre-production testing, we moved into a beta phase where Xero POST’d actual companies to Gusto’s production environment.

We started with companies that had simple setups and gradually began importing companies that were more complex (ex. employees in multiple states, states with complicated taxes, companies large in size). When migrations failed, we would log the issues, fix them, and then request that Xero send us those companies again.

After testing a number of scenarios successfully, we then began importing companies in bulk. We started with smaller batches of 5–10 companies which slowly grew to batches of about 50–100. We were in close contact with our internal transfers team the entire time to ensure that we were not overwhelming them.

And before we knew it, we were able to successfully migrate all of Xero’s customers onto Gusto before the end of the year.

Xero and Gusto teams celebrating at a happy hour

How did we set ourselves up for success?

It’s definitely not every day that you have to collaborate closely with an external organization. Plus we had the added challenge of working across four offices (two in San Francisco, one in Denver, and one in Wellington, NZ). We deliberately did not want to burn the midnight oil by the end of the project, so we put practices into place that helped us synthesize as one team with clear goals and expectations.

In the beginning, the team was provided A LOT of context

Mike, our project PM, giving us the deets on Gusto and Xero

Before we began development, our lead product manager for the project delivered an internal kick off which shared key business insights and motivations behind building this integration. By inviting all involved team members to know the details on what we were doing provided a strong foundation and momentum for getting started.

We scheduled regular in-person meet ups

Gusto and Xero working from the same office

Following our internal kick off, we held an external kick off at Xero’s office where project motivations were stated again, but this time with both companies’ teams. The whole day was dedicated to context sharing, tactical conversations, ice breakers, and boba runs. Afterwards, Xero invited Gusto to work from their San Francisco office for the first week of development. This provided quality in-person time where the teams were able to familiarize even more with each other and strengthen our personal connections. We maintained our relationship throughout the project by holding bi-weekly show-and-tells split between our offices as well as meeting up for celebrations over big milestones. Getting to know each other and maintaining more personal relationships established greater trust between our teams and made it easier to communicate throughout the course of development.

Our aligned values carried us through

One of the most crucial factors that made our integration run smoothly from start to end was our aligned values. Both Gusto and Xero teams hold high customer standards above anything else. It wasn’t a matter of “we’re doing it this way because we said so,” but a matter of “what process makes the most sense for our end users?” With this collaborative mindset carrying us through, working with Xero was straightforward and actually quite a fun process.

Gusto and Xero—a balanced partnership

Since Xero is a global company, they are larger than Gusto and serve more customers than us. But just because they are bigger, doesn’t mean that we were the “smaller fish” in this project. Each team had equal say in the development process and was able to drive the project forward. Partnerships can come in many shapes and sizes and are capable of maintaining long-term healthy dynamics. When we prioritize the happiness of our customers and an equitable outcome for all parties involved, there is so much that we can accomplish in tech that will drive forward innovation and solve the problems of today and tomorrow.