diff --git a/.github/ISSUE_TEMPLATE/feedback.yml b/.github/ISSUE_TEMPLATE/feedback.yml new file mode 100644 index 000000000..8ec5572b6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feedback.yml @@ -0,0 +1,61 @@ +name: FinOps Use Case Feedback +description: Provide feedback on FinOps use cases that cannot be performed with the current FOCUS specification. +title: "[FEEDBACK]: " +labels: ["feedback", "use-case"] +assignees: ["mike-finopsorg,udam-f2"] +body: + - type: markdown + attributes: + value: "The FOCUS working group wants to understand what FinOps use cases cannot be performed today using the current specification so they can be prioritized for upcoming release. Please do not provide any information that may be considered Intellectual Property by any individual or organization." + + - type: input + attributes: + label: Proposed Change + description: Short description of the change and why it is necessary. + placeholder: Describe the proposed change briefly and why it is necessary + validations: + required: true + + - type: textarea + attributes: + label: What FinOps use cases cannot be performed without the proposed change? + description: Describe in detail the current FinOps use cases your organization cannot perform without the proposed change + validations: + required: true + + - type: input + attributes: + label: Which FinOps personas perform this use case? + description: List one or more FinOps personas that perform this use case + placeholder: e.g., Cost Analyst, Cloud Architect, etc + validations: + required: true + + - type: input + attributes: + label: For which providers do you perform this use case for? + description: List each provider separated by commas + placeholder: e.g., AWS, Azure, GCP, Snowflake, etc + validations: + required: true + + - type: dropdown + attributes: + label: Criticality Scale + description: On a scale of 1 - 4, how critical is this for your organization? + options: + - '1: Blocks my organization from adopting FOCUS' + - '2: Important for adoption in the next 3-6 months' + - '3: Important for adoption in the next 6-12 months' + - '4: Suggestion, not planning to use FOCUS soon' + validations: + required: true + + - type: textarea + attributes: + label: Context / Supporting information + description: Provide any other relevant information here + placeholder: Additional details... + validations: + required: true + diff --git a/.github/ISSUE_TEMPLATE/proposal.md b/.github/ISSUE_TEMPLATE/proposal.md deleted file mode 100644 index 539c663fa..000000000 --- a/.github/ISSUE_TEMPLATE/proposal.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -name: Proposal -about: Community proposal to add / enhance the specification -title: "[Proposal] Title for proposal" -labels: proposal -assignees: '' - ---- - -### Type -> Type of issue (e.g. Dimension, Metric, Attribute, Documentation etc.) - -### Proposed Change -> Description of the issue - -### Context / Supporting information ->Description of the issue diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..67e26dd9d --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,35 @@ +# Contributing to the FOCUS Specification + +This repository represents the written spec, not working code. As such, most people will not need any development environment - most of the work around the spec happens in regularly scheduled discussions and issues here in Github. If you wish to get involved please see the [FinOps Foundation website](https://focus.finops.org/) and consider [signing the CLA](https://github.com/FinOps-Open-Cost-and-Usage-Spec/EasyCLA). + +Please see the [contribution policy](https://github.com/FinOps-Open-Cost-and-Usage-Spec/foundation/blob/main/contributing.md) for more information. + +## FOCUS Specification Development Environment + +The following is mostly needed by the FinOps Foundation staff members who maintain the FOCUS Repositories and associated document build pipelines. Currently, the only tested (supported) environment is a MacOS setup, however the build pipeline in GitHub uses Ubuntu so should be possible to run on a Linux environment. + +### Setup Steps + +1. Install homebrew (as per: https://brew.sh) +2. Setup cask + + `brew install cask` +3. Install python + + `brew install python` +4. Add packages for python + + `pip3 install -r requirements.txt` +5. Install pandoc and required filter library + + `brew install pandoc` + + `brew install --cask wkhtmltopdf` +6. If your machine does not have git/make etc, you might fun the following: Install developer command line tools for MacOS + + `xcode-select --install` + +### Assembling the specification locally + +1. Move into the `specification` folder +2. Use make to generate the spec `make` diff --git a/README.md b/README.md index 3e5a940f7..fd92a2516 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,18 @@ # FinOps Open Cost and Usage Specification (FOCUS) - Specification Working Group -The Open Cloud Bill working group will develop a common, source-neutral schema of -billing, cost, usage, and observability data mapped to a variety of cloud service provider and SaaS product -sources, with metadata, dimensions, metrics, and measures for the source and common schema fields. As per the [Working Group Charter]() **Link TBC** +## Overview + +The FinOps Open Cost and Usage Specification (FOCUS) is a community-driven effort to develop a standard schema for cloud, SaaS, and other billing data. The primary goal of the FOCUS specification is to make it easier to understand, report on, and manage cloud costs. The FOCUS specification is intended to be adaptable across a variety of cloud service provider and SaaS product sources and defines columns (dimensions and metrics), column-specific requirements, and attributes (spec-wide requirements). This repo also provides supporting content that includes example mappings between well-known provider datasets and what's defined in the FOCUS specification. + +The vision of the FOCUS project is to help the cloud and SaaS industry move toward a common vocabulary around usage and billing data. This will not only help FinOps professionals in the analysis of billing data from disparate sources but will also help software engineering teams by providing a target format for the usage and billing data that their products will generate. + +Some of the usecases this capability can enable: + +- The FOCUS spec will make it easier for FinOps practitioners to approach a new billing data source, as common concepts have been mapped to the common vocabulary of the spec. +- The FOCUS spec will make it easier to merge multiple billing data sources together, and perform cross-cloud and cross-vendor analysis and cost reporting. +- The FOCUS spec should make it easier to open source more FinOps visibility tools, and to accelerate the FinOps framework capability of data ingestion and normalization. + +[Working Group Charter]() **Link TBC** ## Notation Conventions and Compliance @@ -37,32 +47,3 @@ See the [project repository](https://github.com/FinOps-Open-Cost-and-Usage-Spec/ - [Change / contribution process](https://github.com/FinOps-Open-Cost-and-Usage-Spec/foundation/blob/main/contributing.md) -## FOCUS Specification Development Environment - -Most people will not need any development environment, it is mostly needed by the FinOps Foundation staff members who maintain the FOCUS Repositories and associated document build pipelines. Currently, the only tested (supported) environment is a MacOS setup, however the build pipeline in GitHub uses Ubuntu so should be possible to run on a Linux environment. - -### Setup Steps - -1. Install homebrew (as per: https://brew.sh) -2. Setup cask - - `brew install cask` -3. Install python - - `brew install python` -4. Add packages for python - - `pip3 install -r requirements.txt` -5. Install pandoc and required filter library - - `brew install pandoc` - - `brew install --cask wkhtmltopdf` -6. If your machine does not have git/make etc, you might fun the following: Install developer command line tools for MacOS - - `xcode-select --install` - -### Assembling the specification locally - -1. Move into the `specification` folder -2. Use make to generate the spec `make` diff --git a/RELEASE-PLANNING.md b/RELEASE-PLANNING.md new file mode 100644 index 000000000..b0cdb69f2 --- /dev/null +++ b/RELEASE-PLANNING.md @@ -0,0 +1,50 @@ +## Release Planning +This estimated time line was approved by the Members working group on the Feb 29 meeting. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Estimated Timeline v1.0
DateTasksComments
Feb 28 - Mar 11Consistency ReviewOpportunity for everyone to review what has been agreed upon in the working-draft branch.
Lock scope for v1.0.
Mar 12 - Apr 22Drive v1.0 milestone issues to completionIncoming issues will be prioritized by maintainers. Only P0 and some P1 issues will get added to the v1.0 milestone. Prioritization will take voting and comments in issues into consideration
Apr 23 - Apr 30Final Consistency ReviewFreeze working-draft.
Final review, only expecting editorial comments.
May 2Release Candidate Approve by the WG Members
May 2 - May 31IPR ReviewMembers may exclude any Essential Claims from their licensing commitments during this period.
Jun 3Steering Committee Ratifies the Release
Jun 20FinOps X: Onstage FOCUS Adoption stories
diff --git a/specification/columns/pricingquantity.md b/specification/columns/pricingquantity.md index fa895858f..a2435dec3 100644 --- a/specification/columns/pricingquantity.md +++ b/specification/columns/pricingquantity.md @@ -1,6 +1,6 @@ # Pricing Quantity -The Pricing Quantity represents the volume of a given [*resource*](#glossary:resource) or [*service*](#glossary:service) used or purchased based on the [Pricing Unit](#pricingunit). Distinct from [Usage Quantity](#usagequantity) (complementary to [Usage Unit](#usageunit)), it focuses on pricing and cost, not *resource* and *service* consumption. +The Pricing Quantity represents the volume of a given SKU associated with a [*resource*](#glossary:resource) or [*service*](#glossary:service) used or purchased, based on the [Pricing Unit](#pricingunit). Distinct from [Usage Quantity](#usagequantity) (complementary to [Usage Unit](#usageunit)), it focuses on pricing and cost, not *resource* and *service* consumption. PricingQuantity MUST be present in the billing data. This column MUST be of type Decimal and MUST conform to [Numeric Format](#numericformat). The value MAY be negative in cases where [ChargeSubcategory](#chargesubcategory) is "Refund". This column MUST NOT be null if [SkuPriceId](#skupriceid) is not null and MUST be null if SkuPriceId is null. When unit prices are not null, multiplying PricingQuantity by a unit price MUST produce a result equal to the corresponding cost metric. @@ -14,7 +14,7 @@ Pricing Quantity ## Description -The volume of a given *resource* or *service* used or purchased based on the Pricing Unit. +Volume of a given SKU associated with a *resource* or *service* used or purchased, based on the Pricing Unit. ## Content constraints diff --git a/specification/columns/pricingunit.md b/specification/columns/pricingunit.md index 66a6fd497..26ee4c91f 100644 --- a/specification/columns/pricingunit.md +++ b/specification/columns/pricingunit.md @@ -1,8 +1,8 @@ # Pricing Unit -The Pricing Unit represents a provider-specified measurement unit for determining unit prices, indicating how a provider rates measured usage and purchase quantities considering pricing rules like [*block pricing*](#glossary:block-pricing). Common examples include the number of hours for compute appliance runtime (e.g. `Hours`), gigabyte-hours for a storage appliance (e.g., `GB-Hours`), or an accumulated count of requests for a network appliance or API service (e.g., `1000 Requests`). Pricing Unit complements the [Pricing Quantity](#pricingquantity) metric. Distinct from the [Usage Unit](#usageunit), it focuses on pricing and cost, not [*resource*](#glossary:resource) and [*service*](#glossary:service) consumption, often at a coarser granularity. +The Pricing Unit represents a provider-specified measurement unit for determining unit prices, indicating how a provider rates measured usage and purchase quantities after applying pricing rules like [*block pricing*](#glossary:block-pricing). Common examples include the number of hours for compute appliance runtime (e.g. `Hours`), gigabyte-hours for a storage appliance (e.g., `GB-Hours`), or an accumulated count of requests for a network appliance or API service (e.g., `1000 Requests`). Pricing Unit complements the [Pricing Quantity](#pricingquantity) metric. Distinct from the [Usage Unit](#usageunit), it focuses on pricing and cost, not [*resource*](#glossary:resource) and [*service*](#glossary:service) consumption, often at a coarser granularity. -The PricingUnit column MUST be present in the billing data. This column MUST be of type String. It MUST NOT be null if [SkuPriceId](#skupriceid) is not null and MUST be null if SkuPriceId is null. Units of measure used in PricingUnit SHOULD adhere to the values and format requirements specified in the [UnitFormat](#unitformat) attribute. +The PricingUnit column MUST be present in the billing data. This column MUST be of type String. The value MUST NOT be null if [SkuPriceId](#skupriceid) is not null and MUST be null if SkuPriceId is null. Units of measure used in PricingUnit SHOULD adhere to the values and format requirements specified in the [UnitFormat](#unitformat) attribute. The PricingUnit value MUST be semantically equal to the corresponding pricing measurement unit value provided in: @@ -19,7 +19,7 @@ Pricing Unit ## Description -A provider-specified measurement unit for determining unit prices, indicating how a provider rates measured usage and purchase quantities after applying pricing rules like *block pricing*. +Provider-specified measurement unit for determining unit prices, indicating how a provider rates measured usage and purchase quantities after applying pricing rules like *block pricing*. ## Content constraints diff --git a/specification/columns/subaccountid.md b/specification/columns/subaccountid.md index c66f24f9e..d3f1b27f1 100644 --- a/specification/columns/subaccountid.md +++ b/specification/columns/subaccountid.md @@ -2,7 +2,7 @@ A Sub Account ID is a provider assigned identifier assigned to a [*sub account*](#glossary:sub-account). Sub account ID is commonly used for scenarios like grouping based on organizational constructs, access management needs, and cost allocation strategies. -The SubAccountId column MUST be present in the billing data. This column MUST be of type String. If a provider supports a *sub account* construct, that value MUST appear in this column. If a provider does not support a *sub account* construct (only has a *billing account*](#glossary:billing-account)) or does support a *sub account* construct, but the charge does not apply to a *sub account*, the SubAccountId column MUST be null. +The SubAccountId column MUST be present in the billing data. This column MUST be of type String. If a provider supports a *sub account* construct, that value MUST appear in this column. If a provider does not support a *sub account* construct (only has a [*billing account*](#glossary:billing-account)) or does support a *sub account* construct, but the charge does not apply to a *sub account*, the SubAccountId column MUST be null. See [Appendix: Grouping constructs for resources or services](#groupingconstructsforresourcesorservices) for details and examples of the different grouping constructs supported by FOCUS. diff --git a/specification/columns/usagequantity.md b/specification/columns/usagequantity.md index f9c6a258b..5efb85d7c 100644 --- a/specification/columns/usagequantity.md +++ b/specification/columns/usagequantity.md @@ -1,8 +1,8 @@ # Usage Quantity -The Usage Quantity represents the volume of a given [*resource*](#glossary:resource) or [*service*](#glossary:service) used or purchased based on the [Usage Unit](#usageunit). Usage Quantity is often derived at a finer granularity or over a different time interval when compared to the [Pricing Quantity](#pricingquantity) (complementary to [Pricing Unit](#pricingunit)), and focuses on *resource* and *service* consumption, not pricing and cost. +The Usage Quantity represents the volume of a given SKU associated with a [*resource*](#glossary:resource) or [*service*](#glossary:service) used or purchased, based on the [Usage Unit](#usageunit). Usage Quantity is often derived at a finer granularity or over a different time interval when compared to the [Pricing Quantity](#pricingquantity) (complementary to [Pricing Unit](#pricingunit)), and focuses on *resource* and *service* consumption, not pricing and cost. -UsageQuantity MUST be present in the billing data. This column MUST be of type Decimal and MUST conform to [Numeric Format](#numericformat). The value MAY be negative in cases where [ChargeSubcategory](#chargesubcategory) is "Refund". This column MUST NOT contain null values when [SkuPriceId](#skupriceid) is not null. +UsageQuantity MUST be present in the billing data. This column MUST be of type Decimal and MUST conform to [Numeric Format](#numericformat). The value MAY be negative in cases where [ChargeSubcategory](#chargesubcategory) is "Refund". This column MUST NOT be null if [SkuPriceId](#skupriceid) is not null and MUST be null if SkuPriceId is null. ## Column ID @@ -14,7 +14,7 @@ Usage Quantity ## Description -Volume of a given *resource* or *service* used or purchased based on the [Usage Unit](#usageunit). +Volume of a given SKU associated with a *resource* or *service* used or purchased, based on the Usage Unit. ## Content constraints diff --git a/specification/columns/usageunit.md b/specification/columns/usageunit.md index b53647360..0939b7ef4 100644 --- a/specification/columns/usageunit.md +++ b/specification/columns/usageunit.md @@ -1,8 +1,8 @@ # Usage Unit -Usage Unit represents the units of a given [*resource*](#glossary:resource) or [*service*](#glossary:service) used or purchased in combination with [Usage Quantity](#usagequantity). Usage Unit is often listed at a finer granularity or over a different time interval when compared to the [Pricing Unit](#pricingunit) (complementary to [Pricing Quantity](#pricingquantity)), and focuses on *resource* and *service* consumption, not pricing and cost. +The Usage Unit represents a provider-specified measurement unit indicating how a provider measures usage or purchase of a given SKU associated with a [*resource*](#glossary:resource) or [*service*](#glossary:service). Usage Unit complements the [Usage Quantity](#usagequantity) metric. It is often listed at a finer granularity or over a different time interval when compared to the [Pricing Unit](#pricingunit) (complementary to [Pricing Quantity](#pricingquantity)), and focuses on *resource* and *service* consumption, not pricing and cost. -The UsageUnit column MUST be present in the billing data. This column MUST be of type String and MUST NOT contain null values when the [ChargeCategory](#chargecategory) is "Usage". Units of measure used in UsageUnit SHOULD adhere to the values and format requirements specified in the [UnitFormat](#unitformat) attribute. The UsageUnit column MUST NOT be used as the basis for determining values related to any pricing or cost metric. +The UsageUnit column MUST be present in the billing data. This column MUST be of type String. The value MUST NOT be null if [SkuPriceId](#skupriceid) is not null and MUST be null if SkuPriceId is null. Units of measure used in UsageUnit SHOULD adhere to the values and format requirements specified in the [UnitFormat](#unitformat) attribute. The UsageUnit column MUST NOT be used to determine values related to any pricing or cost metrics. ## Column ID @@ -14,7 +14,7 @@ Usage Unit ## Description -Units of a given *resource* or *service* used or purchased in combination with [Usage Quantity](#usagequantity). +Provider-specified measurement unit indicating how a provider measures usage or purchase of a given SKU associated with a *resource* or *service*. ## Content constraints