Case Study Ticketing · Platform modernization

Make the platform observable, then rebuild the riskiest parts.

Ingresse is one of Brazil's largest event ticketing platforms. Paulo Cardoso joined as the only outside consultant for six months, working with a six-to-eight-person engineering team. He instrumented the queues and workers, removed database bottlenecks, and moved payments, orders and ticket processing from legacy PHP to Node.js and TypeScript while the platform kept operating.

Client
Ingresse
Sector
Ticketing · Events
Engagement
Observability, performance & migration
Delivery
Migrated with production live
Platform
Web · AWS
A ticketing operations professional holding a handheld scanner at an event venue entrance
Ingresse: A ticketing platform made observable before its riskiest payment and ticket paths moved out of legacy PHP.
By the numbers
6 monthsOutside consultancy
6–8Engineers on the team
3 pathsPayments, orders and tickets moved
WeekendsPeak-load pressure

Peak weekends exposed failures nobody could explain.

The core was a legacy PHP system that had grown by accretion, with the original authors long gone. Its deploy pipeline worked. The deeper problem was a web of queues and background workers that failed constantly without metrics.

When a worker died or fell behind, the business felt the symptom, but the team could not say why it happened or which part of the chain was the bottleneck. Ticketing load arrived in spikes, and the biggest events happened on weekends, exactly when database queries and unobserved workers were most likely to degrade the purchase and ticket flow.

The mandate had two goals: improve performance and reduce the weekend incidents that put the revenue path at risk.

Metrics turned a web of workers into a system the team could reason about.

Paulo did not begin by changing code. He first mapped how the services communicated, where purchase and ticket flows passed, and what each queue and worker did. Then he used New Relic to put metrics on the worker layer for the first time.

With traces and queue metrics, the guessing stopped. Bottlenecks became visible. Some workers were optimized. Others were cheaper and safer to rewrite. Unnecessary database queries appeared in the traces and were removed.

The migration seam

  • Payments, order processing and ticket processing moved to Node.js and TypeScript on AWS
  • An API gateway connected the legacy system to the new services
  • Traffic moved gradually instead of in one high-risk jump
  • Each critical switchover happened in a low-traffic window
Diagram showing Ingresse moving payments, order processing and ticket processing from legacy PHP through an API gateway to Node.js and TypeScript services on AWS
The API gateway created a controlled seam between the legacy platform and the new services.
The current Ingresse event ticketing website
The live surface

The work sat behind the checkout.

Paulo did not build this page. Behind purchases like this one, he built the payment, order and ticket processing services and instrumented the queue and worker layer that keeps ticket sales moving on peak weekends.

Production stayed live · traffic moved service by service
Engineering note

The order mattered. Instrument first, find the real bottlenecks, remove the queries that should not exist, then use an API gateway to move one critical path at a time. That kept the highest-risk moment small and scheduled it for the lowest-traffic window.

Paulo Cardoso Project partner · the build

The critical paths became explainable, more reliable and easier to change.

Ticket validation became markedly more reliable after the bottlenecks were found and fixed. Weekend incidents caused by unobserved worker and query failures stopped being routine.

The team could see problems coming instead of discovering them from user reports. Payments and ticket processing left the legacy codebase without interrupting the business.

No precise performance figure is claimed here. The work happened in 2022 and the original dashboards are no longer available, so the case states only the results Paulo can stand behind.

PHP Node.js TypeScript AWS New Relic API Gateway
Role
Observability, performance & migration
Partner
Paulo Cardoso
Model
Outside consultancy
Status
Production migration
Project partner Paulo Cardoso

Taking over a legacy platform? See software rescue, an embedded engineering team, or the guide to taking over software safely.

Next / Your build

Taking on new builds

Have something in mind?

Tell us what you're making. We reply within one business day, and you get a fixed price and a date in writing before any code.