Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Commitment Flexibility Appendix #535

Open
wants to merge 25 commits into
base: working_draft
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
d751750
Initial draft
cnharris10 Aug 23, 2024
943efd7
Update commitment_discounts.md
cnharris10 Aug 24, 2024
f21c015
Incorporated a few suggestions from Shawn Alpay
cnharris10 Aug 27, 2024
e864bb5
Ignore MD031: Fenced code blocks should be surrounded by blank lines …
cnharris10 Aug 27, 2024
3fec018
Grammar fixes, calling out when Consumed{Quantity,Unit} are null, and…
cnharris10 Aug 29, 2024
788c90c
Update specification/appendix/commitment_discounts.md
cnharris10 Aug 29, 2024
93199b7
Specify that 1 resource is being modeled
cnharris10 Aug 29, 2024
f43ee82
Size flexibility Appendix
cnharris10 Aug 30, 2024
e4bd744
Update commitment_discounts.md
cnharris10 Sep 3, 2024
167f67a
Fix DateTime format
cnharris10 Sep 3, 2024
d50cbbd
Merge branch 'commitment-discount-appendix' of github.com:FinOps-Open…
cnharris10 Sep 3, 2024
8af4400
Fix DateTime format
cnharris10 Sep 3, 2024
4b2ebb0
Adding editorial changes from Michael
cnharris10 Sep 3, 2024
e7eff95
Merge branch 'commitment-discount-appendix' into size-flexibility-app…
cnharris10 Sep 3, 2024
a0d27bc
Small term/wording updates based on the evolution of pr: https://gith…
cnharris10 Sep 11, 2024
8b4d8bb
Merge branch 'commitment-discount-appendix' into size-flexibility-app…
cnharris10 Sep 11, 2024
10d065c
Small term/wording updates based on the evolution of pr: https://gith…
cnharris10 Sep 11, 2024
821d926
Rearrange property in JSON block
cnharris10 Sep 16, 2024
4e57192
Minor fixes
cnharris10 Sep 16, 2024
d5ab0a9
Merge branch 'commitment-discount-appendix' into size-flexibility-app…
cnharris10 Sep 16, 2024
7be3840
Adding 'Commitment Discount Visibility' to v1.1 Release Planning
cnharris10 Sep 30, 2024
6c9b254
Merge branch 'working_draft' of github.com:FinOps-Open-Cost-and-Usage…
cnharris10 Oct 30, 2024
86f0149
Merge branch 'working_draft' into size-flexibility-appendix
cnharris10 Oct 30, 2024
9fc11ab
Rebasing against working_draft
cnharris10 Oct 30, 2024
74fe05d
Bug fix: '{Billing,Charge}Period{Start,End}Date' should be '{Billing,…
cnharris10 Oct 30, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions specification/appendix/appendix.mdpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,7 @@

*This section is non-normative.*

!INCLUDE "commitment_discounts/commitment_discounts.md",1
!INCLUDE "commitment_discounts/size_flexibility.md",1
!INCLUDE "grouping_constructs_for_resources_and_or_services.md",1
!INCLUDE "origination_of_cost_data.md",1
278 changes: 278 additions & 0 deletions specification/appendix/commitment_discounts/commitment_discounts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,278 @@
# Commitment Discounts

A commitment discount is a billing discount model that offers reduced rates on preselected SKUs in exchange for an obligated usage or spend amount over a predefined term. Commitment discounts typically consist of a set of purchase and usage records within cost and usage datasets.

Usage-based commitment discounts obligate a customer to a predetermined amount of usage over a preselected term, typically measured in "Hours". In some cases, usage-based commitment discounts allow similar resources of different size classifications to relatively benefit from commitment discount rates. This is typically known as "commitment flexibility", and can be derived by multiplying the number of actual hours consumed by a resource by its predetermined *normalization factor* or *ratio* to derive the number of normalized hours consumed.

Spend-based commitment discounts obligate a customer to a predetermined amount of spend over a preselected term, typically denoted by the invoice's selected billing currency (ex: "USD").

## Purchasing

While customers are bound to the term of a commitment discount, cloud-service providers, or CSPs, offer various payment options before and/or during the term:

* *Upfront* - The commitment discount is paid in full before the term begins.
* *Recurring* - The commitment discount is paid on a repeated basis, typically over each billing period of the term.
* *Hybrid* - Some of the commitment discount is paid before the term begins, and the rest is paid repeatedly over the term.

For example, if a customer buys a spend-based commitment discount for 1 year, with a $1.00 hourly commitment, and pays with the hybrid option, the commitment discount's payment consists of both:

1. *Upfront* - $4,380 (`24 hours * 365 days * $1.00 * 0.5`)
2. *Recurring* - $182.50 (`24 hours * 365 days * $1.00 / 12 months`)

## Usage

Commitment discounts follow a "use-it-or-lose-it" model where the amortization of a commitment discount's purchase applies evenly over each charge period of eligible resources over the term.

For example, if a customer buys a spend-based commitment with a $1.00 hourly commitment in January (31 days), only $1.00 is eligible for consumption for each hourly charge period. This means that if a customer has eligible resources running during this charge period, some or all of the $1.00 that is allocated to the charge period will also be allocated to some or all of these resources. Conversely, if a customer does not have eligible resources running during this charge period, the $1.00 allocated to the charge period is wasted.

## Commitment Discounts in FOCUS

Within the FOCUS specification, the following examples demonstrate how a commitment discount would appear across various payment and usage scenarios.

### Purchase Rows

All commitment discount purchases appear with a positive `BilledCost`, `PricingCategory` as "Committed", and the commitment discount's id populating both the `ResourceId` and `CommitmentDiscountId` value. Upfront purchases appear as a single record also with `ChargeCategory` as "Purchase", `ChargeFrequency` as "One-Time", and the total quantity and units for commitment discount's term as `CommitmentDiscountQuantity` and `CommitmentDiscountUnit`, respectively.

Recurring purchases are allocated across all corresponding charge periods of the term when `ChargeCategory` is "Purchase", `ChargeFrequency` is "Recurring", and `CommitmentDiscountQuantity` and `CommitmentDiscountUnit` are reflected only for that charge period.

Using the same commitment discount example as above, a one-year, spend-based commitment discount with a $1.00 hourly commitment purchased on Jan 1, 2023, various purchase options can occur:

#### Scenario #1: Upfront

The entire commitment is billed _once_ during the first charge period of the term for $8,670 (derived as `24 hours * 365 days * $1.00`).

```json
[
{
"BillingPeriodStartDate": "2023-01-01T00:00:00Z",
"BillingPeriodEndDate": "2023-02-01T00:00:00Z",
"ChargePeriodStartDate": "2023-01-01T00:00:00Z",
"ChargePeriodEndDate": "2024-01-01T00:00:00Z",
"ChargeCategory": "Purchase",
"ChargeFrequency": "One-Time",
"PricingCategory": "Committed",
"ResourceId": "<commitment-discount-id>",
"BilledCost": 8760.00,
"EffectiveCost": 0.00,
"CommitmentDiscountId": "<commitment-discount-id>",
"CommitmentDiscountQuantity": 8760.00,
"CommitmentDiscountUnit": "USD"
}
]
```

#### Scenario #2: Recurring

The commitment is billed across all 8,760 charge periods of the term with $1.00 allocated to each charge period over the term.

```json
[
{
"BillingPeriodStartDate": "2023-01-01T00:00:00Z",
"BillingPeriodEndDate": "2023-02-01T00:00:00Z",
"ChargePeriodStartDate": "2023-01-01T00:00:00Z",
"ChargePeriodEndDate": "2023-01-01T01:00:00Z",
"ChargeCategory": "Purchase",
"ChargeFrequency": "Recurring",
"PricingCategory": "Committed",
"ResourceId": "<commitment-discount-id>",
"BilledCost": 1.00,
"EffectiveCost": 0.00,
"CommitmentDiscountId": "<commitment-discount-id>",
"CommitmentDiscountQuantity": 1.00,
"CommitmentDiscountUnit": "USD"
},

/* ... 743 more recurring purchase records for the billing period ... */
]
```

#### Scenario #3: Hybrid

With a 50/50 split, half of the commitment is billed _once_ during the first charge period of the term for $4,380 (derived as `24 hours * 182.5 days * $1.00`), and the other half is billed across each charge period over the term, derived as (`$1.00 * 8,760 hours * 0.5`). Amortized costs incur half of the amount (i.e. $0.50) from the upfront purchase and the other half from the recurring purchase.

```json
[
{
"BillingPeriodStartDate": "2023-01-01T00:00:00Z",
"BillingPeriodEndDate": "2023-02-01T00:00:00Z",
"ChargePeriodStartDate": "2023-01-01T00:00:00Z",
"ChargePeriodEndDate": "2024-01-01T00:00:00Z",
"ChargeCategory": "Purchase",
"ChargeFrequency": "One-Time",
"PricingCategory": "Committed",
"ResourceId": "<commitment-discount-id>",
"BilledCost": 4380.00,
"EffectiveCost": 0.00,
"CommitmentDiscountId": "<commitment-discount-id>",
"CommitmentDiscountQuantity": 4380.00,
"CommitmentDiscountUnit": "USD"
},
{
"BillingPeriodStartDate": "2023-01-01T00:00:00Z",
"BillingPeriodEndDate": "2023-02-01T00:00:00Z",
"ChargePeriodStartDate": "2023-01-01T00:00:00Z",
"ChargePeriodEndDate": "2023-01-01T01:00:00Z",
"ChargeCategory": "Purchase",
"ChargeFrequency": "Recurring",
"PricingCategory": "Committed",
"ResourceId": "<commitment-discount-id>",
"BilledCost": 0.50,
"EffectiveCost": 0.00,
"CommitmentDiscountId": "<commitment-discount-id>",
"CommitmentDiscountQuantity": 0.50,
"CommitmentDiscountUnit": "USD"
},

/* ... 743 more recurring purchase records for the billing period ... */
]
```

### Usage Rows

Amortization of commitment discounts occur the same way regardless of how one or more purchases are made. The same usage-based or spend-based amount is applied evenly across all charge periods and potentially allocated to eligible resources. Continuing with the same commitment discount example, a one-year, spend-based commitment discount with a $1.00 hourly commitment, and 1 resource, 4 types of scenarios can occur during a charge period:

* Scenario #1: Eligible resource(s) runs for $1.00 (100% utilization)
* Scenario #2: No eligible resources run (0% utilization)
* Scenario #3: Eligible resource(s) runs for $0.75 (75% utilization)
* Scenario #4: Eligible resource(s) runs for over the $1.00 hourly commitment (100% utilization + overage)

#### Scenario #1: Eligible resource(s) runs for $1.00 (100% utilization)

In this scenario, one eligible resource runs for the full hour, so one row allocated to the resource is produced.

```json
[
{
"BillingPeriodStartDate": "2023-01-01T00:00:00Z",
"BillingPeriodEndDate": "2023-02-01T00:00:00Z",
"ChargePeriodStartDate": "2023-01-01T00:00:00Z",
"ChargePeriodEndDate": "2023-01-01T01:00:00Z",
"ChargeCategory": "Usage",
"ChargeFrequency": "Usage-Based",
"PricingCategory": "Committed",
"ResourceId": "<resource-id>",
"ConsumedQuantity": 1,
"ConsumedUnit": "Hour",
"BilledCost": 0.00,
"EffectiveCost": 1.00,
"CommitmentDiscountId": "<commitment-discount-id>",
"CommitmentDiscountStatus": "Used",
"CommitmentDiscountQuantity": 1.00,
"CommitmentDiscountUnit": "USD"
}
]
```

#### Scenario #2: No eligible resources run (0% utilization)

In this scenario, the entire, eligible amount was unused, so one unused row, allocated to the commitment discount, was produced. Most notably, ConsumedQuantity and ConsumedUnit are null while CommitmentDiscountQuantity is not because $1 was still drawn down by the commitment discount even though it was not consumed by a resource.

```json
[
{
"BillingPeriodStartDate": "2023-01-01T00:00:00Z",
"BillingPeriodEndDate": "2023-02-01T00:00:00Z",
"ChargePeriodStartDate": "2023-01-01T00:00:00Z",
"ChargePeriodEndDate": "2023-01-01T01:00:00Z",
"ChargeCategory": "Usage",
"ChargeFrequency": "Usage-Based",
"PricingCategory": "Committed",
"ResourceId": "<commitment-discount-id>",
"ConsumedQuantity": null,
"ConsumedUnit": null,
"BilledCost": 0.00,
"EffectiveCost": 1.00,
"CommitmentDiscountId": "<commitment-discount-id>",
"CommitmentDiscountStatus": "Unused",
"CommitmentDiscountQuantity": 1.00,
"CommitmentDiscountUnit": "USD"
}
]
```

#### Scenario #3: Eligible resource(s) runs for $0.75 (75% utilization)

In this scenario, one eligible resource runs for the full hour. One row shows $0.75 to a resource, and the other shows that $0.25 remained unused.

```json
[
{
"BillingPeriodStartDate": "2023-01-01T00:00:00Z",
"BillingPeriodEndDate": "2023-02-01T00:00:00Z",
"ChargePeriodStartDate": "2023-01-01T00:00:00Z",
"ChargePeriodEndDate": "2023-01-01T01:00:00Z",
"ChargeCategory": "Usage",
"ChargeFrequency": "Usage-Based",
"PricingCategory": "Committed",
"ResourceId": "<resource-id>",
"ConsumedQuantity": 1,
"ConsumedUnit": "Hour",
"BilledCost": 0.00,
"EffectiveCost": 0.75,
"CommitmentDiscountId": "<commitment-discount-id>",
"CommitmentDiscountStatus": "Used",
"CommitmentDiscountQuantity": 0.75,
"CommitmentDiscountUnit": "USD"
},
{
"BillingPeriodStartDate": "2023-01-01T00:00:00Z",
"BillingPeriodEndDate": "2023-02-01T00:00:00Z",
"ChargePeriodStartDate": "2023-01-01T00:00:00Z",
"ChargePeriodEndDate": "2023-01-01T01:00:00Z",
"ChargeCategory": "Usage",
"ChargeFrequency": "Usage-Based",
"PricingCategory": "Committed",
"ResourceId": "<commitment-discount-id>",
"ConsumedQuantity": null,
"ConsumedUnit": null,
"BilledCost": 0.00,
"EffectiveCost": 0.25,
"CommitmentDiscountId": "<commitment-discount-id>",
"CommitmentDiscountStatus": "Unused",
"CommitmentDiscountQuantity": 0.25,
"CommitmentDiscountUnit": "USD"
}
]
```

#### Scenario #4: Eligible resource(s) runs for over the $1.00 hourly commitment (100% utilization + overage)

In this scenario, one eligible resource runs for the full hour and costs $1.50. One row shows that $1.00 was amortized from the commitment discount, and the other shows that $0.50 was charged as standard, on-demand spend.

```json
[
{
"BillingPeriodStartDate": "2023-01-01T00:00:00Z",
"BillingPeriodEndDate": "2023-02-01T00:00:00Z",
"ChargePeriodStartDate": "2023-01-01T00:00:00Z",
"ChargePeriodEndDate": "2023-01-01T01:00:00Z",
"ChargeCategory": "Usage",
"ChargeFrequency": "Usage-Based",
"PricingCategory": "Committed",
"ResourceId": "<resource-id>",
"ConsumedQuantity": 1,
"ConsumedUnit": "Hour",
"BilledCost": 0.00,
"EffectiveCost": 1.00,
"CommitmentDiscountId": "<commitment-discount-id>",
"CommitmentDiscountStatus": "Used",
"CommitmentDiscountQuantity": 1.00,
"CommitmentDiscountUnit": "USD"
},
{
"BillingPeriodStartDate": "2023-01-01T00:00:00Z",
"BillingPeriodEndDate": "2023-02-01T00:00:00Z",
"ChargePeriodStartDate": "2023-01-01T00:00:00Z",
"ChargePeriodEndDate": "2023-01-01T01:00:00Z",
"ChargeCategory": "Usage",
"ChargeFrequency": "Usage-Based",
"PricingCategory": "Standard",
"ResourceId": "<resource-id>",
"ConsumedQuantity": 1,
"ConsumedUnit": "Hour",
"BilledCost": 0.50,
"EffectiveCost": 0.00
}
]
```
Loading
Loading