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 Discount Appendix #528

Merged
merged 25 commits into from
Sep 20, 2024
Merged
Show file tree
Hide file tree
Changes from 2 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
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
a0d27bc
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
e9fc19c
Merge branch 'working_draft' into commitment-discount-appendix
cnharris10 Sep 16, 2024
3a50e6c
Replace 'hybrid' with 'partial'
cnharris10 Sep 19, 2024
49c0389
Additional grammar edits/fixes
cnharris10 Sep 19, 2024
f2f45c9
Merge branch 'working_draft' into commitment-discount-appendix
jpradocueva Sep 19, 2024
9d669b4
Change to Upfront terminology
cnharris10 Sep 19, 2024
a0e9117
Merge branch 'commitment-discount-appendix' of github.com:FinOps-Open…
cnharris10 Sep 19, 2024
ad22dbe
Merge branch 'working_draft' into commitment-discount-appendix
jpradocueva Sep 20, 2024
2b98775
Merge branch 'working_draft' into commitment-discount-appendix
jpradocueva Sep 20, 2024
98442c5
Dedicated SKU column (for issue #495) (#516)
AWS-ZachErdman Sep 20, 2024
387d326
First consistency review changes including:
cnharris10 Sep 20, 2024
53fa704
Update specification/appendix/commitment_discounts.md
cnharris10 Sep 20, 2024
7dda9b2
Update specification/appendix/commitment_discounts.md
cnharris10 Sep 20, 2024
4280518
Merge branch 'commitment-discount-appendix' of github.com:FinOps-Open…
cnharris10 Sep 20, 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
1 change: 1 addition & 0 deletions specification/appendix/appendix.mdpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@

*This section is non-normative.*

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

A commitment discount is a billing discount 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.
cnharris10 marked this conversation as resolved.
Show resolved Hide resolved

## 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
* *Monthly* - The commitment discount is paid monthly over the term.
cnharris10 marked this conversation as resolved.
Show resolved Hide resolved
* *Hybrid* (1/2 Upfront & 1/2 Monthly) - Half of the commitment discount is paid in advance and half is paid monthly over the term.
cnharris10 marked this conversation as resolved.
Show resolved Hide resolved

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:
cnharris10 marked this conversation as resolved.
Show resolved Hide resolved

1. *Upfront* - $4,380 (`24 hours * 365 days * $1.00 * 0.5`)
2. *Monthly* - $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 amortization for each hourly charge period. This means that if a customer have eligible resources running during this charge period, some or all of the $1.00 that is allocated to the charge period will be 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 amortization 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 `CommitmentDiscountPurchasedQuantity` and `CommitmentDiscountUnit`, respectively.

Monthly purchases are allocated across all corresponding charge periods of the term when `ChargeCateogry` is "Purchase", `ChargeFrequency` is "One-Time". and the commitment discount's purchase quantity, `CommitmentDiscountPurchasedQuantity`, and units, `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-01 00:00:00Z",
"BillingPeriodEndDate": "2023-02-01 00:00:00Z",
"ChargePeriodStartDate": "2023-01-01 00:00:00Z",
"ChargePeriodEndDate": "2024-01-01 00:00:00Z",
"ChargeCategory": "Purchase",
"ChargeFrequency": "One-Time",
"PricingCategory": "Committed",
"ResourceId": "<commitment-discount-id>",
"BilledCost": 8760.00,
"EffectiveCost": 0.00,
"CommitmentDiscountId": "<commitment-discount-id>",
"CommitmentDiscountPurchasedQuantity": 8760.00,
"CommitmentDiscountUnit": "USD"
}
]
```

#### Scenario #2: Monthly

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-01 00:00:00Z",
"BillingPeriodEndDate": "2023-02-01 00:00:00Z",
"ChargePeriodStartDate": "2023-01-01 00:00:00Z",
"ChargePeriodEndDate": "2023-01-01 01:00:00Z",
"ChargeCategory": "Purchase",
"ChargeFrequency": "Recurring",
"PricingCategory": "Committed",
"ResourceId": "<commitment-discount-id>",
"BilledCost": 1.00,
"EffectiveCost": 0.00,
"CommitmentDiscountId": "<commitment-discount-id>",
"CommitmentDiscountPurchasedQuantity": 1.00,
"CommitmentDiscountUnit": "USD"
},

/* ... more recurring purchase records ... */
]
```

#### Scenario #3: Hybrid (1/2 Upfront & 1/2 Monthly)

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 monthly purchase.

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

/* ... more recurring purchase records ... */
]
```

### 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, 4 types of scenarios can occur during a charge period:
cnharris10 marked this conversation as resolved.
Show resolved Hide resolved

* 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-01 00:00:00Z",
"BillingPeriodEndDate": "2023-02-01 00:00:00Z",
"ChargePeriodStartDate": "2023-01-01 00:00:00Z",
"ChargePeriodEndDate": "2023-01-01 01: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",
"CommitmentDiscountConsumedQuantity": 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.

```json
[
{
"BillingPeriodStartDate": "2023-01-01 00:00:00Z",
"BillingPeriodEndDate": "2023-02-01 00:00:00Z",
"ChargePeriodStartDate": "2023-01-01 00:00:00Z",
"ChargePeriodEndDate": "2023-01-01 01: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",
"CommitmentDiscountConsumedQuantity": 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-01 00:00:00Z",
"BillingPeriodEndDate": "2023-02-01 00:00:00Z",
"ChargePeriodStartDate": "2023-01-01 00:00:00Z",
"ChargePeriodEndDate": "2023-01-01 01: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",
"CommitmentDiscountConsumedQuantity": 0.75,
"CommitmentDiscountUnit": "USD"
},
{
"BillingPeriodStartDate": "2023-01-01 00:00:00Z",
"BillingPeriodEndDate": "2023-02-01 00:00:00Z",
"ChargePeriodStartDate": "2023-01-01 00:00:00Z",
"ChargePeriodEndDate": "2023-01-01 01: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",
"CommitmentDiscountConsumedQuantity": 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-01 00:00:00Z",
"BillingPeriodEndDate": "2023-02-01 00:00:00Z",
"ChargePeriodStartDate": "2023-01-01 00:00:00Z",
"ChargePeriodEndDate": "2023-01-01 01: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",
"CommitmentDiscountConsumedQuantity": 1.00,
"CommitmentDiscountUnit": "USD"
},
{
"BillingPeriodStartDate": "2023-01-01 00:00:00Z",
"BillingPeriodEndDate": "2023-02-01 00:00:00Z",
"ChargePeriodStartDate": "2023-01-01 00:00:00Z",
"ChargePeriodEndDate": "2023-01-01 01:00:00Z",
"ChargeCategory": "Usage",
"ChargeFrequency": "Usage-Based",
"PricingCategory": "Standard",
"ResourceId": "<resource-id>",
"ConsumedQuantity": 1,
"ConsumedUnit": "Hour",
"BilledCost": 0.50,
"EffectiveCost": 0.00
}
]
```
Loading