i've been asked this three times in the past month so i'm just going to write it down properly.
i spent about 14 months building a data tool on evenings and weekends while keeping my full-time data scientist role. i did eventually go full-time on it. here's the framework i actually used, which is less romantic than most blog posts about this.
the financial floor, not the "runway" fantasy: most people think about "how many months of runway do i have saved." i think that's the wrong frame. the question is: what is the minimum monthly revenue that covers my non-negotiable bills, not my current lifestyle. for me that was $2,800/month. the project was at $1,100 MRR when i quit, which was still below that floor. so why did i quit?
the growth rate matters more than the current number: between month 8 and month 14 of building, the project went from $0 to $1,100 MRR. that's roughly 15-20% month-over-month, fairly consistently. extrapolating (carefully, not naively) put me at or above my floor within about 3 months of quitting. the job was actively preventing me from capitalizing on inbound interest because i couldn't respond fast enough or ship fast enough.
leading indicators over lagging ones: MRR is a lagging indicator. what i tracked more closely: number of free trial signups per week, conversion rate from free to paid, and whether paying customers were churning or expanding. all three were moving in the right direction for several months before i quit.
the job option value: my employer's product was in a space where being between jobs for 12-24 months would not meaningfully hurt my chances of returning to a similar role. a friend who is a senior ML engineer at a top lab had a very different calculation because that specific field rewards continuous employment more heavily.
what i'd say to someone at $500 MRR considering it: don't quit yet, but set a specific tripwire. for me it was "3 consecutive months of 15%+ MRR growth." having a concrete condition beats a vague "someday when it feels right."
not financial advice. not projecting my situation onto yours. just what i actually thought about.