José Miguel Hernandez

Pandora, Pandora (service) on Wikipedia

Senior Software Engineer, Consumer Electronics · 2015–2017 · San Francisco

Holding Pandora's cast receiver through the year it stopped streaming stations and started streaming songs.

Pandora was neither terrestrial radio nor an on-demand service: it streamed stations under a licence that let a listener steer but never choose. No picking a track, no replay, no queue, and a ceiling on skips. Those were licensing terms rather than product decisions, which is why moving to on-demand was a different business and not a new feature. Buying Rdio out of bankruptcy was how Pandora set about it, keeping about a hundred of us and putting the licensing team onto direct deals with labels and publishers instead of paying a standard rate to play whatever came next.

This was 2015–2017, when Pandora had about 80 million active listeners. My surface through all of it was the Chromecast receiver, the screen your television shows when someone casts to it, and it had to grow every control the old licence had never allowed. Alongside it I built the rig that told us whether it still worked on the hardware people actually owned, and the same HTML5 codebase went into a Windows 10 app built to run from Xbox to phone.

  • JavaScript
  • Backbone
  • SVG
  • Chromecast

Key projects

Selected work from the Pandora years.

  1. Signing in from inside someone else's app

    Partner integrations

    Pandora inside Uber was an account-linking problem, not a player. A rider taps the music bar and a webview has to carry them from nothing to a working session without leaving the car: sign up, log in, or connect an account they already had, with an activation code binding that session to one specific device. Most of the work was the states nobody demos: a sign-up the form rejects, an email already in use, a session that timed out, a country the service was not licensed in. Each of those had to show the rider a next step, in copy that changed between rider and driver. The driver side shipped first, in June 2016, and the rider side followed. Uber had been in Rdio's client list before any of this, so it was a partner I met twice, at two companies.

  2. Controls the licence never allowed

    On-demand

    The old product gave you a station, two thumbs and a ceiling on skips, because the licence it streamed under required exactly that: steer, don't choose. On-demand was a different licence and a different product, and the receiver had to grow the controls the old one had never permitted, repeat and repeat-one and shuffle and a queue you could look at. On a television the hard part is legibility rather than logic. These controls sit over whatever album art is playing, so I drew them as a set and tested every state against light art and dark art until each one read from across a room. I shipped that receiver UI for the launch of Pandora Premium on 13 March 2017, fifteen months after the acquisition that made it possible.

  3. A Chromecast on its own network

    Validation

    A cast receiver is hard to test because nothing about it is local. A build has to reach a phone, the phone has to cast to a Chromecast, and the Chromecast has to reach the backend before a single assertion is worth making. So I wired the loop onto dedicated hardware: a build notification into an OSX box running the iOS simulator and an Android emulator, casting across a private router to a real Chromecast, results coming back out the far end. The assertions came straight from Pandora's own device-certification checklist, written as tests: what happens when idling passes its limit, when a thumbs-down arrives with no skips left, when a second stream is detected on the account, when playback sits paused too long. The receiver also had to run on hardware nobody upgrades, so I profiled the new interface against the old one on a first-generation Chromecast and watched where the animation budget actually went.

Music ran through three of these companies: an artist feed at TastemakerX, the catalogue itself at Rdio (more than 30 million songs), and here, where a licence decided what a listener was allowed to do.