Skip to main content

Recurring Revenue - first of a series

SaaS, PaaS, IaaS, ... the world seems to be moving to an 'as-a-service' model. Instead of a big upfront charge with smaller maintenance fees thereafter, we're more often now establishing subscriptions that lower the entry fee but generate greater recurring revenue. And it's those ongoing subscription charges that really drive business valuations. But out of the box, Salesforce doesn't help much with reporting or forecasting recurring revenue. Typically, the Amount which rolls up into the forecast is the Total Contract Value, which may include non-recurring items, as well as multiple years of service.

Yes, you can create schedules (quantity schedules or revenue schedules) attached to each line item. And that does help, especially with reporting on revenue in each period. But I don't find that a complete solution (though it is reasonably flexible given that you can edit each entry of the schedule).

Over several posts, I'm going to walk through a set of Salesforce customizations to support:
  • determining the First-Year Value (FYV) and Monthly Recurring Revenue (MRR)
  • forecasting based on FYV and MRR
  • reporting on scheduled billings
  • reporting the month-end MRR under contract
  • calculating initial and subsequent payment amounts
Along the way, we'll make changes to the Product, Opportunity, Opportunity Product, Quote and Quote Line Item objects. We'll also make changes to the forecast setup.

Let's start with the updates to the Product object. My aim is to determine, for each product, (1) when it will be billed and (2) when we'll recognize revenue. To achieve this, I'm going to add a picklist field to the Product object called Category. This will be read-only for everyone except Admins and Product Managers and I'll require a value to save an Active product record. Its values, and what they represent:
  • One Time: items that are billed upfront and recognized as revenue immediately. Typically this would be for things such as hardware, installation services and training.
  • Subscription: items that are billed upfront (or annually for multi-year deals), but are recognized as revenue over time. This covers your -as-a-Service offerings, term licenses, maintenance charges, etc.
  • Over Time: items that are billed and recognized over time. This is most commonly for Time & Materials services. We'll make a simplifying assumption that the services will be performed (and billed) equally over the contract term. (Here's where the Revenue Schedule's flexibility would work nicely if you know the delivery schedule at the time of booking.)
I also need to add a numeric field Term to the Opportunity object. Term is the number of months over which services will be performed; it will be required prior to creating any quotes or marking an opportunity closed-won. While I'm adding Opportunity fields, let's also create:
  • First Day of PoP: This date field represents the first day of the period of performance (that is, the first day on which I'm delivering services).
  • First Day after PoP: This date field is the first day after the PoP. (It may seem odd to use this day after PoP instead of the Last Day of PoP, but there are reporting benefits we'll see later).
  • Renewal: a checkbox (default unchecked). When I calculate the month-end MRR, I'll want to report on both the amount under contract as well as the amount tied to renewals that are overdue but still pending.
As an example, suppose I have a new opportunity that involves a two-year contract, priced at $100 per month billed annually, with $150 for installation charged upfront. Service begins on July 1, 2019. The Term will be 24, First Day of PoP is 7/1/2019, First Day after PoP is 7/1/2022, and Renewal is false.

The calculations we're trying to build in:
  • First-Year Value is $1350 (monthly charge of $100, plus the $150 installation fee).
  • Monthly Recurring Revenue is $100.
  • Initial billing is $1350; the subsequent billing is $1200.
  • MRR under contract is $100 for any period from July 2019 through June 2021.
So that's where we're headed. Next time, we'll add the fields and flows on the Quote and Quote Line Item.

Comments

Popular posts from this blog

Salesforce Pipeline Reporting - part 1 of 3

In a dozen (plus) years working with Salesforce, I've never been entirely happy with the built in reporting of my opportunity pipeline. I can export details, or a printed (formatted) view, but I lose the interactivity. I can use a dashboard, which is better now in Lightning in that I can see a lot more fields in a table component. But flexible views require filtered dashboards, and just maintaining the filter values (if they go down to a rep level) can be onerous. Plus applying (or removing) a filter tests my (very limited) patience. So I've typically exported the report details into Excel, and there created a workbook that includes (1) summary info, (2) scrollable deal lists with hyperlinks back to the opportunity records in Salesforce and (3) filters that let me instantly switch views, say among teams, reps, opportunity types, or fiscal periods. My process around this involved LOTS of VBA and LOTS of formulas. Lately, I've (finally) gotten turned on to slicers in Exc...

Using Excel with Salesforce: One tool, two tips

Obviously, Salesforce has strong built-in reporting tools. And I'm a big fan of the dashboards, especially filtered dashboards and dynamic dashboards. WAY better than the old approach of creating a unique set of reports and a corresponding dashboard for every conceivable view. Still, I often want to pull my Salesforce data into Excel. This might be for further manipulation / processing, aggregating data that doesn't live in Salesforce, or distribution to non-Salesforce users (hey, those licenses are expensive!). Reporting Tool - XL-Connector: I'm using a new (to me) tool when I have to repeatedly pull Salesforce data into Excel: XL-Connector  (fka Enabler 4 Excel) from Xappex. There's a lot you can do with XL-Connector. My primary use is just to extract data from Salesforce, and this can be done in two ways: reports or SOQL queries. The great part is that once you've captured data into an Excel file, refreshing the data is trivial. I've stored my credential...

Salesforce reporting: XL-Connector and VBA

In an earlier post , I mentioned a tool I'm using to import Salesforce data - via SOQL or existing reports - into Excel. This post is more about using that tool, XL-Connector from Xappex . Here, I'll walk through the (simple) process of importing and refreshing a report, and I'll provide a simple VBA macro to automate the refresh. In a future post, I'll expand on that macro to show a friendly view of my opportunity pipeline and a single-page view of how each of my sales reps are doing against a series of KPIs. Importing a report is simple enough. From the XL-Connector tab, select Log In and enter your credentials. I'm using the old id and password (as opposed to SSO), so I provide that along with my 'token'.  (Don't remember your token? Log in to Salesforce via your browser, click on your photo, select Settings, then 'reset my security token'.) Once you're logged in the lock turns green. Back in Excel, on the XL-Connector tab, select ...