Skip to main content
How-to Guides

Suggestions for representing common concepts in Summit.

Updated over a week ago

General

How to display results from prior periods (i.e. historical values or actuals):

Results from prior periods can be added to your simulation using the List function. Simply enter a value for each prior period into your list (e.g. =[500, 600, 700]), select the recurring pattern corresponding to the results (e.g. Monthly), and enter a Start Date and End Date for the list (e.g. January 1, 2022 and March 31, 2022). These results will then appear in the output table as a dedicated row. Learn more about lists here.

How to create totals:

There are multiple ways to represent totals or sum values in Summit. See descriptions and examples below:

  • Use routes to send results from multiple events to a single event. Include the formula *1 in the destination event (i.e. it multiplies all received values by 1 and displays the total for a given period).

  • Use a metric to sum the results of two events (e.g. source_1+source_2) directly in the output table.

  • Alternatively, use the Pool function to sum the results of multiple events cumulatively (i.e. if the same results are sent to the pool each period, the balance will grow over time).

How to display totals for your events in Summit

How to create rolling totals:

Similar to a standard total described above, there are multiple ways to create a rolling total in Summit. If you wish to display the logic for the rolling total on your canvas, you can use a series of connected events. Alternatively, a simple metric can be created directly in the output table to track the value (e.g. for a rolling 12-month total: total-lag(total, 12).

You can explore the formulas and details for each approach by accessing the How-to Guide available here.

How-to guide: Using rolling 12 month totals in Summit

Questions? Contact us at [email protected].


Revenue, Growth, & Customer Acquisition

How to design logic associated with marketing-driven revenue growth:

  • Marketing channel generating 1,000 leads monthly:

    =Source(1k<paid_leads:Leads>)

    Set the recurring pattern to Monthly

πŸ”” Note: In this example, paid_leads is the parameter (i.e. the input field in the app) and Leads is the alias (i.e. the label that appears when the event is viewed as a Form). Learn more about tags and parameters here.

  • Marketing channel generating 300 leads monthly with a 3% growth rate:

    =Source(300<organic_leads> @ 3<% Growth>%)

    Set the recurring pattern to Monthly

  • Conversion rate of 3% from a marketing channel to a subscription tier:

    *3<% Conversion>/100

    No need to set a recurring pattern if receiving the results of the marketing channel event.

πŸ”” Note: Alternatively, you can use a route to send leads to a subscription tier. You can reflect a conversion rate on the route by editing the route %. Learn more here.

  • Subscription tier with a starting customer count of 10:

    =Pool(10<entry_tier:Beginning Customers>)

  • Subscription tier starting with 50 customers and a 4% churn rate:

    =Pool(50<pro_tier:Beginning Customers> @ -4<% Churn>%)

πŸ”” Note: If this event is receiving converted customers from the marketing events above, set this recurring pattern to End of Month. This ensures the churn is reflected after newly converted customers are added to the tier.

  • Price for a subscription tier

    * 299<business_tier_revenue>

    No need to set a recurring pattern if downstream from the events above.

πŸ”” Note: Sending a Pool of customers to the revenue event using a route generates a total revenue amount for the month for that tier.

  • Bank with a $300,000 starting value (destination for revenue in-flows):

    =Pool(300k<bank_beg_balance>)

See an example of how these events could be connected in a Customer Acquisition simulation here.

How to guide for Customer Acquisition and Marketing Channel Conversion in Summit

How to design logic for Free Trials:

Free Trials are a straightforward concept in Summit. Using the Wait function, you can define a Free trial over a period of Days, Months, Years, et al. so that customer conversions don't occur until the end of the trial period. For example, you can send an event representing customer signups to a Free Trial event like so: =Wait(7<free_trial:Days>)

You can also define how many trial users convert to paying customers or not. A How-to Guide that shows how these concepts could be applied to a forecast is available here.

How-to Guide: Paid Marketing Activities in Summit

How to design logic associated with customer upgrades over time:

Often difficult to do in spreadsheets, Summit allows you to simulate multiple customer upgrade paths and reflect the changes in customer totals and revenue automatically. A How-to Guide for designing models with upgrades is available here.

How-to Guide: Upgrade-driven Revenue Growth in Summit

How to design logic for simulating cash receipts across various billing frequencies:

It's often easy to use revenue as a proxy for cash receipts in your forecast, but the two are not always the same. For example, we often offer discounts to buyers who are willing to pay upfront for an annual service, or sometimes we have enterprise customers who prefer a quarterly billing schedule. This means cash inflows can be lumpy, as opposed to the smooth, linear shape we tend to associate with revenue growth. Conflating the two can result in poor cash management and an inaccurate forecast.

The Wheel function makes it easy to reflect these variable schedules in a cash simulation. A How-to Guide (available here) includes instructions for simulating customer and cash growth across multiple billing frequencies. As you convert new customers into annual, quarterly, or monthly billing schedules, the model will automatically keep track of those cash receipts in rotating lists and accurately reflect the timing of cash inflows to your bank account.

How-to Guide: Cash Inflows Across Multiple Billing Patterns in Summit

How to design logic for an initial, temporary discount given to new customers:

The key for this scenario is to use a Base to create cohorts of new signups so the discount can be accurately applied and tracked over time. In the example below (click the image to view and copy the project into your account), new customers receive a 50% discount for the first three months of service, after which the fees return to the original price. The Base function treats each new monthly wave of signups (e.g. 100 customers in month 1, then 105 in month 2, then 110 in month 3, etc.) as a distinct cohort that should receive the temporary discount. In parallel, the Wait function delays recording new customer revenue at the full amount until the end of the discount period.

How-to Guide: Temporary Discount to New Customers

Questions? Contact us at [email protected].


Assets

How do design logic for something with value that changes over time:

  • An empty checking account:

    =Pool(0)

  • A 12-month CD of $10k growing at 0.5% APR:

    =Pool(10k @ 0.045%)

    Set recurring pattern to Yearly and the end date to 12 months from now

  • A high-yield cash savings account with a balance of 59k and a 0.45% APR accruing monthly:

    =Pool(59k @ 0.0375%)

    Set recurring pattern to Monthly

  • An initial investment of $12k growing at approximately 8% yearly:

    =Pool(12k @ ~8%)

    Set recurring pattern to Yearly

  • An investment vehicle with a current value of $120k growing at 5% capped at $200k:

    =Bucket(120k @ 5%, 200k)

    Additional value (beyond 200k) will flow downstream to any connected events.

  • An investment vehicle growing at roughly 2% per month that empties into a different instrument at $250k:

    =Tippingbucket(0 @ ~2%, 250k)

    Set recurring pattern to Monthly and create a route to another event to indicate where the 250k will go once it tips.

  • An investment growing consistently at 1k per month:

    =Pool(0 @ 1000)

    Set recurring pattern to Monthly

If these concepts are confusing, try exploring our topical guides on growth rates and containers.

Questions? Contact us at [email protected].


Expenses, Salaries, & Payroll

How to design logic for decreasing the value of an asset over time, such as a bank account (i.e. Pool, see above):

  • Online service fees of $2,500 that are expected to grow by 2% each month:

    =Source(-2.5k<online_service_fees_amt:Monthly Amt>

    Set the recurring pattern to Monthly

πŸ”” Note: In this example, online_service_fees_amt is the parameter (i.e. the input field in the app) and Monthly Amt is the alias (i.e. the label that appears when the event is viewed as a Form). Learn more about tags and parameters here.

  • Online service fees of $2,500, growing by 2% each month:

    =Source(-2.5k<online_service_fees_amt:Monthly Amt> @ 2<online_service_fees_growth:% Growth>%))

    Set the recurring pattern to Monthly

  • Quarterly travel expenses of approximately $5,000:

    =Source(~-5k<travel_fees>)

    Set the recurring pattern to Quarterly

  • A salary of $100k per year, paid monthly:

    =Source(-100k<salary></year>)

    Set recurring pattern to Monthly

  • A salary of $100k per year, paid twice per month:

    =Source(-100k<salary></year>)

    Set recurring pattern to Semimonthly

  • A salary of $100k per year, paid twice per month, including taxes and benefits equivalent to 13% of salary:

    =Source(-100k<salary></year> * (1 + 13<tax_ben_rate>/100))

    Set recurring pattern to Semimonthly

πŸ”” Note: Alternatively, you can use a route to send the salary amount to a separate event (or multiple events) that perform the calculation for taxes and/or benefits. For example, send =Source(-100k<salary></year>) to an event with the formula *13<tax_ben_rate>/100. You'll then have a dedicated row in the output table for salaries and taxes/benefits. Keep in mind though, if you split the formula into multiple events this way, make sure you also send a second route from the salary event to its destination (i.e. so you're sending both the salary value and the tax/benefits amounts downstream).

  • Fees of $5k paid every other week:

    =Source(-5k)

    Set recurring pattern to Biweekly

  • A weekly wage of $25 per hour for 20 hours of work per week:

    =Source(-25 * 20)

    Set recurring pattern to Weekly

  • A weekly wage of $1,350 - $1,650:

    =Source(~-1.5k)

    Set recurring pattern to Weekly

See an example of how these events could be connected in an Expenses simulation here.

How to create logic for expenses in Summit

How to design logic for marketing activities that generate leads and drive expenses:

To simulate paid marketing activities, first create an event to represent the cost driver--for example, pay-per-click advertising (e.g. Paid Ads, Monthly). This event formula could be written as: =Source(1k<Paid_clicks> @ 5<growth_rate>%).

Using a route, you can then send those values to a conversion event that drives customer signups and a second event to represent the cost associated with each click--for example, an event called Advertising Expense with the formula * 14.50<cost_per_click>. The results can then be sent to an event that collects expense totals and reduces your bank balance.

A How-to Guide that shows how these concepts could be applied to a forecast is available here.

How-to Guide: Paid Marketing Activities in Summit

Questions? Contact us at [email protected].


Churn & Retention

Approaches for reflecting customer retention and churn over time in a simulation:

  • A pool of 50 customers churning at a rate of 10% per month.

    =Pool(50<customer_count_start> @ -10<churn_rate>%)

    Set recurring pattern to Monthly

  • New customers should be assigned to monthly cohorts since retention rates change over time. After one month, 78% of customers are retained, the rate decreases after several months, and eventually 45% of customers are retained long-term.

    =Base([0] @ [78<cohort_m1_retention>, 65<cohort_m2_retention>, 55<cohort_m3_retention>, 45<cohort_m4_retention>]%)

    Set recurring pattern to Monthly

See an example of these two approaches to customer churn and retention here.

How-to Guide: Churn &amp; Cohort-based Retention in Summit

Questions? Contact us at [email protected].


Virality

How to design logic for things that grow really, really fast.

There are many ways to make things grow exponentially using SEL.

A basic exponential expression could be written as: =2**10 which reads as 2 to the power of 10, resulting in 1,024.

Here are a few other ways to express exponential growth:

Source as Seed

Create an initial source. You can think of this as your initial seed amount. If you're a new business, this might be the number of customers that sign up on day one:

=Source(100)

To have this initial 100 "go viral", you'd want to point it to another event that does the compounding:

*= 2

This says to take the initial amount and then begin doubling it.

Viral growth of doubling each cycle using an initial seed of 100.

Viral growth of doubling each cycle using an initial seed of 100. The output of this second event will be: 200, 400, 800, etc.

🚧 Compound operators

The *= did something a bit tricky in the above example, didn't it? It consumed the initial value of 100 and ignored the rest of the 100's sent to it from the seed event.

Compound operators like *=, +=, -=, /= are exceptions to this rule. They store the initial result of their math (in this case, 100 * 2, and for each future occurrence, repeatedly apply their operator (in this case *) to the current value.

The real-world equivalent of this is hitting = repeatedly on your calculator.

Compounding Container

You can also compound a container using percentage growth rates greater than 100%, for example, a pool of 100 free users that grows organically (through WoM) could be represented as:

=Pool(100 @ 200%)

This pool will follow the same sequence: 200, 400, 800, etc.

The Simple List

If neither of those suits you, there's another very simple way to represent viral growth: a List!

=[1,2,4,8,16]

In a List, you specify the values you wish to appear in each period in the output table. This creates a lot of clarity, but requires you to (1) define the entire list and (2) make sure the list contains enough entries to cover the full span of time you want to cover.

Questions? Contact us at [email protected].


Keep reading: Tips & Tricks

Did this answer your question?