gofri Why two g's? When I was a kid my grandma called me Gofri, and the family picked it up. She said the G hard, almost twice, so I write it twice.
production

Provider integrations

for
Live Nation, via Globant
when
2024–25
Problem
Several providers needed to work behind a single interface.
My contribution
Built the integrations, frontend flows and normalization layer, then proposed extending it to every product on the team.
Decision
Put one shared contract-normalization middleware in front of every provider, and ask provider engineers about ambiguous IDs and tokens instead of guessing.
Delivered
One normalization layer in front of more than five providers, with retries, mismatch alerts and CI tests.
Result
More than five providers behind one shared contract, later extended to all team products and gradually adopted outside the team.
Status
production · 2024–25

>5providers behind one shared contract

what I foundEach provider described the same ideas with different field names.

what I foundAmbiguous IDs and token meanings went to the providers' engineers instead of being guessed.

provider A

  • event_id
  • start_time
  • price
  • status

provider B

  • evId
  • startsAt
  • amount_cents
  • state

provider C

  • id
  • date
  • cost
  • avail

provider D

  • eventCode
  • when_utc
  • total.value
  • onSale

provider E

  • EVENT
  • StartDT
  • Price
  • STATUS

provider F

  • uid
  • ts
  • fare
  • flag

shared contract

  • event.id
  • event.startsAt
  • offer.price
  • offer.status
Same ideas, different field names, one contractillustrative field names, not real payloads

try it

Six shapes, one contract

Same ideas, different field names, one contract

illustrative field names, not real payloads
  • event_idevIdideventCodeEVENTuid event.id
  • start_timestartsAtdatewhen_utcStartDTts event.startsAt
  • priceamount_centscosttotal.valuePricefare offer.price
  • statusstateavailonSaleSTATUSflag offer.status
  • status missing offer.status = unknown
  • price missing offer.price = 0
  • start_time missing event.startsAt = null

discovery

From traffic to contract

  1. 1Capture trafficprovider traffic recorded with Playwright
  2. 2Document shapesresponse shapes written down per provider
  3. 3Confirm with provider engineersambiguous IDs and token meanings asked, not guessed
  4. 4Shared contractone contract in front of every provider

production

What keeps it honest in production

  • Retriesavailability and purchase calls retried on errors
  • Mismatch alertsa Slack channel is alerted on contract mismatches
  • Tests in CIcontract, unit and end-to-end tests

adoption

From one feature to every team product

  1. First integrationsthe first providers behind the contract
  2. All team productsexpansion proposed and implemented
  3. Outside the teamgradual adoption

capacity

Delivery after the boundaries moved

approximately 15% more story points

over four sprints after ownership boundaries changed; same team size, observational, not causal

ownership

Who did what, and when

  1. provider integrationsDec 2024
  2. all team productsexpansion
  3. adopted outside the teamgradual
  4. one shared contract
  • MeIntegrations, flows, normalization, observability, tests; proposed the expansion
  • Provider engineersConfirmed ambiguous IDs and token meanings
  • Other teamsAdopted it gradually
  • Provider namesNot shown

What shipped

Integrations that began provider by provider became a shared capability across the team's products.

Method and caveats
  • More than five providers: the integrations I built personally
  • Story points: team measure from Jira
  • Contract field names: illustrative, not real payloads