FastFilmz had a vision to stream HD movies in India, over slow and unreliable networks, with low cost plans. We partnered with them to help bring their over-the-top (OTT) solution to market. As you can imagine, this is not exactly easy. We were thrilled to help them accomplish it.
Now that the app is available and the celebrations are over, we’d like to share what we learned. Creating products for emerging markets presents unique challenges.
Building for low-end devices
FastFilmz launched first on the Android platform, as it is the most popular mobile OS in India. India is the 2nd largest smartphone market in the world after China, recently surpassing the US. This growth is fueled by low-end phones sold at competitive prices by both local and international OEMs. This presents a challenge as we had to design solutions that run well on devices with limited resources.
Picking test devices
Android always gets a bad rep for fragmentation, requiring testing on lots and lots of devices. In our experience, you can efficiently test an application by picking the right set of devices. The key is to understand the target audience. You don’t need to test your app on every device out there.
We worked with FastFilmz to come up with a short list. It was an ideal combination of platform versions, screen sizes, hardware configuration, and manufacturers. We validated the list through data gathered in an extensive user-research exercise. Also, during beta testing, we made sure the app was tested on devices not on our original list to catch any rogue, device-specific bugs.
Running buttery-smooth animations
Achieving 60fps on popular Android phones is hard enough. Imagine trying to do that on phones with around half a Gigabyte of RAM. On low-end devices, it is common practice to disable complex animations or run simpler ones instead. If most of your users have low-end hardware, this option just goes out the window.
Our engineers worked side-by-side with our designers to try different ideas for navigation and transitions. We tested them on real devices, tweaked them if something worked well, or went back to the drawing board and repeated the whole process. It was definitely challenging, but totally worth it.
A common advice for engineers is to use low-end hardware while building apps. We not only did that but went a step further. To simulate a real world environment, we installed the most popular apps used by our target customer. This is important. On a device with constrained resources, bad citizens can degrade the overall performance, including your app. This was critical in making sure our animations work well for all customers.
Dealing with slow and unreliable networks
Despite the exponential growth of smartphone usage, the state of cellular networks in India is terrible. 4G is just rolling out, and 3G coverage is spotty, even in major cities. Even when there is 3G coverage, devices regularly get bumped down to 2G, especially when indoors. If the users cannot quickly browse the catalog, they won’t be able to use the app.
Making content always available, even when offline
Our goal was to create an experience with no progress bars. That means users should rarely see loading indicators, irrespective of the quality of the network or even when they are offline.
There are multiple ways to achieve this, and we’ve written custom implementations in the past. However, we were impressed with the capabilities of Firebase. Though it is primarily a real-time database, it has nice offline capabilities, and it syncs fast, even in bad network conditions. What if we could use Firebase to fetch and store the catalog data locally, so we can render it fast, even when the app is offline? We wrote a quick prototype to see if that’s feasible, even on slow networks in small towns. It worked better than we expected.
We used a mix of Firebase and RESTful APIs to power the app. Catalog metadata that must be available to the user both instantly and offline resides in Firebase. Everything else is on servers that provide standard APIs to access it. The key is deciding what data goes where. Putting everything in Firebase would increase the memory the app would consume on users’ devices. We wanted to be considerate of this and not cause customers to uninstall our app to create space.
We were able to leverage the power of Firebase, while keeping the server costs low. It also allows the curation team to add new content or feature content easily by using the Firebase backend. The updates are instantly pushed to all customers.
Since Firebase stores data in JSON format, it has limitations to how you can query it. For instance, you can’t query data that is over 2 levels deep. To work around this, we designed the schema by flattening it as much as possible, while reducing duplication. Overall, we are happy with the way it is working.
For RESTful APIs, we followed the usual best practices, using gzip compression to reduce payload size, implemented HTTP response caching, along with exponential back off and retry. For images, we used WebP to reduce load times and memory consumption.
The key thing to note, while providing offline capability in any app, is how much time and effort will go into implementing and maintaining it. Modern frameworks, like Firebase, support most of the use cases and are affordable, even for start-ups. However, there will be use cases where they don’t work. In that case, you may need to roll your own solution.
Streaming video with little or no buffering
It’s no fun to watch your favorite movie when it keeps buffering all the time. Fortunately, FastFilmz partnered exclusively with V-Nova to deploy their award-winning video compression technology, Perseus™. One of the world’s leading video compression technologies, it works well on slow networks, while keeping the data costs down. During our testing, we found it enables quality playback at almost 1/4th the data consumed compared to other similar services.
We also allow customers to download full movies and store them offline. They can watch them anytime. Digital Rights Management is fully supported to prevent piracy.
Choosing the right payment mechanism
Monetization is an important aspect of any business, and it is critical to provide an easy way for customers to pay. As per 2015 reports, only 4-6% of Indian consumers have access to mobile payments and most simply don’t trust online payment services.
To work around this, we implemented carrier billing as an exclusive way to accept payments, i.e., allowing consumers to pay with their mobile carrier balance. Based on the feedback we’ve received, customers love the convenience and are more than willing to purchase and renew their subscription using this option.
Creating apps for emerging markets introduces some unique challenges. Fortunately, once you know the issues, they are not difficult to solve. To recap, always remember to:
- Pick the right target devices, based on user research.
- Use real devices, not simulators, daily and set them up to mimic a real user scenario.
- Work closely with designers to iterate on different options for animations and transitions.
- Use the WebP format for images.
- Provide a compelling offline experience using technologies like Firebase.
- Choose the right payment platform for your target audience.
We love solving new problems and based on the results in the market, customers are loving the result. We hope this was helpful and always welcome questions and comments.