Introducing Startup.py for B2B SaaS

Matt Wensing
4 min readFeb 16, 2016

--

An investor recently asked me how our financial projections would change if our sales cycle shifted to 12 months. As Riskpulse is solidly in the enterprise side of SaaS, this was a reasonable question. Trying to update all of my Excel spreadsheets to reflect this change, however, was going to be a royal pain. Excel macros aren’t my native tongue.

“What if your assumptions aren’t right? What will your future look like? What if things get better? What if they get worse?”

Hello, Old Friend

So naturally, I dusted off Sublime (I don’t practice Santeria …), summoned the Python muse, and began thinking of how I could write a program that writes spreadsheets. Aside from saving myself the time of creating the spreadsheets manually, this also promised the ability to incorporate many more variables … average contract values, close rates, pseudo-randomness …

… and why stop there? Why not just model the build-out of a go-to-market team? How many people am I going to need to hire so I can figure out how much cash I need to raise?

So, inspired by Tom Tunguz post on “The Fundamental Unit of SaaS Growth”, I wrote a script.

It’s a simple script, and it’s not beautiful (it was written in a weekend while watching the Food Network), but I love what it does for me.

In short, it outputs a .csv file detailing month-by-month spending, hiring, and sales results. Here’s a sample that uses assumptions that match an inside sales approach: model_output. I also created an Excel workbook to drop this raw output into (and help make it pretty): sample template.

Nuts & Bolts

As of this writing, the script allows you to set contract values, upsell rates, time to upsell (gestation), sales cycle length, account exec bandwidth, close rate, account exec ramp up period, lead gen (SDR appointments), CSM revenue ‘coverage’, along with compensation for each of these team members. (YMMV, but that’s a lot more than I could have figured out how to model in the white-washed prison with the warden from Seattle).

Once you’ve chosen the right values (or guesses) for your startup, you set an initial pipeline (# of active sales opportunities), time frame (in months), and a desired number of model runs. Hit Return, and the script spits out hundreds of rows of data on MRR, expenses, contract value growth, necessary sales hires, marketing spend, lead gen spend, and operating income.

Highlight the rows you want to chart in Excel, click ‘Line Chart’, and voila, the infamous J-curve, specific to your startup:

Revenue minus expenses for an inside sales model starting with 500 leads.

Again, you might be wondering: why are there so many lines on that line chart? Because randomness is better! Rather than providing a best-case, or worst-case, or I-don’t-even-know case, it’s better to see a range of outcomes! Realism! In this case I asked for 20.

TL;DR:

Here’s a summary of the results of 24 months of growth for an inside sales type of organization with $5,000 ACV’s and 50% close rates (wow, enviable!), starting with 500 SQL’s (sales qualified leads). The average startup (of the 20 simulated), the max, and the min. How many sales hires, new ARR … CAC, the works. Criss-crossing these results allows you to see a strong, average, and weak version of the future. This formatting can be found in the Excel template I link above.

This was ridiculously easy! Raising the $1,000,000 … may be harder.

Beyond the time savings, my hope is that this program allows founders to focus discussions on whether or not their assumptions are correct and well-founded, rather than on whether their forecast is overly rosy or poorly constructed.

Less time re-inventing wheels … more time building our dreams.

Future Improvements

I’m aware that the ramp-up period is currently not implemented, and the SDR appointments per month and AE bandwidth variables appear overly sensitive due to the way that account execs grab opportunities from the pipeline (or don’t). v1 ain’t perfect.

But where could this really go? Well, this v1 is only modeling a single sales channel. This hypothetical startup only has 1 — which is sort of good enough since most are lucky to have 1 that works. But in a successful case, and at maturity, multiple channels will begin to work, and this script doesn’t cover that scenario. But it easily could with a little more OOP.

Beyond the functional value, I see this script as the beginning of what could be a codified knowledge base for SaaS founders. If we can store intelligent defaults or rules of thumb in code … why shouldn’t we? My hope is that this can educate: “Oh! It simply doesn’t WORK to have 12 month sales cycles that earn you $5,000 with a sales person making $100,000 per year!” Right. That kind of thing. Those very expensive mistakes and experiments that mathematically were never going to work. Good to see certain death in a line chart before you try it.

May this be the start of a toolbox that helps founders spend less time reinventing wheels through trial and error, and more time building our dreams.

--

--

Matt Wensing

Founder, Summit. Believer in sustainable software businesses.