back to work

2025 / project lead / 5 engineers / 6 months

Watch-and-Browse Mobile Experience

Continuous live playback while browsing, built on Kotlin, Android, backend APIs, and experimentation.

Live TV browse screen with a stream playing at the top of the page Animated demo of the stream staying pinned at the top while the station rows scroll

problem

Watching and browsing were mutually exclusive: opening the guide or any other row tore down the player, so customers had to stop what they were watching to see what else was on. Supporting both at once — the way YouTube does — meant bringing the whole Live TV page onto a player screen that had been built to do one thing, and rethinking how playback, navigation, and page state relate to each other along the way.

what i did

Led five engineers through a six-month refactor that decoupled playback from the browse experience, so a live stream keeps playing while customers move through the full Live TV catalog. Much of the work was cross-team: partnering with the player team to make the Live TV page render and behave correctly inside the player screen, and settling the API contracts with our backend partners. Owned the Android architecture and delivery plan, and implemented the lifecycle and state-restoration behavior the experience runs on.

what i learned

Long-lived playback turns every navigation, configuration change, and process death into a state problem. Shipping it safely came down to incremental delivery behind experiments, disciplined attention to memory and rendering cost on lower-end devices, and one shared definition of correct player state across the whole team.