Base Case

Blog

YC S23: Building with the batch

Sep 7th, 2023
Alana Goyal
5 min
Back

It’s YC S23 Demo Day, which means it’s launch day here at basecase. Every batch, we build an open-source project using whichever developer tools from the cohort we can get our hands on. Today, I’m excited to share what we’ve been working on.

Rebase is an open-source email platform purpose-built for sending investor updates. As a founder, I send monthly update emails to my investors to share what I've been up to using a product called Cabal. I’m a huge fan of their product, so I wanted to try to build my own from scratch.

To build it, I used the following companies from the YC S23 batch:

  • Codestory is an AI-powered mod of VS Code. I used their beta bot to generate PR descriptions.
  • Continue is an open-source chatGPT VS Code extension. I used it to get AI assistance while coding.
  • Quack is an AI companion for developer onboarding. I used it to scope contributions.
  • Recipe is an open-source alternative to Postman. I used it to test API requests to Resend.
  • Sweep is an AI junior developer. I used the bot for a few small tasks, including the banner that links to this post.
  • Tiptap is a WYSIWYG editor component. I used it for the email drafter.
  • Tremor is a React library for dashboards. I used it for the table components
  • Watto is a PM Copilot that generates specs and user stories. I used it for planning.

The rest of the stack includes Resend1, Supabase2, Next.js, Vercel, & shadcn/ui.

Working to integrate so many different tools into a single project was definitely a challenge, but allowed me to reflect on what makes certain products really special. In the remainder of this post, I'll share some of my observations and a few suggestions for other founders building AI products and developer tools.

Meet users where they are

Developer tools and AI products often require a deep understanding of the context in which they operate to be effective. One way to speed up adoption is to meet users where they are and build touch points into existing products and workflows. For developer tools, this could mean building a VS Code extension, GitHub plugin, or CLI. Over time, you'll likely want to expand your surface area. Copilot, for example, did this well by starting out in VS Code and quickly shipping support for other IDEs over time. Of course, there are counterexamples to this, like ChatGPT. But as they say, "the exception proves the rule".

Codestory illustrates this concept well. Although their main product is a mod of VS Code, which indeed requires developers to ditch their existing environment, they also offers a lightweight bot that integrates with GitHub to autosummarize pull requests. This serves as a great, lower-touch entry point to their main product.

Leverage existing habits

Developers have certain habits – like ⌘. to jump to a quick fix in VS Code or j/k to navigate vim – that can be extremely hard to break. Rather than fighting an uphill battle, developer tools can instead try to use certain habits to their advantage. Great developer tools do this by latching onto existing workflows to jump-start adoption and gradually introducing new behavior over time.

Continue, for example, is a VS Code extension that brings the power of ChatGPT to your IDE. One of my favorite parts of their product is their use of the ⌘. shortcut in VS Code, which brings up the “Ask Continue” option in the “Quick Fix” menu. By leveraging this already-ingrained workflow, it makes it that much easier for developers to adopt.

Avoid unnecessary abstractions

Abstractions can simplify a lot for developers, but the wrong ones can be worse than no abstraction at all. With UI in particular, it’s hard to build an API or library that gives developers the freedom to build exactly what they need. When working with new tools, I usually prefer those that favor composability. On a recent episode of the No Priors Pod, Guillermo Rauch said it well: “copy and paste is always better than the wrong abstraction.”

While not a YC company, shadcn/ui is the best example of this point. It’s famously NOT a component library, but a collection of reusable components that you can copy and paste into your code. I think more developer tools should follow suit, especially now that Copilot can help you follow patterns in others’ code and tidy things up over time.

Use examples to set expectations

Given the non-deterministic nature of AI products, users often struggle to know what is possible or what to expect. For that reason, it’s incredibly important to clearly convey your product's capabilities and use cases up front. Nothing builds intuition like specific examples, so pick a few use cases that showcase what is possible and include them in your documentation.

Tiptap a suite of open-source content editing and real-time collaboration tools for building Notion-like applications. They have a live example of their collaborative editor embedded right on their website. Similarly, Sweep has a fun “resume” of example issues that its AI junior developer has solved to help users understand the types of tasks it can reliably complete.

Build feedback loops into the product

It's no surprise that AI products don’t always produce perfect results, but the best ones use that to their advantage by productizing feedback loops. Product that let users steer the underlying models by providing additional text (or even just ratings) tend to produce much better outcomes. If you’re building a business around AI, you can even capture and learn from these feedback loops to train better models.

Sweep, for example, is an AI junior developer that transforms bug reports and feature requests into code changes. One of the most magical parts of the product is that you can give the bot feedback directly in the pull request, just like you would give to a real developer who is submitting a pull request.

Closing thoughts

This is my second time doing this exercise, and I'm already looking forward to the next YC batch so I can do it again. Each time, I'm reminded how difficult it is to build an amazing product in such little time. I have so much respect and admiration for all of the current, past, and future YC founders out there.

Reflecting on this experience, one of my regrets is that I wasn't able to include all of the companies I found interesting. Some of the enterprise-oriented products like Humanlike3, PeerDB, and Telophase are super cool, but didn't quite fit with this project. I also really enjoyed experimenting with Can of Soup as a consumer.

In the YC spirit of launching early and often, there are a lot of features we cut in order to ship something by Demo Day. In future versions, we’re eager to make some improvements to email drafting to allow users to copy & paste in gifs or images, add analytics to allow users to see who has opened their emails and how many times, and make it easier for users to verify their own domains. It’s fully open-source, so feel free to contribute to help us add these features and more.

Big thanks to Mathurah Ravigulan, Hassan El Mghari, Jon Meyers, and shadcn for their help on the project and Ankur Goyal for feedback on this post.

Footnotes

  1. I'm an investor in Resend

  2. I'm an investor in Supabase

  3. I'm an investor in Humanlike