« Beeminder home

Beeminder Blog

brass scales with bees

You know how a lot of services offer things like one month free if you pay yearly? We were nerding out over the math of that and thought, why not generalize to compute the perfectly fair discount for paying at any frequency you like, including every infinity years, i.e., paying once for a lifetime subscription? Just pick a discount rate and do the net present value calculation to get the amount to charge at your chosen frequency so that it’s equivalent to paying monthly. Before we lose all but the hardest core math and finance nerds, just try it. There’s a nifty slider!

[UPDATE: We made lifetime plans more of a special case — they use a ~1% monthly discount rate instead of 3% monthly discount rate. We’ve intentionally made them more expensive because they’re more expensive for us to maintain.]

[FURTHER UPDATE: We’ve stopped selling lifetime plans which is kind of a shame mathematically but extremely correct businessally.]

To compute the discount we’re going with a 3% monthly (36% annualized) discount rate. If you work out the discount rate such that “one month free if you pay yearly” is fair, it’s 19% annualized. [1] We decided to go higher in part because we expect higher attrition with our unusually generous auto-canceling subscriptions. Trello, on the other hand, recently launched Trello Business Class at $25/month or $200/year. You’ll notice that \(\$25 \times 12 = \$300\) so that’s quite a discount for paying yearly — equivalent to a 97% annualized discount rate.

Of course you’re not really pricing the discount based on the time-value of money [2] but rather your expected churn rate. We heard that 3% attrition per month was common so that’s the other reason we thought we’d start with that. (Note the self-selection bias there though — those opting to pay for a year or more at a time are less likely to be the ones churning.)

The Math

If the nominal monthly fee is \(\$m\) and we pick a monthly discount rate \(r\) (e.g., 2% = 24% annualized) and you want to pay every \(n\) months instead of every month then the perfectly fair amount to charge every \(n\) months (starting with right now, of course) is: $$m\frac{\exp(r)-\exp(r-n\cdot r)}{\exp(r)-1}$$

For the cost of a lifetime subscription, take the limit as \(n\) goes to infinity: $$\frac{m e^r}{e^r - 1}$$

In finance-speak, that’s the net present value of the annuity of \(n\) monthly payments at the nominal monthly rate, \(m\). For example, with \(m=20\), \(r=.02\), and \(n=12\) you get $215.51 as the yearly cost. So that’s slightly better than “one month free if you pay yearly” — \($20 \times 11 = $220\) [3] — which, as we noted, implies an annualized discount rate of 19%. Setting \(n=\infty\) yields $1010.03 so that would be the cost of a lifetime subscription, using those parameters. Picking 20 years (\(n=240\)) yields $1001.72 so you might as well go with a lifetime subscription well before that point.

Fair’s Fair

First, the point of getting a discount is that you’re pre-paying for a greater length of time, i.e., committing to subscribe for at least that long. We’re happy to give refunds, no questions asked, if you’re not happy but we don’t automatically refund money you pre-paid if you stop using Beeminder. Hopefully that’s not surprising when paired with our auto-canceling subscriptions. The way we implement it is simply this: Regardless of how frequently you’re paying, we look at your activity for the previous month when it’s time to charge you. If you haven’t added any datapoints in that month, we suppress the charge. We still check again next time, in case you come back.

Crazy Loopholes

Our simplistic way of implementing auto-canceling subscriptions — stop the charge if you weren’t active in the past month — does make for one unfortunate loophole when combined with the ability to choose your payment frequency: You could, for example, pay for a yearly premium plan on January 1, use Beeminder until December 1, then stop for a month. On January 1 of the following year you’ll be officially inactive and we won’t charge you. You can then resume beeminding for another 11 months and rinse and repeat. You’ll pay for one year but get a lifetime of use, minus Decembers. We figured we’d just hand you that one on a silver platter on the theory that it takes the fun out of exploiting it and why else would anyone bother to exploit such a loophole than to prove that they could. If it’s actually to save money then by all means, knock yourself out, and you’re very welcome.



[1] I think there’s no closed form solution to this, i.e., setting the first equation on this page equal to x and solving for r. I let Mathematica do it numerically.

[2] Though I suppose any startup for whom venture capital makes sense might well also prefer $200 now to $300 spread over the coming year!

[3] The nerdery actually goes a bit deeper. You can’t just add up the monthly payments for the coming year and call that the non-discounted price. You have to at least account for inflation when comparing the price of paying monthly to the price of paying less frequently. In fact, if you want to compare the price of paying monthly to the price of a lifetime subscription it doesn’t even make sense if you just add up the monthly payments. Paying a monthly cost forever is not infinitely expensive. Instead we take inflation to be 2% per year and use that to compare against when quoting the discount you’re getting as you slide the slider. Note that this matters very little unless the payments are years apart; in fact we really only bothered in order to be able to say something coherent as the discount you’re getting for paying for a lifetime subscription.

But for completeness, here’s the formula for the effective discount if paying every \(n\) months instead of monthly, using a monthly discount rate \(r\) for the slider and real monthly discount rate \(R\) (e.g., use \(R=.03/12\) for 3% yearly — a bit more than inflation): $$1-\frac{\left(\exp(R)-1\right) \left(\exp(n r)-1\right) \exp((n-1)(R-r))}{\left(\exp(r)-1\right) \left(\exp(n R)-1\right)}$$

And the limit as \(n\) goes to infinity for the effective discount for going lifetime: $$\frac{1-\exp(r-R)}{1-\exp(r)}$$