The challenge
A public transport operator in a major Brazilian metropolis operates digital ticketing channels (registration, login, credit purchase, recharge, card replacement, card blocking, fare exemptions) used daily by passengers in the network. Behind these channels, a modern front-end coexists with a legacy back-end that is over a generation old: server-side pages, opaque sessions, no versioned APIs, no idempotency, and generic error messages.
The most sensitive risk of this architecture has a name: paid without credit. Timeouts between the payment gateway, checkout, and transactional core, without retries or explicit reconciliation, create opportunities for charging without credit, duplicate orders, and manual reconciliation in spreadsheets. There are also issues with duplicate registrations between systems, fragile authentication (session tied to server cookie, without standardized MFA or token revocation), and inconsistent experiences across channels, with no single catalog of error messages or accessibility standards.
The aggravating factor: there was no reliable baseline of how the product actually worked. The assessment needed to happen without direct access to legacy environments, source code, or databases. Any statement had to be supported by observable evidence from the outside.