3.5 Years, 12 Hard Pivots, Still Not Dead

Published on
November 2nd, 2024
Category
Opinions
Share On

At the YC Alumni reunion, a few founders were surprised by the seeming randomness of our pivots. Here’s how my cofounder, Aaron Villalpando, and I navigated 12 hard pivots without hating each other.

Our (current) 12th pivot is making BAML, a new programming language for using LLMs. We are still working on finding PMF, but for the first time in 3.5 years, we have a growing user-base that actually loves us.

1.5 years of half-assing it

The general theme of this entire timeframe can be summarized by us using our $$$ jobs as a safety net and attempting to throw spaghetti at the wall hoping it would stick. We were looking for signal BEFORE we committed.

Ideas we pursued:

  • 6 months - An online coding bootcamp with Income-share-Agreements. Motivated by wanting to make the world a better place. 15 users, but I pivoted cause no one would pay.
  • 6 months - Interactive Twitch ads (demo). Motivated by making $$ on ads and Aaron being a YouTuber in some past life. We had 0 users, did a lot of outbound and got 1 larger League of Legends streamer to want to use us. We pivoted after our W22 YC interview ended in 6 minutes… Michael Seibel (a YC partner and co-founder of Twitch) straight up asked “Do you guys even watch twitch?” Spoiler alert, we did not. I swear I’m still haunted by that question.
  • 🎮 6 weeks - SDK to build massive multiplayer games. Motivated by games like Among Us + the idea of streamers and their audiences interacting more. We had 1 streamer try us out, but pivoted because neither of us really play games (noticing a pattern?). The last week was when Aaron quit his job @ Amazon.
  • 💸 4 weeks - Let fans buy a creators’ future earnings. We felt an edge given Aaron’s prior youtube background, but pivoted because we couldn’t make it happen. The economic incentives were very hard to realize.
  • 📝 3 weeks - Employee engagement surveys — Motivated by making teams happier / increasing retention. For this idea we spoke to a few VPs of HR and got 0 users. We pivoted because Aaron asked “Did I really quit my job to make Amazon Connections?” (The internal tool everyone hates that does exactly this)

What went wrong:

  • Moved the goalposts constantly. We cut ourselves slack and just said “we’ll make it work in 6 months”.
  • Afraid to charge users. That wasted a lot of time in finding high quality signal.
  • Worked on things we didn’t care about

What went right:

  • We learned to pivot faster.
  • We built trust: Equity was our first hard conversation. Aaron’s perspective, he was quitting regardless of me. He just didn’t want to do 2 jobs at once. My perspective was that Aaron might feel he owns more of the company, and I wasn’t going to feel good without an even equity split. Also, in all honesty, I wasn’t ready. I loved my job, and I had a great life at the time. Was I really ready to stop all of that? We resolved it by me putting $4k monthly into a co-owned bank account until I went full time. 50-50 on everything.

Entering YC with a bad idea

We spent 11 months building Gloo, a voice-first Slack/Discord competitor. We loved using Gloo so much, we each logged over 1,000 hours of calls (thats 22 hours / week!). In hindsight, (1) we lacked founder-market fit and (2) it wasn’t a problem people cared about.

Our journey with Gloo:

  • The Start: April 2022 - We hated how remote teams worked. No one was friends. Everything was transactional. There was one easy solution: just have people talk to each other more — hence Gloo was born. Around this time, I finally quit my job. Aaron had been full-time for 4 months.
  • Entering YC W23: Aug 2022 - Our first MRR: KaTeX parse error: Unexpected character: '�' at position 45: …ent of my life �̲�🚀. “We are fi…^2$ directly told us to pivot - he had seen over 10 companies in this exact space and they all fell flat. We politely declined. He suggested we talk to Tandem (YC19) and we nodded but didn’t actually do it - “They’re competitors!” we thought.
  • The End (February 10, 2023): We finally called Rajiv Ayyangar (Co-founder of Tandem, current CEO of Product Hunt). They hadn’t found a venture-scale market despite raising $7.5M from a16z and having tens of thousands of users over five years (See Rajiv’s twitter thread). Suddenly, our 400 churned users weren’t just “product feedback” but clear signals it wasn’t working. Only four people loved Gloo: Aaron, me, and the team of 2 paying us $16 MRR. That Friday night was devastating 😭 — our conviction crumbled.

Some reflections on what went right and wrong:

  • Dogfooding blinded us: Using our product daily was exhilarating but created an echo chamber, ignoring negative signals
  • "Why are you guys making UIs?" Dalton ask us during office hours. Aaron spent over 7 years building out core parts of EC2 and I spend 7 years writing ML algorithms in assembly… we had literally the worst possible founder market fit for anything which depended on UX.
  • We built things. Instead of talking about ideas hypothetically, we just wrote code. This helped us navigate the sentiment of feeling “stuck”.
  • I can’t stress this enough: caring about a problem is not enough to win.

Pivot Hell before YC Demo Day

We attempted ideas quickly and looked to invalidate them for any reason that didn’t excite us. The only thing that kept us going was truly enjoying working together. We had so much fun working on Gloo. We’d joke around, solve seemingly impossible problems, talk about world domination. Just need that idea again…

Ideas we pursued:

  • 🗝️ 1 week - Clerk for API Keys: The GTM was demotivating for us. We’d have to get every startup to use us, then hope that they’d continue when they got big enough.
  • 🍔 2 weeks - AI Powered Drive-thrus: I remember driving to every TacoBell, Wendy’s, Burger King, trying to convince store managers to use us while Aaron built like crazy. But it was the wrong fit for us:
  • 🤡 1 day - Gloo: Voice-chat app with an AI Personal Assistant - Aaron shut that shit down. I was just trying to go back to a topic of comfort. Hard pivot meant hard pivot.
  • (We raised off of this idea) 3 months - Custom Embeddings: We knew embeddings had broad applications—RAG, classification, extraction, search. Everything in ML was embeddings. We signed our first $300 MRR (Thanks @Yuma AI - surpassing our total revenue with Gloo?!). We grew to over $5K MRR (Shout out @Haven@Layup, and a few more) and thought maybe we were done pivoting… Oh boy…

Walking away from $15k MRR

Despite growing revenue, we felt uneasy. We couldn’t see a scalable technical solution for generating custom embeddings. Customers had poor data and couldn’t define success (e.g., “What makes a search result good or bad?”). That sentiment was drawn to a hard decision when we ended up deciding to turn down a $15k MRR contract for semantic search because it didn’t feel right. It felt more like consulting than product.

However, we found a silver lining in classification and extraction. Narrower LLM use-cases seemed more tractable from a product perspective. A front-page Hacker News post brought in 500+ inbounds, and we signed a few more paying customers. Yet, every SDK we wrote felt clunky. Every existing library (Langchain, LlamaIndex, Marvin, Instructor) had the same problem. They worked for prototypes but lacked essentials like type safety or easy ways to control (or even see) the entire prompt.

BAML: Lets make a programming language? 🤔

I remember the Thursday night (Aug 10, 2023) very clearly. We were starting to burn out again. I dropped by Aaron’s place at like 9 pm, and while sitting on the couch said :

dude… this library we made f—ing blows.

We laughed and joking spent the night sketching a new hypothetical syntax out. Who in their right mind would actually make a new language? By Sunday night, we wrote a compiler in C++ and by Monday we started migrating our existing customers over from our library. (We did all of that work).

This was slightly harder than we imagined. A month in, one customer asked us “Can we just stick to Python?” That evening Aaron and I went on a three-hour walk arguing if we should pivot. We had theories about why a new language for LLMs made sense (after all, JSX, Prisma, Terraform and CUDA must have some justification), but our customers weren’t happy. In fact, I’m pretty sure the only thing they liked about our company was us.

Lets briefly review the minimum set of things you need to make a new language usable:

  • A syntax you can understand
  • A compiler
  • A compiler with error messages that you can understand
  • Syntax highlighting
  • Jump to definition / On hover effects
  • Linter
  • Supporting every LLM, today and forever
  • Not break version to version
  • Copilot/Cursor needs to understand it

Our syntax was barely understandable, and we lacked all of these features.

Imagine being our customer back then and writing a new language without any syntax highlighting or autocomplete…).

I’m not sure why we didn’t pivot that evening — signal was nonexistent, but the theory felt so solid. We decided to give ourselves until the end of the year — timeboxed delusion. Three months of building later, we learned from our customers and built more of those essentials. We finally started seeing a shift in how our customers felt.

We added ~10 more customers by March (shout out to @GovEagle@Coldreach@MagnaPlay, and many more!). We redesigned the syntax to make it more beginner friendly — migrating existing customers and somehow maintaining all of them.

We were starting to see an interesting pattern: once someone used BAML, they never used anything else; Instead they asked “can BAML do ____?” We added evals, support for every LLM, retries, fallbacks. The biggest breakthrough came when we made BAML work with every existing programming language with less than 1 minute of installation (Python, Typescript, Java, Go, Ruby, C++, Haskel, etc.).

One of the funniest quotes was David from @VetRec, alluding to us having more users: “Thank god, that means you won’t pivot. I don’t want to fork and maintain BAML.”

What’s next?

One of my favorite moments at the YC Reunion this year was running into random folks using BAML that I had never met:

"Are you the BAML guy? I was just coding up BAML on my flight last night." — Alexander Hopper

We still have a long way to go with BAML, but at least we’re done pivoting (for now🤞). Next, onwards to 1000 Weekly Active BAML devs!

If your curious about BAML, here’s a Youtube video sharing what it feels like to code in BAML: https://www.youtube.com/watch?v=XwT7MhT_BEY

Docs: https://docs.boundaryml.com

Repo (if you wanna make your own language): github.com/boundaryml/baml

Vaibhav Gupta is the co-founder of BoundaryML, an expressive language for structured text generation.

Comments (2)
Marek Foss
Success is hard and I really applaud people with determination 👍
Share
Mert Gul
Great article Vaibhav! I am quite interested in BAML as an LLM engineer. I'll definitely play with it and provide my feedback in your Discord channel. Wish you the best!