🔧 Things I Broke So You Don't Have To
- Jeff Ranasinghe
- Jun 20
- 2 min read
Updated: Jun 21
(Lessons from building a video looper app with actual users and actual mistakes.)

1. The invisible crash caused by currency symbols
You’d think $69.99 and £69.99 are basically the same.

OK – but try passing that from Swift into C++ (where I handle the audio). Then admire the memory leak (imagine a the Titanic, but instead of a ship it’s an app).
And don’t even get me started on ₩69,990.
Lesson:
Parse numeric strings very carefully. Assume nothing. Or at least, very little.
2. The “Regenerate” button that… wait, did it even finish?
Tapping to regenerate a video sounds simple enough. The app renders, then sends you to the Share Page to view the result.
In practice? It felt jarring. Users weren’t sure it had finished, or if the feature just shrugged and ghosted them.
Lesson:
A tiny visual confirmation, even half a second, helps massively. A final progress flash gives confidence that something finished, rather than failed silently.
3. The great foot switch mix-up
Double-tap to reset was a dream. And it worked in tests.
But in the real app? Unstable. Unclear. Sometimes it worked. Sometimes it didn’t. Occasionally it punched a hole through the timeline and restarted the sun. Not that often, thankfully.

Lesson:
Input logic matters. Each keystroke must be tracked independently – don’t rely on global state or assumptions.
Double-tap ≠ fast response. By definition, it requires a delay to know if a second tap is coming. So never assign it to time-sensitive actions (like loop mark in/out). Use it for relaxed commands like session start/stop and reset.
macOS keystrokes ≠ iOS keystrokes. What works in your Mac testbed may absolutely not work on device. I learned that the hard way.
4. The Tour That Wouldn’t Leave
At one point, the final step of the onboarding Tour just wouldn’t go away if you asked. You were held captive to watch your first experimental video, like it were some kind of bizarre
interpretative art house punishment. And if you're anything like me your first tests aren't videos you want to be forced to watch all the way through.
Fixing this was clearly not difficult, but prioritising it with everything else that needed to be done, was. That said, it was pretty cathartic to be finally done with it; much like leaving a mediocre interpretative art house screening.

Lesson:
Test your UX by channelling the most impatient version of yourself.

5. The ghost of a previous render
Switch projects too fast, and the last video would keep showing — even after recording a new one.
Lesson:
Deallocate like you mean it. Ghosts hate clean memory.
🧠 Final Thoughts - Things I Broke So You Don't Have To, and why this matters
Debugging is part of the creative process.Every “oops” above made Muser Studio faster, clearer, and more stable.
And if one other dev avoids wasting two hours on the difference between ₩ and Kr., that’s a win.
Photo credit: Олег Мороз
Photo credit: Adrien Olichon
Photo credit: Spaced
Photo credit: Sora
댓글