
Feedback is gold for indie devs. A user emailed me five bugs, four were real, and fixing them properly turned up five more.
I built PixelPlay, a live TV player for iPhone and iPad. Earlier this month someone who'd been using it for a few weeks sent me a long email listing five things wrong with it. It's the most useful thing I've received since launch.
The worst one: he tried to watch the K-pop awards on SBS, it failed because the channel is restricted to South Korea, and then the channel disappeared. Not just from the browse list. From search too. He connected a VPN and nothing changed. He ended up deleting and reinstalling the app to get it back.
That one was mine. I had a rule that hid any channel which failed twice inside six hours, and I'd written it as tidiness. A geo-blocked channel fails deterministically, so two taps is one sitting. The filter ran after the search-text filter, so typing "SBS" returned nothing. It applied to favourites too, so a channel he'd picked by hand vanished from his own list. And every retry refreshed the timestamp, so trying again extended the six hours instead of ending them.
His other four: the profile card said "PixelPlay User" instead of his name, favourites couldn't be reordered, AirPlay sent audio with no video, and there was no way to stop the nightly reminder without turning off every notification the app sends. So he turned them all off. His point on that last one is the one I keep repeating back to myself. Give people no granularity and they opt out of everything.
Four were real. Favourites reordering I'd already fixed and it was sitting in review, so he just didn't have it yet.
Then I tested the fixes on a real device and the diagnosis moved three times.
My VPN detection never ran. I'd checked for a utun0 interface, which exists on a stock iPhone with no tunnel running, so the app thought a VPN was connected from launch and a real one connecting was never a change. Dead on arrival, without even a log line to show for it.
I was wrong about geo-blocking twice. SBS6 Classics plays fine from India and fails only through a VPN, because the broadcaster refuses the VPN exit IP rather than the country, which is the opposite of what my own error copy assumed. And Crime + Investigation Asia isn't blocked at all, it's dead. It answers 200 OK with an mpegurl content type and eight bytes of body reading "No route". A soft 404. Three labels on that single channel were wrong at once.
My diagnostics were lying too. The post-failure probe read the status line and called the URL reachable, which is how "200 OK" plus "No route" got reported as fine. It now reads the first 256 bytes and asks whether they're actually media.
What went out yesterday: hiding failed channels is opt-in and never touches search, connecting a VPN clears remembered failures, notifications have their own section with separate switches, the profile shows your name, and AirPlay carries video wherever the channel has an AVPlayer-playable variant.
That last one is a partial fix and I'd rather say so than let someone find out. VLCKit renders into an OpenGL surface AVFoundation can't route, so channels that need VLC still get audio only, now with a message saying that instead of a black screen. VLC's own iOS app behaves the same way. Chromecast is unaffected, because it hands the URL to the receiver rather than rendering locally.
I don't have a clever process to describe. One person wrote a long email instead of leaving a one-star review, and it was worth more than every dashboard I have.
If you ship consumer software, how do you get more of these? The people who bother to write them seem to be the ones who'd already decided to stay, and I can't work out how to reach the ones who just leave.