The Chrome Extension I Shipped, and Walked Away From


A cartoon TV and laptop with a puzzle piece floating between them

In 2015 I built and shipped a Chrome extension called Roku URL Player and Remote. The idea was small and useful: paste a direct URL to an MP4 file and play it on your Roku, plus a basic on-screen remote for people who had lost the physical one. It used the launch endpoint on the Roku device, a companion private Roku channel, and about a page of JavaScript.

I shipped it to the Chrome Web Store, wrote a short description, and moved on.

What happened next

Over the next few years, a few thousand people installed it. Over a hundred of them left reviews. The average settled around 3.1 stars, which is roughly what you expect for a tool that does exactly one thing and fails gracelessly when your router does not want to cooperate with UDP service discovery.

Some of the reviews were people using it for reasons I had not imagined. One person had a TV with the volume muted to zero and no remote; the extension got them back into their living room. Another person used it to coax a Roku back onto Wi-Fi after the TV had dropped off the network. A lot of the one-star reviews were from people who had pasted youtube.com into the URL box hoping to see YouTube on their TV. I tried to explain in the description that this was not how it worked. It did not help.

What I learned from strangers using my code

Three things stood out, and they all apply to any piece of software you ship to the public.

People will use your tool for things you did not design it for. The remote-control half of the extension was an afterthought that turned out to matter more than the URL player, because the failure mode I had designed for ("I want to play an MP4 on my TV") was rarer than the failure mode I had not ("my remote is broken"). The first review, posted June 11, 2015, was five words: "Worked great....we lost our remote." The product found its real purpose on day one. I did not act on it. Build the thing, watch the usage, and let the users tell you what the product actually is.

Bad instructions are a symptom, not a documentation problem. If people misuse your tool the same way repeatedly, the tool is wrong, not the people. The confusion ran both ways: people who found the URL input pasted YouTube into it; people who wanted the URL player could not find it at all. One review from July 2015 put it bluntly: "URL Player? Really? It's a remote, that's it." I did not redesign the URL input to reject obviously wrong values, because at the time I thought a clearer description would be enough. It was not. A tool that refuses to do the wrong thing teaches faster than any README.

Shipping to strangers is a one-way door. Once your thing is in the Chrome Web Store and thousands of people have installed it, you have obligations you did not sign up for. When Google began deprecating the Chrome Apps platform, I had to decide whether to port the extension to the new manifest format, rewrite it entirely, or walk away. I walked away, put a note in the description, and let the installs stay. Someone later uploaded the source to GitHub. Someone else built a better version called Caster that handles YouTube URLs by parsing the page. The work outlived my interest in it, which is probably the best outcome for a side project.

Why I am writing this now

I have been thinking about public software artifacts lately, and this one is my oldest. It taught me that "done" is sometimes a place you walk to, and that usefulness does not require maintenance to continue being real.

The extension still exists. It still has users. I am not one of them.