diff --git a/specification/appendix/commitment_discounts.md b/specification/appendix/commitment_discounts/commitment_discounts.md similarity index 100% rename from specification/appendix/commitment_discounts.md rename to specification/appendix/commitment_discounts/commitment_discounts.md diff --git a/specification/appendix/commitment_discounts/size_flexibility.md b/specification/appendix/commitment_discounts/size_flexibility.md new file mode 100644 index 000000000..30c6a3948 --- /dev/null +++ b/specification/appendix/commitment_discounts/size_flexibility.md @@ -0,0 +1,177 @@ +# Size Flexibility + +A usage-based commitment discount commits a customer to a usage amount for one or more related SKUs in return for reduced rates. For example, when a customer purchases a usage-based commitment discount to cover a specific database SKU, this commitment will cover every hour over the term where at least one instance of this SKU is running. It can also cover eligible resources wholly where 1 hour is covered by 1 resource or partially where 1 committed hour can be split across multiple resources or 1 resource can be fully covered with unused commitment discount costs. These latter two examples are commonly known as *size-flexibility*. + +Since providers do not uniformly enable size flexibility based on the same SKU characteristics, the following, made-up SKU and SKU pricing attributes will be used in each example. Each example will also specify if a commitment discount does or does not have size-flexibility enabled. + +## SKUs & Rates + +The following, made-up SKU and SKU pricing attributes show that this provider has 1 service (i.e. Compute) that offers 1 virtual machine family with only 4 related, virtual machine SKUs at various list rates, committed rates, and normalization factors. Each SKUs normalization factor determines classifies it's relative size to its rate. Usage-based commitment discounts with size-flexibility can fully cover any combination of 1 or more SKUs where the sum of their normalization factor equals the normalization factor of the commitment discount. More on this later. + +| Service | SkuFamily | SkuId | ListUnitPrice | CommittedUnitPrice | NormalizationFactor | +| ------- | --------- | --------- | ------------- | ------------------ | ------------------- | +| Compute | VM | VM_Small | $0.50 | $0.25 | 1 | +| Compute | VM | VM_Medium | $1.00 | $0.50 | 2 | +| Compute | VM | VM_Large | $2.00 | $1.00 | 4 | +| Compute | VM | VM_XLarge | $4.00 | $2.00 | 8 | + +### Scenarios *without* size-flexibility + +#### Scenario #1: 100% utilization with matching resources + +Purchase: 1 commitment discount purchased for 1 year for 1 VM_Large. +Usage: 1 VM_Large resource runs from 2023-01-01 00:00:00 to 2023-01-01 01:00:00. + +The commitment discount covers the first charge period for 1 VM_Large resource (i.e. ) resulting in a $1 amortized cost. + +```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": "", + "BilledCost": 0.00, + "EffectiveCost": 1.00, + "SkuId": "VM_Large", + "CommitmentDiscountId": "", + "CommitmentDiscountStatus": "Used", + "CommitmentDiscountQuantity": 1, + "CommitmentDiscountUnit": "Hour" + } +] +``` + +#### Scenario #2: 0% utilization with a non-matching resource + +Purchase: 1 commitment discount purchased for 1 year for 1 VM_Large. +Usage: 1 VM_Medium resource runs from 2023-01-01 00:00:00 to 2023-01-01 01:00:00. + +The VM_Large commitment discount is unused since no VM_Large resources are running. Additionally, 1 hour of on-demand usage was incurred by the running VM_Medium resource. This unused commitment discount cost and on-demand cost results in a $2 amortized cost. + +```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": "", + "BilledCost": 0.00, + "EffectiveCost": 1.00, + "SkuId": "VM_Large", + "CommitmentDiscountId": "", + "CommitmentDiscountStatus": "Unused", + "CommitmentDiscountQuantity": 1, + "CommitmentDiscountUnit": "Hour" + }, + { + "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": "", + "BilledCost": 1.00, + "EffectiveCost": 0.00, + "SkuId": "VM_Medium" + } +] +``` + +### Scenarios *with* size-flexibility + +#### Scenario #1: 100% utilization with 2 VM_medium resources + +Purchase: 1 commitment discount purchased for 1 year for 1 VM_XLarge with a normalization factor or 8. +Usage: 2 VM_Medium resources run from 2023-01-01 00:00:00 to 2023-01-01 01:00:00 with a normalization factor of 4 for each resource. + +The VM_XLarge commitment discount fully covered 2 VM_Medium resources resulting in a $2 amortized cost. + +1 commitment discount for a VM_XLarge has a normalization factor of 8, and 2 VM_Medium resources have a normalization factor of 4, each. Therefore, with size flexibility, 1 VM_XLarge commitment discount can fully cover 2 VM_Medium resources. + +```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": "", + "BilledCost": 0.00, + "EffectiveCost": 1.00, + "SkuId": "VM_Large", + "CommitmentDiscountId": "", + "CommitmentDiscountStatus": "Used", + "CommitmentDiscountQuantity": 1, + "CommitmentDiscountUnit": "Hour" + }, + { + "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": "", + "BilledCost": 1.00, + "EffectiveCost": 0.00, + "SkuId": "VM_Medium" + } +] +``` + +#### Scenario #2: 100% utilization with 1 VM_Large resource + +Purchase: 1 commitment discount purchased for 1 year for 1 VM_Small with a normalization factor of 1. +Usage: 1 VM_Large resource runs from 2023-01-01 00:00:00 to 2023-01-01 01:00:00 with a noramlization factor of 4. + +The VM_Small commitment discount was fully utilizated but still only covered 25% of the VM_Large resource, so the rest of the VM incurred on-demand cost of $1.50, and the amortized cost for this resource is $1.75. + +```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": "", + "BilledCost": 0.00, + "EffectiveCost": 0.25, + "SkuId": "VM_Large", + "CommitmentDiscountId": "", + "CommitmentDiscountStatus": "Used", + "CommitmentDiscountQuantity": 1, + "CommitmentDiscountUnit": "Hour" + }, + { + "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": "", + "BilledCost": 1.50, + "EffectiveCost": 0.00, + "SkuId": "VM_Medium" + } +] +```