Post-Mortem: Pineapple

Thursday, September 12, 2024 by Nick

My work on Pineapple started as a contractor writing the iOS app. Over time, we talked more about my becoming a full-on co-founder. Even though my equity never vested and I left the project before becoming a shareholder, my work on Pineapple was substantial enough to include in this list. I think Jared would agree.

The Product

Pineapple is a way to have an honest face-to-face conversation with four strangers. It pairs you into a room with four other people to discuss topics and answer questions. There’s a feed of conversation starters, and as soon as you answer the question, your answer becomes a part of a group of five total strangers. Now, the five of you are on a journey to discuss and answer more questions together. All answers are recorded as selfie videos of you talking to the camera. It created a level of interaction and learning from strangers that is hard to come by in our world, which is more and more devoid of third places.

The Tech

When I joined the company, Pineapple used Kubernetes on Digital Ocean, Prisma, Mux, and Swift TCA. We stuck with all of them except TCA, and I think there were some wins and losses.

Digital Ocean is an Amazon EC2 wrapper with a more accessible UI. It always charges more than you would’ve paid for the same products on AWS. Kubernetes was and will always be an overcomplicated choice for a startup without product market fit. We spent so much time fixing our Nginx ingress in prod after an auto-update of a minor K8s version broke everything. It is a perfect example of what it feels like to run Kubernetes as a startup.

Mux was a great tool to use. Similarly to Bubble, Pineapple had a swipeable video feed with instant playback. Similar to Bubble, Pineapple used HLS packing to optimize playback. Contrary to my experience with FFmpeg, though, the person previously working on the Pineapple app elected to use Mux. Mux resulted in a smooth, fast, and pain-free developer experience on the front end. I think using Mux was a great experience, and I’d use it again for future video products in companies without proven product-market fit.

Prisma and GraphQL, in general, just never connected with my brain. How I think about APIs and databases is more straightforward than whatever level of abstraction GraphQL makes you work with, and I can’t help but be reminded of my first time using Firebase. You spend 5 minutes building the MVP, realize that every user has write access to the entire DB, and spend the next two weeks fixing the permissions and securing things. No, thank you.

I also started to phase out TCA as soon as I started working on the codebase because Swift’s ObservableObjects with the environment API are a much easier way of building reactive components for me. I swear, everyone who learned SwiftUI in 2019-2021 tried to force the old way they built apps into SwiftUI, using whatever framework they were used to. Rather than reading the documentation and seeing how to do things the SwiftUI way, people came up with the most overcomplicated architectures². Little by little, all those people realized they were ignoring the best and most well-integrated way of handling real-time data: The new architecture built right into the framework. Use environment objects. That’s my #1 advice for SwiftUI development.

The People

The story of my meeting Jared is still one of the funniest things to ever happen to me. In the summer of 2021, the adult content page OnlyFans announced it would ban all adult content from its site. An opportunistic friend¹ of mine and I saw a chance: OnlyFruits, a new brand for adult content that prides itself on only hosting the juiciest content.

Somewhere along the brainstorming process, we checked the availability for www.juicy.af, a surprisingly real domain hosted by Afghanistan’s great and free country. We saw it was already registered and forwarded to Pineapple.af, another denizen of the Afghan side of the World Wide Web. We sent a quick email to see if the holder of that domain, Jared Scheib, was willing to part with this forward-only hostname. That’s how I met the CEO of Pineapple AF PBC.

If it wasn’t obvious, all references to Afghanistan in the last section were sarcasm. The real value in the TLD .af lies in the true meaning of the abbreviation: as fuck. Jared calls himself Jared as fuck, and naturally, the company he founded was going to be called Pineapple as fuck. He’s not that serious of a guy if you couldn’t tell, and we had some great rapport over email.

As luck would have it, Jared was looking for an iOS engineer to help him build Pineapple, and I was looking for a new iOS app freelance project. The stars aligned, and while I was moving to Thailand for a year as a digital nomad, I worked about 40 hours a week on building Pineapple.

While working on this product, we all had great goals and ambitions but made critical mistakes. Not because anyone had bad intentions but because some lessons are difficult to learn. Jared needed someone to build an app that he had dreamt up in his head. An app that he had been working on for two years of his life before we met, and an app that he got investment for. I was at a point in my life where I was looking for ways to impact the world and create products that people use and love.

The two things don’t work together. Jared wanted someone to build his vision, and I wanted to create my vision. All the team-building and compatibility work we did together didn’t surface this fundamental misalignment. We worked to align vision, roles, and responsibilities but could not find this mismatch.

I repeatedly said that I was looking to build a product of my own and wanted to have a role in product management. Jared repeatedly said that he needed this product to remain consistent until it was shipped. And yet, we did not figure out this misalignment before working together for half a year. When someone asks, “Are you the person I need you to be?” It’s easier to say yes than no.

In hindsight, it didn’t work. The friction between my needing to express myself and feeling ownership of the Pineapple product made the collaboration very inefficient. Instead of just building what Jared asked of me, I tried to convince him to create something different—in subtle and non-obvious ways. I think I sabotaged the company without realizing or intending to do so.

Lessons

After School Night, this is now the second company I (co-)built where the lessons aren’t tech-based but human-based. And if you try to, you can find a common thread between the two. With School Night, my co-founder wasn’t honest about what he wanted from me. He didn’t want me to have a say in the product; he just wanted me to code the app he had dreamt up. With Pineapple, it’s the same core desire—to have someone silence their creativity, goals, and aspirations to build your vision.

Both Jared and my School Night co-founder wanted to silence my product aspirations, and both times, this led to failure—once because I got kicked out, once because I left. It’s easier to point out this common flaw than it is to learn from it.

I see myself as a team player. Building a product myself and turning it into a venture has never been as fulfilling to me as having a co-founder and someone you share the journey with. The balance is challenging to find. Most people searching for co-founders do so because they’re trying to make their visions work, not to forge a new vision together.

I’m not seeking a marketing or design person to build my vision. I’m looking for someone who shares my goals and who gives me great ideas and input on my ideas to shape something together. Unfortunately, my experience in this space has led me to believe that most founders are not looking for teammates. They are looking for workers to help them become kings.

A contract-work client has recently had this exact situation happen: A co-founder and team member messaging their investor with the demand to be CEO. The investors said: “Do you want to be rich, or do you want to be king?” The desire to be king is well and alive in many founders today. I don’t have a good radar for detecting it, and most people with these tendencies have learned to hide their desires to avoid alienating collaborators that can build their vision for them.

I don’t have any negative feelings towards Jared at all. In hindsight, most of this misalignment was my fault. I voiced my need for a product-based role to Jared, and when he said, “We can do that later, but that’s not what I need right now,” I did not listen. My lack of willingness to hear what Jared told me he needed made this collaboration fall apart. And because I ultimately didn’t want to do the work I got paid for, I left, and Pineapple failed.

Finding a co-founder is like finding a partner. Everyone who’s ever had a relationship knows that there are more relationships that end, than those that last forever. It’s the same with co-founders. Most co-founding relationships you enter won’t last. It will be more efficient to approach a new co-founding relationship with the mindset of actively looking for the reasons this will fail rather than to be optimistic by forcing a collaboration that’s doomed from the beginning.

Be pessimistic when looking for a co-founder. Trust the hunches of incompatibility. Don’t say, “We’ll work it out later. We shouldn’t worry about it now.” People have lost years of their lives because of that optimism.

¹: They asked to remain anonymous
²: I remember reading an article when I first read up on TCA. It was an engineer who wrote a book on MVVM in SwiftUI. It was either MVVM or another similar design pattern. After writing and publishing the book, they realized they were wrong and that the old pattern caused unnecessary bloat in SwiftUI. I can’t find that article anymore, but this post comes close.