How a hackathon idea turned into an official Vimeo app
One of the great perks of working at Vimeo is that we’re given time to work on something not yet associated with a product roadmap. We call this the Vimeo Jam, and it can include research, working on a feature we wish our apps had, or even creating a new application. We have a three-day long jam session in the Spring and Fall, as well as a jam day every other week.
During the Spring 2016 Jam session, I began work on an Android app called Day Tripper. The purpose of this app is to automatically download videos while a user is connected to wifi, so that they can play videos even if they have a weak internet connection. The user sets a trip duration, chooses their interests, and magically has videos (none of which they have previously seen) waiting for them to watch each time they open the app.
At the conclusion of the Spring 2016 Jam session, I had a working prototype. At the time, the only other Android application at Vimeo was the Vimeo flagship mobile app. To get the prototype up and running, I had to leverage code from the flagship app for authentication, the download system, and the video player, which unfortunately meant a lot of copy-paste. While this was OK for an initial prototype, it would have to change if the app was to ever make it into hands of consumers.
Being a commuter, I wanted to see this app become a real thing, if not for anything other than to enjoy it each day. Being an engineer, I wanted to make sure the application had a clean architecture and was free of bugs. So, I set off on a mission to separate the components needed by both Day Tripper and Vimeo into reusable, standalone modules. During each Jam day, I spent time removing dependencies and re-architecting components so that they could exist in multiple apps. Due to the way code was added as the Vimeo app grew, some of this proved challenging.
Ultimately, though, it helped the Android team rethink features and how we approach building core components. Throughout the course of the year, we created a separate layer called vimeo-kit-android that contains code that’s generic enough to be shared across various Vimeo-branded applications. Within that layer, we created many different modules, each with a specific purpose. For instance, there’s a download module — applications that need download functionality can include this module, while future applications that don’t need this could just omit it.
With the modules, we have several benefits. First, we know that code being shipped with Day Tripper has been battle tested by the millions of people who use the Vimeo flagship app. If we found a bug in code shared by either app, we know that we can fix it in one spot. This drastically reduces maintenance costs and improves code reliability. Next, we now have the ability to prototype quickly by leveraging pre-built components. Whether it’s a Jam project or an officially sanctioned app by another Vimeo team, we could quickly spin up apps that include code everyone is familiar with, while also bringing design unity to core components, like authentication screens. Finally, it helps us think differently about how we architect features, which leads to better code design and testability.
One year later, not only am I happy that our codebase is in a better place because of a Jam project, but I’m excited to announce that Day Tripper is available for download! Join the open Beta today and give us your thoughts!
What next?
Let’s write some code.
Send us your feedback!
- Tweet at us: @vimeoeng
- Post on Stackoverflow with the tag vimeo-android
Are we speaking your (highly optimized and bug-free) language? Maybe there’s a job for you at Vimeo.