I wish I had more of a break to reflect on the traumatic experience of getting kicked out of my startup before Bubble happened. Julius and Frank were looking for a technical founder for their startup less than three months after the previous breakup.
That made it a rushed decision to determine if I was done with startups because of this negative experience or if I wanted to give it another shot. Luckily, even under time pressure, I made the right call and decided to become Bubble’s third founder.
Bubble was a video reaction app that allowed you to create picture-in-picture reaction videos. It sounds like a carbon copy of Dub, and it’s close, but the core functionality worked a little differently.
Bubble lets you post a social media video to places like TikTok, where you see your face as a little reaction bubble on top of some content you’re discussing. The main content might be a video you took earlier, an image, or a website you’re scrolling through and highlighting in real time.
If you’ve ever used Loom on your computer, you know what I’m describing here. We wanted to become Loom for social media—Loom for your phone.
We teamed up with the talented designer Maddie Beard and started working on a great product. She created great designs, and the product turned out well. I also think that the technology component of the phone worked out perfectly. Combining multiple video assets with a circular cutout mask took ages, and Apple’s composition mutable video layering APIs don’t make this easy. Figuring out the preferred transformation, orientation, rotation, and inversion of the content took forever. I did ultimately get it to work. We even burned the circular video duration progress bar into the final output file, a nice touch.
The final result was a sleek, animated, branded video file that showed the background content, your face, and your bubble username. We also built a Reddit category system where you could find and post your Bubble videos, but that part wasn’t as successful.
The Big Mistake
The biggest lesson from Bubble was to be humble. If every entrepreneur and advisor out there tells you you shouldn’t try to boil the ocean, they are probably right. We were launching a tool for video creation. We were also launching a community to explore and share content. One of those by itself would’ve served us better than doing both at once.
We could’ve launched to a committed user base if we had segmented our product and market more narrowly. Building a new social network for new content teaches your users one too many things at a time. Plus, the cold start problem makes the app seem dead and unpopular. If you remove 90% of the bloat from the UI that tries to nudge people into posting content on-platform, it then permits them to use this new tool in whichever channels they’ve already built for themselves.
Imagine people posting Bubble videos to hundreds of thousands of followers on TikTok. That’s the best growth hack of all time. Build a tool creators love, and they’ll market for you. Build a new social network that nobody’s using, and it will surely turn into a defunct product in no time.
Product Wins
I had two unique product ideas while building Bubble, and I’ll use both in future products. The first one was the “Ask For Invite” button. Whenever a new social app launches, it’s a tried-and-tested growth hack that makes it seem unique and valuable by launching with an invite code system. Everyone gets ~ five codes when they sign up, and suddenly, making five friends use a new app changes from annoying and spammy to something limited and valuable.
Here’s where I had an excellent idea for this invite stage. We launched Bubble when the iOS contacts API was much more permissive. We were looking for a way to get people to sync their phone books with Bubble, just like Instagram and TikTok do. You should always clarify to the user what value they’re gaining by giving an app permissions. I had the idea to incentivize them to sync their contacts to access the app!
Imagine Bob signs up for Bubble with his phone number. He gets in at some point, gets five invites, and doesn’t use them sparingly. A week later, Alice downloads the app and needs an invite. A big button says, “Get an Invite from your Contacts,” after syncing her phone book, she finds out Bob is already on the app. We have Bob’s number from signing up, and we can connect Alice and Bob because Alice just synchronized her contacts.
Now, we can show Alice a list of her contacts on Bubble, including Bob. Moreover, we can tell her, “Bob has five invites,” and put a button next to his name that opens iMessage. A prefilled message says, “Hey, can I have one of your Bubble invites?” And now everyone wins. Alice is on the app and knows her friend is using it. Bob is incentivized to use the app again because he knows Alice is in, and the two have already had a conversation about the product.
The second product insight was much simpler compared to this stroke of genius. We wanted to give people a sense of control when signing up for our beta and make things fun and different. So, when signing up for the waitlist, we added a slider to the form. How do you like your early access app? Medium rare? Well done?
Depending on where you put the slider, we will give you a different estimate on when we’ll send you your invite code. And we warned you that the earlier version will have more bugs. I think it’s a great way to create a sense of control while making the whole experience more whimsical.
Tech Learnings
In addition to gaining experience with AVMutableVideoCompositionInstruction and other APIs of equally long names, Bubble gave me a deep understanding of performant video playback on iOS. It turns out that modern apps don’t just play mp4 video files by downloading them from the internet. Apps like TikTok use an optimized file format like m3u8 that plays HLS-packed video file snippets. Playback of this format downloads sections of a video at a time rather than loading the full mp4 at once. Tools like FFmpeg handle this packing process, and I built a media file processing server on Kubernetes to do this task for Bubble.
Once again, I was naive enough to think that I could build something myself that was already solved and optimized by plenty of SaaS solutions. Mux would’ve been the right choice here. While it is much more expensive than processing and hosting files in-house, that added cost will only matter once you determine if your product has a solid product-market fit.
When building a brand-new product, you should prioritize minimizing the time spent proofing product-market fit over reducing the cost per video recorded on your platform.