I worked on the iOS version of Akinator, a globally popular guessing game, with a focus on modernizing a large and aging codebase while maintaining production stability at scale. The project was written in a mix of Objective-C and Swift, which required careful interoperability decisions to avoid disrupting legacy parts of the app.
One of the main challenges was the networking layer. The app relied on a very old, unmaintained version of Alamofire that had been manually embedded into the project, making updates risky and error-prone. I re-engineered the networking layer to create a cleaner, more reliable abstraction that could be safely used by both Swift and Objective-C components, while improving maintainability and future extensibility.
Alongside networking improvements, I worked on refactoring legacy code, improving performance, and reducing crash sources across the app. I collaborated closely with backend and design teams to refine user flows and align new features with the product’s global roadmap, ensuring changes remained consistent with an app used by millions of players worldwide.
By progressively modernizing critical parts of the codebase without disruptive rewrites, the app became more resilient, easier to evolve, and better equipped to support ongoing feature development while maintaining stability at scale.