



This post is about some of the design, validation, and release decisions we made while building the new camera uploads feature for Android, which we released to all users during the summer of 2021. The implementations could then be optimized for each platform and evolve independently, without being constrained by design decisions from the other. This time, Android and iOS implementations would be separate and use platform-native languages (Kotlin and Swift respectively) and libraries (such as WorkManager and Room for Android). In 2019, we decided that rewriting the feature was the best way to offer a reliable, trustworthy user experience for years to come. It was unaware of platform-specific restrictions on background processes, had bugs that could delay uploads for long periods of time, and made outage recovery difficult and time-consuming. Plus, after more than five years in production, the C++ implementation was beginning to show its age. This risk was compounded by a lack of tooling support, and a shortage of in-house C++ expertise. The shared code had grown polluted with complex platform-specific hacks that made it difficult to understand and risky to change. This library served us well for a long time, uploading billions of images over many years. Until recently, camera uploads was built on a C++ library shared between the Android and iOS Dropbox apps. It’s important that we offer a service they can trust. They care deeply about their photo libraries, and expect their backups to be quick and dependable every time. People who use camera uploads are some of our most dedicated and engaged users. The feature was first introduced in 2012, and uploads millions of photos and videos for hundreds of thousands of users every day. Camera uploads is a feature in our Android and iOS apps that automatically backs up a user’s photos and videos from their mobile device to Dropbox.
