MRR and Monte Carlo

tl;dr: The Monthly Recurring Revenue (MRR) model is a marketing model that examines a customer as a stream of recurring revenue instead of a single transaction. Its use has been popularized by Software as a Service (SaaS) firms and their ‘freemium’ models that encourage users to subscribe to extra features. I set out to formalize a predictive framework for this model (and hopefully teach myself a couple new languages along the way) in order to create a single “living” business plan using the Monte Carlo method and a fictional business: “Ties as a Service”.

I know most of you were expecting a Bitcoin related update, but I like to keep things unpredictable (and I love learning new stuff). I also know its been a while since I last posted, but I’ve been busy graduating and such, which is why this project took a little longer than I’d have liked. Anyway, this time we’ll be talking about MRR, SaaS, and R, LaTeX, and the magical power of free time. Click here to skip directly to the cases.

I. Overview

This project was interesting, in that it represents the most amount I’ve learnt for a single work so far. It is also interesting, in that it was still did not achieve what I wanted from it. 

At the start of this project, I wasn’t even fully aware of what R and LaTeX were, and by the end I had created a single file that was capable of running a Monte Carlo simulation, redrawing new graphs that change with randomly simulated data, and printing it all out in pretty pdfs with adaptable formatting. I also wanted to use it to learn about the Software as a Service (SaaS) business model and the Monthly Recurring Revenue (MRR) model in order to hopefully improve my odds of getting a job doing that kind of work, and bringing more rigorous data-centric techniques to marketing analysis.

I succeeded in building my living business plan and learning a new model, but I failed to get a job at the company I wanted to impress. Apparently I still have more to learn. 

II. Cases

Here is the report I built. This time however, there’s a difference; since I set out to generate a reproducible document, I was capable of generating 3 different versions of this paper, each with their own dataset, graphs, and values. Each deals with a different scenario: ‘Best’, ‘Neutral’, and ‘Worst’, whose behavior is described in the captions. These are only test cases where the random vectors are changed, but it is designed to illustrate how I could theoretically simulate any situation possible in the framework of this model. In essence, it is a ‘living’ document, which is capable of changing to visualize new information and alternative cases.

This report also includes a rough formalization of the MRR model’s function family, my application of the Monte Carlo Method using roughly 5000 iid ‘customer’ samples, and graphs of Cohort-based Analysis, as well as other analysis and commentary. If you would like to take a look and the links are down for whatever reason, feel free to message me with one of the social links up top.

Best Case


Low Churn (2%) , High Growth (7%), Low Volatility (2%), $30 Subscription, 45% Margin, 60 Initial Customers

Neutral Case


Moderate Churn (5%), Moderate Growth (5%), Moderate Volatility (5%), $25 Subscription, 42% Margin, 50 Initial Customers

Worst Case

High Churn (6%), Low Growth (3%), High Volatility (7%), $20 Subscription, 40% Margin, 40 Initial Customers

III. Background

This project took roughly 4 months to complete, with around a month spent on getting acquainted with the concepts and  a few more coding and debugging what I needed express, while passing final exams, and partying before, during, and after graduation.

Finance AND Marketing. Because why not.


I graduated with double specialization in Finance and Marketing and a minor in Economics from the Sauder School of Business at UBC on May 28th 2014. It was a pretty ceremony. I wasn’t terribly fond of the little square hat.

For the sake of Future Me, I’ve recorded how this project actually went, in the form of a timeline. Click here to skip to the actual report I built with all the real stuff I’ve made; this is literally just just a description of my process and realizations for my own notes. It has no relevance to anyone but myself, and all views and opinions herein are completely my own. Last chance to jump ahead. No? Alright, suit yourself;

  • February, 2014: I meet Mr. Underell from Hootsuite, through Elaiza, a friend of mine who went to highschool with me in Ghana (and also UBC, oddly enough). I wanted to learn more about the local tech industry, and what the best practices were, so we ended up talking about a variety of topics. One of the ones that came up was the MRR model of SaaS firms, as described by David Kwok, a model I had no experience with at the time, but reminded me a lot of NPV analysis.
  • March, 2014: In an effort to understand Mr. Kwok’s work, I made a series of flashcards on Quizlet  to get better acquainted with the terminology. It isn’t finished, but it gave me enough of a working knowledge to grasp the model, and, more importantly, see what I needed to simulate it. I decided at this point that I was going to build my ship in a bottle, and use it to prove how well I understood, but I still wasnt’t sure how I wanted to do it. I also fail a phone interview with Hootsuite for the first time, but for a position I was definitely not a good fit for.
  • April, 2014: Mr. Underell introduced me Mr. Zahid,  who was also willing to discuss various industry practices and the MRR Model. He directed me to yet more resources, such as Jerky as a Service, and was interested in seeing what I could do with it. I decide my model will be a variant of this idea; My friend Scott gives me the name ‘Ties as a Service’. I also meet Dustin Johnson, a classmate of mine at Sauder who introduces me to R for the first time. At the time, it did not seem like a significant deviation from Matlab, but I see now that its open source nature, huge package support, and interesting syntax offer it a unique flexibility. He also acquaints me with LaTeX, which I had used previously, but never to this effect. I decide to code this project in R, in order to kill two birds with one stone and learn a language and a concept simultaneously. I also have my last final exams, which is has a deceiving finality to it; I don’t think this’ll be the last time I’ll have to pass an exam, but it does feel nice to seem done.
  • May, 2014: I finished learning the basics of R (swirl() was especially helpful), and begin work coding and formatting the official paper in LaTeX. I also become fascinated by the idea of ‘Reproducible Research‘, which is an idea from the sciences that allows one to reproduce a work using as few dependencies as possible. My next goal was to apply this idea to the project, and go even further, and create a single ‘living’ report that I could generate on the fly as necessary, and adapt to different conditions; a reproducible business report. I also graduated, and proceed to celebrate thoroughly for a few blurry weeks.
  • June, 2014: The project was finally reasonably complete; after a series of drafts and numerous syntax errors. I compiled the three final cases over 2 hours. Confident that I now grasped this idea, I applied to the Online Monetization Strategist at Hootsuite, a position that required 3 years of experience, assuming that now that I could handle this model, I could learn whatever else they needed me to learn. In retrospect, I see now that I depended too hard on such a risky bet, but I’ve also learnt so much more risking things than taking no risks at all. Besides, I was taught how to treat risk and reward as the same thing.
  • July, 2014: After some coaching from Mr. Underell, with whom none of this would have even been possible, I make it through the phone interview this time. My friend Kevin gives me a ride to an in-person interview with Ms. Freman and Ms. Davidson. I didn’t think I’d be so nervous. The project was briefly acknowledged, but it was difficult to explain its applications. As we moved on, I realized I still had a lot to learn about what tools were actually used in the field (like how to use A/B testing campaigns to find what features paying customers would prefer), and that I was still very ‘green’. I learnt more during this interview process than I had learnt during any interview process, but the real lesson was that even though I’ve graduated, I still had much, much more to learn. Proving you can learn is one thing, but asking someone to trust you to learn everything you need to do a job is entirely another. I have yet to find a viable solution to the problem of getting experience without having experience, but at least I know what kind of experience I need now.
  • August, 2014I made it to level 2 of a 4 level interviewing process, but I wasn’t asked to move level 3, and I understand; frankly, if I were them, I wouldn’t have hired the guy in that interview either. I decided to update the blog post and record my results, in an effort to learn from this adventure. With my recently acquired knowledge, I hopefully won’t be this naive again in the future. 

That is not to say I regret this project. On the contrary, this project is one of the most fun and creative things I’ve ever done, and this period of post graduation has definitely been one of the most amusing times in my life so far. College is an interesting period, and as it draws to close, this little project is as much a part of my ‘Halcyon’ adventures as anything else I’ve done during this summer, and it also would not have been possible without the inspiration of all these people, and the examples and work of many others.

Its unfortunate that my little plan involving Hootsuite didn’t pan out, but I’m starting to think life just isn’t meant to be linear. I’ve learnt so much more making mistakes than I would have just being handed the job I thought I wanted, and to be perfectly honest, I’m still not sure I would’ve been a good fit for it. I was just so sure my work was enough proof that I was worth hiring, I just wasn’t practical about what I was actually being hired for and why. That somehow building this ship in a bottle proved that I would’ve been good at everything else because I learn quick. Such an assumption is simply not viable when real money and real professionals are involved.

This project did prove I am capable of learning new ideas and technologies very quickly when I need to, and capable of producing complex work using a combination of assumptions and examples refined over time. However, it also proved that a solution without a problem is not a solution at all, but just an exercise in design and decoration. In my desire to program something elegant, the businessman in me slipped, and I lost sight of it’s purpose.

I realize now that no matter what I build, I must never lose sight of the what makes a work truly useful; applicability. Hopefully Future Me will not make this mistake again; it is not productive to be creative without context.

messy messy messy

My RStudio environment.

IV. Conclusions

So, why did I do all this? Well, I suppose there are basically 2 reasons:


“The first step to getting really good at something is sucking at it.”

  1. To see if I could.
  2. See #1.

I like learning new stuff, and I like challenging myself. Now that I’ve graduated, I may not have time to keep doing this sort of work. Finding a position that allows you to work with math and be creative is easier said than done, especially when you’re just starting out. People have a fondness for the traditional, and if my experience at Hootsuite (or lack thereof) has taught me anything, it’s that I’m still learning every day.

In any case, I did this project to add my portfolio, and prove that I am capable of generating these sort of models in a myriad of environments for a variety of purposes. It’s even opened the door to a little freelancing, which is an option I hadn’t even considered initially. Unfortunately, I can’t publish what I’m working on for clients, but hopefully in the future, I’ll get a chance to work on another big personal project again. Hopefully the next one will have more immediate usefulness.

I think I’ve got the urge to give Machine Learning another run; see if I can’t design something a little more applicable. Perhaps something that lets us determine what features a user might want based on what features a user already has; a generic consumer decision model I can wrap around different journeys, independent of product and featureset. Maybe I might even give cryptocurrencies another look; there’s some interesting stuff developing in the Ethereum world.  I can’t wait to get started on the next big thing.

For the next little bit though, I’m going to enjoy this last ‘college’ summer, party with the people I probably won’t see again for a long, long time, and see what else I can do. Oh, and get a job and start doing grown up things.


Particle Fever is a great documentary. It's also on Netflix. Just saying.

“Jumping from failure to failure with undiminished enthusiasm is the key to success.” – Savas Dimopoulos


V. Reflections

From one angle, I did manage to complete my goal of building a ‘living’ business plan. From another angle though, it seems I may have actually built something more like this:

A ship in a bottle. A quintessential example of painstaking precision and dedication, but also an example of arguably directionless hobby-work. An ‘impressive’ object that has little immediate value or purpose to anyone else but the man who put it together.

I learnt more doing this project than I have learnt so far doing any project, but the real lesson I’ve learnt is that one question is far important than all the others, and it must never be forgotten in the hunt for creativity:

What purpose does it serve?

My glass ships may still be a little simple and purposeless right now, but with a little more practice and a few more years at this, I think I could make something a little more like this:

That’s when the real fun starts.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s