Podcasts for the Next Billion
Designing a podcast client for KaiOS smart feature phones
More than 3.1 billion people (~40%) are not connected to the internet, the majority of whom live in Africa and Asia. For companies, this presents an opportunity to build hardware and software that connects the “next billion,” particularly in the mobile space with platforms like Android Go and KaiOS. The JioPhone is one such success story, selling more than 70 million phones in India at the equivalent of $10 USD (or less!).
With around 500 apps, the KaiStore is a platform where app developers can publish apps available to millions without being crowded out. However, this requires software that is designed, developed, and optimized to run on low-end hardware. That often means simplified interfaces designed for d-pad navigation, low-bandwidth networks, and really small screens¹.
¹ 1st-Gen iPhone: 320x480, KaiOS: 240x320
When I looked through the app store on my Alcatel GoFlip 3 running KaiOS, one noticeable omission for me was the lack of a podcast app. Android and iOS each have dozens of podcast apps, including default clients provided by Google and Apple. For my new phone, with the navigation and screen size constraints, web-based podcast apps accessed through the browser had a poor user experience and no offline capabilities. Additionally, if I were going to make the switch from smartphone to feature phone, I wanted a podcast app to listen to all my own favorite podcasts. So, I decided to build PodLP, a podcast app designed for KaiOS.
I started the process by looking through the podcast apps I currently use to understand which features would be the most important to include, and then started to think about how I could minimize and fit those features into both a smaller screen space and non-touch screen interaction.
Visual design began with the UI Kit for Sketch.app that KaiOS provides to create standard user experiences that leverage familiar UI elements like software keys and options menus. For podcast clients, nearly all apps offer some combination of popular podcasts, search, subscribe, and download. These formed the set of minimum feature requirements that would enable users to discover, listen to, and follow podcasts from around the world.
After walking through the simplest version based on existing KaiOS components, subtle design improvements like including the number of items in a list were added. This affords users a sense of scale on a device where only 3–4 items can fit on screen at once. Visual progress indicators were also added both on the play and episode screens for users who might start and then come back to an episode. “Invisible” UX additions included automatically deleting episodes after listening to free up space on devices with minimal storage.
Finally, I began prototyping the app on my Nokia 8110 (aka the “banana phone”). Especially when dealing with T9 typing and d-pad navigation, there is no substitute for a real device when validating designs — and having others trying to use and navigate through the app revealed information hierarchy and findability issues as well as where error/success states needed to be designed. It also helps proof details like color, sizing, and spacing while also considering the “feel” of interactive components (modal, dialog, scrubber).
Although there are very few apps on the KaiStore compared to the Apple App Store or Google Play, there are a handful of resources of software developers including the KaiOS Developer Portal, KaiUI library, and r/KaiOS Discord server. The experience can be frustrating, especially when navigating undocumented or under-documented APIs. Again, this is where a real device is helpful in feature discovery and validation. Even still, you may find yourself misguided by the existing, limited documentation.
For example, don’t be surprised if you notice inconsistencies in functionality with on-device testing. Originally PodLP was built to use the DeviceStorage API to save podcasts to files locally. However, I soon discovered certain parts of the API had never actually been implemented. This creates for a confusing (and frustrating) development experience. If you intend to rely on any KaiOS/ Firefox OS-specific APIs, smoke test them in the developer console first!
It’s also worth mentioning that most KaiOS devices have either 256MB or 512MB of RAM, which is often the most limiting resource. This means using techniques like virtualization to limit the number of elements actually rendered on screen, as well as limiting file size when downloading remote assets using XHR or Fetch. For PodLP, this was especially challenging since 1hr+ shows can easily reach 50–100MB in size on a device that doesn’t have close to that much memory freely available.
The last step in developing PodLP was KaiAds integration, both as a monetization strategy and because it’s required for distribution on the KaiStore. Based on what I’ve observed in the KaiAds console, I expect very low effective cost per mile (eCPM) around $0.01 — $0.10 USD, which means it will be difficult to hit the $500 distribution threshold.
However, it is still the early days for KaiOS and for me, the main motivation is the prospect of becoming the de facto podcast app for millions, many of whom may be coming online and listening to podcasts for the first time! I also hope to build a useful service for many like myself interested in a “digital detox,” but who do not want to give up podcasts.
Finally, after months of designing, developing, testing, debugging, and localizing, I published PodLP on the KaiStore. The app is freely available in English, Spanish, and French (more languages coming soon) on all devices running KaiOS 2.0+.