Speedrunning a Startup for YC's Challenge
Three days ago YC (famous startup incubator) called us all out (opens in a new tab)
They posted to HN that there's another chance to apply late to YC this year - and get a fast decision.
The deadline was 3 days away. So I needed to build a startup in 3 days. Here's how it went.
Parkinson's Law
Parkinson's law states that work expands to fill the time available for its completion. I certainly found the sheer necessity of a 3 day turnaround led to insane productivity.
So here's some advice: look for an artificial deadline outside of your control (this was one example). It will get you to do your best work. Trust me.
Build Something People Want
The easiest way to do this is to build something you yourself want.
I have a lot of ideas. But I had to pick something that I could build in 3 days. So I turned to an every-day frustration: constantly having to tab out of Visual Studio Code to Postman to trigger my Express endpoints.
💡Idea part 1: instantly re-run recent requests
What if I could add a "re-run" button directly next to the endpoints themselves? When clicked - this would let me instantly choose recent requests to replay.
Sounds good. No time to think too deeply. By the end of day 1 I had a prototype:
How it works: you add an Express middleware. If the NODE_ENV
is development it will record the requests to a local DB. Then the VSC extension lets you replay them.
Build Something People Might Actually Pay For?
I like this prototype! It really speeds up backend dev work. In particular it's great for debugging webhooks/complex requests.
It reminded me of the first time I setup hot-module-reloading. It's so useful to stay in flow.
The problem: this should obviously be free. I doubt YC will be impressed by a cool free tool. There's 2 days left. I need a complementary service I can add.
💡Idea part 2: instantly re-run production requests on localhost
Re-running requests instantly during dev is great. But what about when you're debugging a production issue?
In my past 2 startup attempts, this was a major pain. It's like 50 mins trying to replicate the issue, and just 10 mins of solving it once I can step through it with a debugger attached.
So I decided my complementary service would be the option to instantly re-run production requests on localhost.
Magic Links
My favorite startup speaker is Des Traynor - co-founder of Intercom. He says this thing about where your startup starts and ends.
I'm paraphrasing but the idea is: most apps have some idea of "contacts". So most founders ate tempted to build a bad CRM system into their app. Or a bad email marketing system, support tool, etc. But you should instead just be great at one thing & work out how to fit into people's existing workflows.
Here the temptation is to build some observability view to show the requests. But people already have that. So I decided to add magic links to people's production logs.
Find a link in the logs & click to re-run that request locally. For example:
Error: x is undefined. To re-run this locally: https://go.getrerun.com/random-guid-here
I like this. Perhaps without the ridiculous time-limit I'd have built something less elegant. The time pressure forced me to find a simple user-experience.
It's easy for the user. They just click the link and it repeats that exact request locally in Visual Studio Code.
And it's easy for me to build. I had time to do a prototype by the end of day 2.
Docs. Website. Co-founder...
YC doesn't like solo founders. So to maximize chances I need to recruit a co-founder. Luckily I have a good friend and amazing dev who has worked with me for years.
So I ping her on WhatsApp. I can't name her yet. But I am happy to say that if we get into YC, she will be joining me as co-founder. Awesome! Weirdly the idea of having her as a co-founder makes this seem more real & less intimidating.
OK. Last day. I need docs and I need a website. No time for my usual over-thinking perfectionist tendencies.
Docs: in the interest of speed I looked at Vercel's templates. Nextra looks good. Cloned it locally - feels good. I record a little video of the extension in action, and build a few pages.
Logo: I am not a designer. This is a Visual Studio Code extension. So I look at the VSC icon set. There's a re-run icon. I try a few variations. Again - no time for my usual indecision. I made the logo green to match the color of the "run" button in VSC.
Website: I use Next and Tailwind to build something pretty basic. OK this clearly needs more work but I get something deployed. (I can sort it later). Slight issue connecting the domain. Turns out if you use Cloudflare and Vercel you need to change the SSL mode.
Validate with users
There's no time. The application is due in a few hours.
If I can get even one person to email me (sam [at] demotime.com) and say they're interested it will help our application.
As a total hail-mary I am posting this article to HN. Genuinely not expecting much but it can't hurt. And like I say it only takes one.
No time to make a blog. So I add a "blog" section to the docs nav and hope nobody cares about the layout. (Nextra template does have a blog version too but there's no time).
Build the backend
I start building the backend app. I've been looking for an excuse to try T3 stack.
I've never used prisma or TRPC before. It's really nice. I recommend this stack so far. I build auth, DB schema, some endpoints.
Oh no, side-quests!
Real life (my first company) is determined to get in the way. Maybe I won't have a full end-to-end demo by the end of the day.
I decide it's not the end of the world if people can't manage shared request libraries yet. I can add that later. Hopefully the magic-links and re-run button are enough to show YC the idea.
Release all the things?
I've written the Express middleware & the VSC extension. But I haven't published them just yet.
While it's fun to speedrun, I need to test before I encourage people to deploy to prod. So I've decided to use demo videos for YC and run a private beta before publishing the extension & middleware properly.
Interested in becoming a user? Email me: sam [at] demotime.com
It's available for NodeJS (Express) already. But it's trivial to port to other frameworks/languages. I'll prioritize whatever people ask for. Email me (or raise a PR/issue on GitHub once I tidy up and make the repo public.)
Have a long list of unreasonable "I would use this if" requests? See above. :)