Skip to content

Commit

Permalink
Size flex
Browse files Browse the repository at this point in the history
  • Loading branch information
cnharris10 committed Aug 31, 2024
1 parent 93199b7 commit 133b2f9
Show file tree
Hide file tree
Showing 2 changed files with 177 additions and 0 deletions.
177 changes: 177 additions & 0 deletions specification/appendix/commitment_discounts/size_flexibility.md
Original file line number Diff line number Diff line change
@@ -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. <my-vm-id>) 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": "<my-large-vm-id>",
"BilledCost": 0.00,
"EffectiveCost": 1.00,
"SkuId": "VM_Large",
"CommitmentDiscountId": "<commitment-discount-id>",
"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": "<my-large-vm-id>",
"BilledCost": 0.00,
"EffectiveCost": 1.00,
"SkuId": "VM_Large",
"CommitmentDiscountId": "<commitment-discount-id>",
"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": "<my-medium-vm-id>",
"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": "<my-large-vm-id>",
"BilledCost": 0.00,
"EffectiveCost": 1.00,
"SkuId": "VM_Large",
"CommitmentDiscountId": "<commitment-discount-id>",
"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": "<my-medium-vm-id>",
"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": "<my-large-vm-id>",
"BilledCost": 0.00,
"EffectiveCost": 0.25,
"SkuId": "VM_Large",
"CommitmentDiscountId": "<commitment-discount-id>",
"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": "<my-large-vm-id>",
"BilledCost": 1.50,
"EffectiveCost": 0.00,
"SkuId": "VM_Medium"
}
]
```

0 comments on commit 133b2f9

Please sign in to comment.