Back to portfolio

Turned a database migration estimated at ~15 years of manual work into an automated pipeline that ran roughly 15x faster.

Enterprise live-events ticketingStaff Software Engineer4 engineers, 1 engineering manager, client DBAs2025
Turned a database migration estimated at ~15 years of manual work into an automated pipeline that ran roughly 15x faster.

Problem

A mission-critical platform behind venue operations and season-ticket management ran on SQL Anywhere 17, a database approaching vendor end-of-life. Roughly 10,000 SQL scenarios were embedded directly in decades of legacy PowerBuilder code, tightly interdependent and largely untested. A straight manual port to Oracle 19 was estimated at around 15 years of engineering effort, against a system that cannot go down during an on-sale.

Approach

Rather than translate by hand, I designed a multi-stage migration pipeline: extract every embedded SQL statement from the application code, analyze cross-statement dependencies, transform each to Oracle-compatible syntax, generate tests, validate output against expected results, and reintegrate. The hard part was trusting automation at this scale, so the pipeline pairs deterministic tooling (regex parsing, dependency analysis, structured intermediate outputs) with constrained AI agents that operate only on pre-processed inputs, keeping results reproducible and auditable rather than probabilistic. It started as a single agent and grew into several running in parallel, always with a human reviewing and approving each batch.

Outcome

Migration throughput rose roughly 15x over the manual baseline, and merge throughput tripled once parallel agents came online. Every translated statement was validated against generated tests, bounding regression risk on a system where an outage during an on-sale is unacceptable. A migration once measured in the range of 15 years became a tractable, measurable program.

Reflection

The leverage came from constraining the AI, not unleashing it. The more deterministic structure we put around the agents, parsing, dependencies, and test oracles, the more we could trust the throughput. I'd reach for that guardrail-first instinct even earlier next time.