Unbabel Swift app

2016
Developer
Unbabel
iOS, Swift, RxSwift
Unbabel Swift app

Overview

Unbabel for iOS was a new app built in 2016. From a product perspective, it introduced different ways of doing translations on the go, with a focus on speed and quality. From a technical perspective, it marked Unbabel's shift from Objective-C to Swift.


The problem

Unbabel's iOS app had been outsourced to a third-party, which I had to maintain, and was all written in Objective-C. When Swift 2 was released, where it was finally made open-source, I was eager for the opportunity to really commit to it.


At the same time, the team was thinking of ways to improve the translation process and allowing translators to work on the go. Unbabel's machine learning models would already provide translations, where sentences were broken into chunks, and each chunk would have a confidence score. In some of the language pairs we were most confident in, the translations were already great, but the chunks were not always in the right order, so we had the idea of allowing translators to rearrange the chunks to improve the translation, like it was some kind of Scrabble game.


What we built

We built a new app from scratch for translators, that would allow them to pick available tasks. Depending on the language pair, the app would show different translation modes, like the Scrabble mode, or the traditional translation mode. This allowed us to observe how much changes were needed to the translation already provided by the machine learning model, and how much time it took to complete the task.


Unbabel Swift app
Unbabel Swift app

My role

I was the only iOS developer at Unbabel at the time, so I was responsible for the entire version 1.0 of the app, from discussing the UI and endpoint design with the necessary teams, to building the app and integrating with the existing backend, including the flows and the different translation modes.


Once Swift 3 was released, I was responsible for the upgrade, which at the time was a major undertaking, given that the app was already in production.


Around the same time, the team grew. With more developers, we started introducing RxSwift to the app. This was my first exposure to reactive programming.


The stack

The app was built from scratch in Swift, and version 1.0 was a simple MVVM app. Once we upgraded to Swift 3, we adopted a more functional approach, using RxSwift to handle the different states and events and the Coordinator pattern to handle the different screens and flows.

iOS
Swift
RxSwift
© 2014-2026 Afonso Graça