Skip to main content

WorkUpwork

Retiring a four-hourly tag job with live data

GraphQL integration for Upwork's Zendesk Help Center

Live data for Zendesk routing: four-hourly tag job retired

The problem

Zendesk runs on tags. At Upwork, a job worked out each user's account state, turned it into tags, and regenerated them for every user every four hours. Those tags reached Zendesk only when the user started an SSO session in the Help Center.

So Zendesk always worked from a snapshot. Routing rules and Help Center personalisation ran on data that could be hours old. Live chats sometimes reached the wrong agent group. And the job itself made a large share of our Zendesk API calls.

What I built

I took this on myself, designed the approach and led the build between May and September 2022.

  • Live data in the Help Center. I integrated Upwork's GraphQL API with the Help Center, so it read user data at request time instead of trusting what was true at login.
  • A ticket workflow that didn't need the tags. I redesigned the incoming-ticket workflow around the live data.
  • One less scheduled job. With nothing depending on it, the tag-generation job was retired.
Diagram: tags regenerated every four hours replaced by Upwork GraphQL data read at request time
Before: tags pushed at login. After: data read when it's needed.

What changed

Zendesk API usage fell 60%, and live-chat misrouting caused by stale tags ended.

"Asif is a capable leader and he frequently went the extra mile, working on his own time to ideate on how we can improve customer experience infrastructure at Upwork, bringing his own ideas to the table."

— Diego San Miguel, Sr. Product Manager, Customer Experience, Upwork

What I took from it

Batch sync is the default way to connect two systems, and it ages badly: every hour between runs is an hour the downstream system is wrong. Reading at request time is harder to build. Here it was also cheaper to run.