
Apple
Easier to maintain. Easier to use.
Migrated one of my team's major services: 60M+ entries from six Oracle databases into one PostgreSQL schema, and its web app from Ruby on Rails to Next.js.
The story
The problem
One of the services my team ran collects crash logs from Apple devices and helps engineers find the apps behind them. Its data was split across six fragmented Oracle databases with duplicate data, its Rails web tool was hard to maintain, and its search experience and results made it hard for users to find the apps they were looking for.
The migration
My team was moving several services off Oracle and Ruby on Rails, and I owned this one end to end. I redesigned its databases into a unified PostgreSQL schema and migrated 60M+ entries, removing the duplicate data. To check the migration without loading the production servers, I created and deployed cron jobs that cross-checked the migrated entries against the source database after hours, and compared what the existing APIs returned.
The platform
I moved the web tool from Ruby on Rails to Next.js, built a replacement search API, and built an automated pipeline of cron jobs that keeps the new database current with incoming crash logs. I deployed it through Apple's internal Docker, Kubernetes and Jenkins pipeline.
Prioritizing
Each crash log belongs to an app, so I added crash-count thresholds that classify those apps, and the ones crashing most often are prioritized first.
The outcome
The migrated service went to production and into daily use. With the rebuilt search, users found the apps they were looking for with less effort, and appreciated the faster, simpler experience.
