<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[The Finoperator]]></title><description><![CDATA[FinOps, architecture, cost optimization, and life in a small-ish startup]]></description><link>https://www.thefinoperator.com</link><image><url>https://substackcdn.com/image/fetch/$s_!dR1c!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fa29d1f-6dee-4357-9154-b0fd781dd25b_144x144.png</url><title>The Finoperator</title><link>https://www.thefinoperator.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 17 May 2026 00:55:50 GMT</lastBuildDate><atom:link href="https://www.thefinoperator.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[John Grubb]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[thefinoperator@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[thefinoperator@substack.com]]></itunes:email><itunes:name><![CDATA[John Grubb]]></itunes:name></itunes:owner><itunes:author><![CDATA[John Grubb]]></itunes:author><googleplay:owner><![CDATA[thefinoperator@substack.com]]></googleplay:owner><googleplay:email><![CDATA[thefinoperator@substack.com]]></googleplay:email><googleplay:author><![CDATA[John Grubb]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The January Problem]]></title><description><![CDATA[How do we deal with cloud vendor credits?]]></description><link>https://www.thefinoperator.com/p/the-january-problem</link><guid isPermaLink="false">https://www.thefinoperator.com/p/the-january-problem</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Mon, 30 Mar 2026 18:18:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!fHWZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e1e3de-0760-4bde-bca3-317143c93fce_3012x1138.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fHWZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e1e3de-0760-4bde-bca3-317143c93fce_3012x1138.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fHWZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e1e3de-0760-4bde-bca3-317143c93fce_3012x1138.png 424w, https://substackcdn.com/image/fetch/$s_!fHWZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e1e3de-0760-4bde-bca3-317143c93fce_3012x1138.png 848w, https://substackcdn.com/image/fetch/$s_!fHWZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e1e3de-0760-4bde-bca3-317143c93fce_3012x1138.png 1272w, https://substackcdn.com/image/fetch/$s_!fHWZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e1e3de-0760-4bde-bca3-317143c93fce_3012x1138.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fHWZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e1e3de-0760-4bde-bca3-317143c93fce_3012x1138.png" width="1456" height="550" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d9e1e3de-0760-4bde-bca3-317143c93fce_3012x1138.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:550,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:201070,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thefinoperator.com/i/191280790?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e1e3de-0760-4bde-bca3-317143c93fce_3012x1138.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fHWZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e1e3de-0760-4bde-bca3-317143c93fce_3012x1138.png 424w, https://substackcdn.com/image/fetch/$s_!fHWZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e1e3de-0760-4bde-bca3-317143c93fce_3012x1138.png 848w, https://substackcdn.com/image/fetch/$s_!fHWZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e1e3de-0760-4bde-bca3-317143c93fce_3012x1138.png 1272w, https://substackcdn.com/image/fetch/$s_!fHWZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e1e3de-0760-4bde-bca3-317143c93fce_3012x1138.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So, I&#8217;m solving &#8220;the January problem&#8221; today at my current employer, except that here it&#8217;s a February-March problem.  To refresh our memory, this happens when you have a long term commitment with a cloud vendor that contains a provision for some kind of promotional credits to be applied to your bill.  I&#8217;m not a fan of these credits but I understand why they exist and also that nobody cares what FinOps thinks about the arrangement.  I&#8217;ve experienced this with two vendors so far - AWS and GCP - and they tend to make it rain on your bill to varying extents that can appear to zero out the cost of your bill on a cash basis.  It looks basically like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UR4K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6381a93f-2689-4c7c-a5a3-5d8fb553f20a_3024x1184.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UR4K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6381a93f-2689-4c7c-a5a3-5d8fb553f20a_3024x1184.png 424w, https://substackcdn.com/image/fetch/$s_!UR4K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6381a93f-2689-4c7c-a5a3-5d8fb553f20a_3024x1184.png 848w, https://substackcdn.com/image/fetch/$s_!UR4K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6381a93f-2689-4c7c-a5a3-5d8fb553f20a_3024x1184.png 1272w, https://substackcdn.com/image/fetch/$s_!UR4K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6381a93f-2689-4c7c-a5a3-5d8fb553f20a_3024x1184.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UR4K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6381a93f-2689-4c7c-a5a3-5d8fb553f20a_3024x1184.png" width="1456" height="570" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6381a93f-2689-4c7c-a5a3-5d8fb553f20a_3024x1184.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:570,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:162562,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thefinoperator.com/i/191280790?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6381a93f-2689-4c7c-a5a3-5d8fb553f20a_3024x1184.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UR4K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6381a93f-2689-4c7c-a5a3-5d8fb553f20a_3024x1184.png 424w, https://substackcdn.com/image/fetch/$s_!UR4K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6381a93f-2689-4c7c-a5a3-5d8fb553f20a_3024x1184.png 848w, https://substackcdn.com/image/fetch/$s_!UR4K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6381a93f-2689-4c7c-a5a3-5d8fb553f20a_3024x1184.png 1272w, https://substackcdn.com/image/fetch/$s_!UR4K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6381a93f-2689-4c7c-a5a3-5d8fb553f20a_3024x1184.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">not loving the gentle upward trend line that I&#8217;m seeing here, I don&#8217;t think that&#8217;s all due to AI, but thats for another post&#8230;</figcaption></figure></div><p>This was not a hot button issue for me until lately when - yes, it can happen to you too! - some members of the engineering staff started asking me why some numbers they were looking at weren&#8217;t there for the last several days.  I blamed Google but then a few days later remembered that it was that magical time of year.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thefinoperator.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Finoperator! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>I hacked around the missing data to get the reporting back up for a minute while I circled back to the real solution to this problem, which is to amortize those credits back into the bill.  Here&#8217;s the general idea.</p><h2>Rough methodology</h2><p>It&#8217;s not really that tricky, but if you&#8217;ve never been an infrastructure person telling the Finance team how this is going to go, it can feel a little awkward at first.  Here&#8217;s the methodology I recommend, at least as a conversation starter.</p><p>These credits are <em>probably</em> delivered to you on some kind of annual cycle (check your contract).  This means that a 12 month amortization window is a reasonable choice.  So here&#8217;s what might you do - </p><ul><li><p>Sum up all of the promotional credits that you received at a monthly granularity going back as far as you&#8217;re able.  Calculate a 12 month <em>moving average</em> of this number OR just divide this number by 12.</p></li><li><p>Sum up all of your costs <em>excluding</em> those credits at the same monthly granularity.  </p></li><li><p>Divide the 12 month moving average by the monthly cost number to arrive at the &#8220;credit discount percentage&#8221;.</p></li><li><p>Discount your costs by that number monthly, <em>et voila</em></p></li></ul><p>Some visual examples, to make this a little more tangible.</p><p>Let&#8217;s say you have $600k in annual credits, and an average annual spend of $12M.  That would zero out roughly 2 weeks of cloud costs, and otherwise inflate the remaining costs by approximately 5% over what they should actually be.  </p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/3kWQU/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a4459934-71f3-40f9-9b6c-f86d43fa5614_1220x1358.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dec53db7-1a39-45a8-b44b-76cb737c7b96_1220x1358.png&quot;,&quot;height&quot;:678,&quot;title&quot;:&quot;Created with Datawrapper&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/3kWQU/1/" width="730" height="678" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>After amortizing that credit forward, and applying a discount percentage to your list cost you get a truer, smoother representation of the actual cost of your resources.  Put another way - the yellow bars are the very spiky credits, where as the purple area is the 12 month average - 12m MA.  In effect, the 12m MA is what you subtract from your monthly costs, and you put the transient credit data to the side.  This resulting metric is what I call the &#8220;effective cost&#8221; around here.</p><h2>To the SQL</h2><p>We&#8217;ll use the GCP bill as the example here, since that&#8217;s what I&#8217;m working with.  I handle this in two separate models, though you could conceivably handle this in a CTE in your GCP billing model.  Ours is &#8230; voluminous, so I materialize all these queries as tables in DBT.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;sql&quot;,&quot;nodeId&quot;:&quot;5b5723a7-ef24-40ad-8fb1-0cf66b375157&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-sql">WITH source AS (
    SELECT
        invoice.month AS invoice_month,
        seller_name,

        -- The base charge before any credits are applied
        cost,

        -- Promotional credits only (annual service credits, BDR credits, POC credits, etc.)
        -- These are the lump-sum credits we want to smooth out via amortization
        (
            SELECT SUM(CAST(amount AS NUMERIC))
            FROM UNNEST(credits)
            WHERE type = 'PROMOTION'
        ) AS credit_promotion_amount,

        -- All other credits (CUDs, SUDs, discounts) &#8212; kept separate because these
        -- reflect real negotiated pricing and should NOT be amortized away
        (
            SELECT SUM(CAST(amount AS NUMERIC))
            FROM UNNEST(credits)
            WHERE type != 'PROMOTION'
        ) AS credits_total_less_promotions

    -- GCP billing export is pinned (each row lives in exactly one partition),
    -- so a plain full-table scan is correct &#8212; no deduplication needed
    FROM `your-billing-data.table`
),

monthly AS (
    SELECT
        invoice_month,

        -- Flip to positive: credit amounts are negative in the export
        ABS(SUM(COALESCE(credit_promotion_amount, 0))) AS monthly_promotional_credit,

        -- Operational cost = what we'd pay Google without any promotional credits.
        -- Formula: cost (net of all credits) + non-promo credits added back
        -- = gross cost minus only the CUD/SUD/discount credits = pre-promo spend.
        --
        -- Third-party sellers (Marketplace) are excluded because they
        -- never receive promotional credits, so including them would dilute the
        -- discount factor and make it look smaller than it really is for Google spend.
        SUM(
            CASE
                WHEN COALESCE(seller_name, 'Google') = 'Google'
                THEN cost + COALESCE(credits_total_less_promotions, 0)
                ELSE 0
            END
        ) AS monthly_operational_cost

    FROM source
    GROUP BY invoice_month
),

final AS (
    SELECT
        PARSE_DATE('%Y%m', invoice_month) AS invoice_month,
        monthly_promotional_credit,
        monthly_operational_cost,

        -- Rolling sum of promotional credits over the trailing 12 months
        SUM(monthly_promotional_credit)
            OVER (ORDER BY invoice_month ROWS BETWEEN 11 PRECEDING AND CURRENT ROW)
            AS promotional_credit_trailing_12m_total,

        -- Amortized monthly share: always divide by 12 (not the actual window size)
        -- so that early months with a partial window aren't over-weighted
        SUM(monthly_promotional_credit)
            OVER (ORDER BY invoice_month ROWS BETWEEN 11 PRECEDING AND CURRENT ROW)
            / 12.0 AS avg_monthly_promotional_credit_trailing_12m,

        -- Sanity-check: amortized credit as a % of that month's operational cost
        ROUND(
            SAFE_DIVIDE(
                SUM(monthly_promotional_credit)
                    OVER (ORDER BY invoice_month ROWS BETWEEN 11 PRECEDING AND CURRENT ROW) / 12.0,
                monthly_operational_cost
            ) * 100, 4
        ) AS promotional_credit_pct_of_operational_cost,

        -- The multiplier to apply downstream:
        --   amortized_cost = operational_cost * credit_adjustment_factor
        -- A factor of 0.91 means ~9% of gross spend is covered by amortized credits
        ROUND(
            1 - SAFE_DIVIDE(
                SUM(monthly_promotional_credit)
                    OVER (ORDER BY invoice_month ROWS BETWEEN 11 PRECEDING AND CURRENT ROW) / 12.0,
                monthly_operational_cost
            ), 6
        ) AS credit_adjustment_factor

    FROM monthly
)

SELECT * FROM final
ORDER BY invoice_month
</code></pre></div><p>And the entire routine, including the preceding query as a CTE:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;sql&quot;,&quot;nodeId&quot;:&quot;ec4d5178-1673-4392-b16b-852cfb816959&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-sql">WITH amortization AS (
    -- Trailing 12-month average of promotional credits as a fraction of spend.
    -- This smooths lump-sum credits (e.g. the ~$1.3M annual service credit applied
    -- every Feb/Mar) evenly across all months so no single month looks artificially cheap.
    SELECT
        PARSE_DATE('%Y%m', invoice_month) AS invoice_month,
        ROUND(
            1 - SAFE_DIVIDE(
                SUM(ABS(SUM(COALESCE(credit_promotion_amount, 0))))
                    OVER (ORDER BY invoice_month ROWS BETWEEN 11 PRECEDING AND CURRENT ROW) / 12.0,
                SUM(SUM(CASE
                    WHEN COALESCE(seller_name, 'Google') = 'Google'
                    THEN cost + COALESCE(credits_total_less_promotions, 0)
                    ELSE 0
                END)) OVER (ORDER BY invoice_month)
            ), 6
        ) AS credit_adjustment_factor
    FROM (
        SELECT
            invoice.month AS invoice_month,
            seller_name,
            cost,
            (SELECT SUM(CAST(amount AS NUMERIC)) FROM UNNEST(credits) WHERE type = 'PROMOTION')
                AS credit_promotion_amount,
            (SELECT SUM(CAST(amount AS NUMERIC)) FROM UNNEST(credits) WHERE type != 'PROMOTION')
                AS credits_total_less_promotions
        FROM `your-billing-data.table`
    )
    GROUP BY invoice_month
),

billing AS (
    SELECT
        PARSE_DATE('%Y%m', invoice.month)                           AS invoice_month,
        seller_name,
        service.description                                         AS service_description,
        sku.description                                             AS sku_description,
        cost,
        (SELECT SUM(CAST(amount AS NUMERIC)) FROM UNNEST(credits))
                                                                    AS credits_total,
        (SELECT SUM(CAST(amount AS NUMERIC)) FROM UNNEST(credits) WHERE type != 'PROMOTION')
                                                                    AS credits_total_less_promotions,
        cost_at_list
    FROM `your-billing-data.table`
)

SELECT
    b.invoice_month,
    b.service_description,
    b.sku_description,

    -- What Google charges before any discounts
    SUM(b.cost_at_list)                                             AS list_cost,

    -- What we actually pay after CUDs, SUDs, and enterprise discounts
    -- (but BEFORE promotional credits are applied)
    SUM(b.cost + COALESCE(b.credits_total_less_promotions, 0))     AS operational_cost,

    -- Operational cost spread across 12 months of promotional credit value.
    -- Use this for COGS and unit cost calculations.
    SUM(
        (b.cost + COALESCE(b.credits_total_less_promotions, 0))
        * a.credit_adjustment_factor
    )                                                               AS effective_cost,

    -- What actually appeared on the invoice (all credits applied, no smoothing)
    SUM(b.cost + COALESCE(b.credits_total, 0))                     AS billed_cost

FROM billing b
LEFT JOIN amortization a USING (invoice_month)
WHERE COALESCE(b.seller_name, 'Google') = 'Google'
GROUP BY 1, 2, 3
ORDER BY b.invoice_month, effective_cost DESC
</code></pre></div><h2>The net result</h2><p>Here is the result of smoothing those credits out - the big spikes are how they arrive and the purple area is how we incorporate them into our bill.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!88mD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a6ebec4-b6a7-412a-aa45-53d5d116b471_2962x1320.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!88mD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a6ebec4-b6a7-412a-aa45-53d5d116b471_2962x1320.png 424w, https://substackcdn.com/image/fetch/$s_!88mD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a6ebec4-b6a7-412a-aa45-53d5d116b471_2962x1320.png 848w, https://substackcdn.com/image/fetch/$s_!88mD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a6ebec4-b6a7-412a-aa45-53d5d116b471_2962x1320.png 1272w, https://substackcdn.com/image/fetch/$s_!88mD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a6ebec4-b6a7-412a-aa45-53d5d116b471_2962x1320.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!88mD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a6ebec4-b6a7-412a-aa45-53d5d116b471_2962x1320.png" width="1456" height="649" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8a6ebec4-b6a7-412a-aa45-53d5d116b471_2962x1320.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:649,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:159758,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thefinoperator.com/i/191280790?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a6ebec4-b6a7-412a-aa45-53d5d116b471_2962x1320.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!88mD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a6ebec4-b6a7-412a-aa45-53d5d116b471_2962x1320.png 424w, https://substackcdn.com/image/fetch/$s_!88mD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a6ebec4-b6a7-412a-aa45-53d5d116b471_2962x1320.png 848w, https://substackcdn.com/image/fetch/$s_!88mD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a6ebec4-b6a7-412a-aa45-53d5d116b471_2962x1320.png 1272w, https://substackcdn.com/image/fetch/$s_!88mD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a6ebec4-b6a7-412a-aa45-53d5d116b471_2962x1320.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>In closing</h2><p>The January problem, regardless of when it visits your org, is really just a data quality problem in a finance costume.  The credits and their savings are real, but the mismatch between when and how they land, and when you consume resources over the source of a year can wreck your reporting (once people actually start looking at it).</p><p>Amortization is not one they typically teach in technical curricula, but it&#8217;s a fact of life in Finance.  Once you've had that conversation with Finance and gotten alignment on the methodology, you'll never have an engineering lead asking you why the numbers disappeared again.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thefinoperator.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Finoperator! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Cloud Discount Instruments: From Tactical to Strategic]]></title><description><![CDATA[A high level guide for engineering leads]]></description><link>https://www.thefinoperator.com/p/cloud-discount-instruments-from-tactical</link><guid isPermaLink="false">https://www.thefinoperator.com/p/cloud-discount-instruments-from-tactical</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Tue, 19 Aug 2025 13:33:29 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4d0f2eb0-f9dd-405e-936b-e679b585edbb_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>Introduction</strong></h2><p>Cloud discount instruments fall into two main categories: tactical tools available to all customers, and strategic agreements for high-volume users. Understanding both is essential for effective FinOps management, as these instruments can deliver substantial savings but also create long-term commitments that affect operational flexibility.</p><p>This guide covers the spectrum from basic reservations through enterprise discount programs, explaining how each works, their benefits, and their potential drawbacks.</p><h2><strong>Tactical Instruments: Reservations and Savings Plans</strong></h2><p>These discount mechanisms are available to all cloud customers and typically focus on compute resources and compute-adjacent services like managed databases. They represent the most visible tools in the FinOps toolkit, offering significant discounts in exchange for usage commitments.</p><h3><strong>Resource-Based Discounts (The First Generation)</strong></h3><p><strong>AWS and Azure:</strong> Called "Reservations"<br> <strong>GCP:</strong> Called "Committed Use Discounts" (CUDs)</p><p>These original discount instruments work by "reserving" specific instance types or families. You commit to using a particular configuration for one or three years, with three-year commitments typically offering discounts up to 70% off on-demand pricing.</p><p>The fundamental challenge with resource-based discounts becomes apparent at scale. You're essentially managing a complex inventory matching system where thousands of virtual machines must align with specific reservation configurations. If you need to upgrade an instance type, your existing reservation becomes invalid, creating a double penalty where you pay both for the new on-demand instance and the unused reservation.</p><p>Amazon attempted to address this with "convertible reservations," but these still required constant management of both resource inventory and reservation inventory, making them impractical for dynamic environments.</p><h3><strong>Spend-Based Discounts (The Evolution)</strong></h3><p><strong>AWS and Azure:</strong> Called "Savings Plans"<br> <strong>GCP:</strong> Called "Flex CUDs"</p><p>The industry evolved toward spend-based commitments to solve the inventory management problem. Instead of committing to specific instance types, you commit to an hourly spend amount for one or three years.</p><p>For example, if you consistently spend $100 per hour on compute resources, you can purchase a three-year Savings Plan that discounts that spend by approximately 50%, reducing your effective hourly cost to $50. Crucially, this discount applies regardless of which specific instance types you use, as long as your total eligible spend meets the commitment level.</p><p>The advantages of this approach are significant. You eliminate the chronic mismatch problem where you're simultaneously paying for unused reservations and on-demand instances. You're now managing a single pool of committed spend rather than hundreds of individual resource reservations. Additionally, you're free to upgrade to newer, more efficient instance types without losing your discount, which benefits both your performance and the cloud provider's hardware refresh cycles.</p><h3><strong>Payment Structure and Financial Considerations</strong></h3><p>Both reservation types offer payment flexibility that requires collaboration between FinOps and Finance teams. Most cloud providers allow you to pay zero, fifty, or one hundred percent of your commitment upfront, with deeper discounts available for full upfront payment.</p><p>The financial calculation becomes a time-value-of-money analysis. In low-interest-rate environments, paying upfront for deeper discounts makes sense. In higher-interest-rate environments, you must weigh the additional discount against the opportunity cost of tying up that capital.</p><p>If you choose partial or no-upfront payment, you'll have recurring charges equal to your commitment minus any upfront payment, billed hourly throughout the commitment term.</p><h3><strong>The Optimization Paradox</strong></h3><p>Commitment-based discounts create an interesting challenge in optimization-focused environments. During growth phases, expanding commitments is straightforward. However, when business priorities shift toward efficiency and cost reduction, these commitments can become constraints.</p><p>If you successfully optimize your infrastructure and reduce resource usage, you may find yourself paying for committed capacity you no longer need. This creates a situation where optimization efforts improve resource efficiency but potentially increase per-unit costs due to unused commitments. The key is coordinating capacity planning with commitment management to avoid this trap.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thefinoperator.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading, please consider subscribing if you don&#8217;t already :)</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Strategic Instruments: Enterprise Discount Programs (EDPs)</strong></h2><p>Once annual cloud spend crosses significant thresholds - typically around $1 million - organizations should explore enterprise discount programs. These function similarly to enterprise sales relationships in other industries, offering deeper discounts in exchange for larger, longer-term commitments.</p><h3><strong>Comprehensive Discount Coverage</strong></h3><p>The primary attraction of EDPs is their breadth. While tactical instruments mostly cover compute resources, EDPs typically offer discounts across your entire cloud bill. This includes storage, networking, data transfer, managed services, and all the ancillary costs that accumulate in cloud environments.</p><p>These discounts are substantial - often 10-15% across everything&#8212;and stack with existing savings plans and reservations. For compute resources already discounted 50% through savings plans, an additional EDP discount can bring total savings to 60% or more off list prices.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!L08n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52aed4b6-5437-4721-b26b-7f4acbeabbff_2226x446.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!L08n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52aed4b6-5437-4721-b26b-7f4acbeabbff_2226x446.png 424w, https://substackcdn.com/image/fetch/$s_!L08n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52aed4b6-5437-4721-b26b-7f4acbeabbff_2226x446.png 848w, https://substackcdn.com/image/fetch/$s_!L08n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52aed4b6-5437-4721-b26b-7f4acbeabbff_2226x446.png 1272w, https://substackcdn.com/image/fetch/$s_!L08n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52aed4b6-5437-4721-b26b-7f4acbeabbff_2226x446.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!L08n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52aed4b6-5437-4721-b26b-7f4acbeabbff_2226x446.png" width="1456" height="292" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52aed4b6-5437-4721-b26b-7f4acbeabbff_2226x446.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:292,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:91294,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thefinoperator.com/i/171305648?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52aed4b6-5437-4721-b26b-7f4acbeabbff_2226x446.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!L08n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52aed4b6-5437-4721-b26b-7f4acbeabbff_2226x446.png 424w, https://substackcdn.com/image/fetch/$s_!L08n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52aed4b6-5437-4721-b26b-7f4acbeabbff_2226x446.png 848w, https://substackcdn.com/image/fetch/$s_!L08n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52aed4b6-5437-4721-b26b-7f4acbeabbff_2226x446.png 1272w, https://substackcdn.com/image/fetch/$s_!L08n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52aed4b6-5437-4721-b26b-7f4acbeabbff_2226x446.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3><strong>Credits and Additional Benefits</strong></h3><p>Most EDP agreements include annual credit allocations that function like prepaid account credits. These credits can represent an additional 3-7% savings on annual spend when applied strategically. However, credits require careful management as they typically expire annually and must be consumed within specific timeframes.</p><h3><strong>The Commitment Structure</strong></h3><p>EDPs require substantial annual spending commitments, typically structured as minimum annual targets over multi-year periods. These commitments are designed to be achievable only for organizations in consistent growth mode, which aligns with the cloud provider's revenue goals but can create challenges when business priorities shift.</p><p>The total contract value usually exceeds the sum of annual minimums, creating additional financial obligations. A four-year agreement with $5 million annual minimums might have a $25+ million total contract value, effectively increasing the true annual commitment.</p><h3><strong>Shortfall Mechanisms and Their Implications</strong></h3><p>When organizations fail to meet annual spending targets, providers typically invoice the shortfall amount. However, this often functions as an accounting mechanism rather than a pure penalty. The shortfall payment is usually applied back to the account as credits, but these credits can create a problematic cycle.</p><p>Credits reduce your billed usage, which counts toward your commitment target. If you're already struggling to meet spending minimums, receiving credits actually makes it harder to reach future targets, potentially creating a downward spiral of shortfalls and additional credit accumulation.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!L-73!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b52f22b-7a4c-441d-ba74-60b64dc4d90c_2202x420.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!L-73!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b52f22b-7a4c-441d-ba74-60b64dc4d90c_2202x420.png 424w, https://substackcdn.com/image/fetch/$s_!L-73!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b52f22b-7a4c-441d-ba74-60b64dc4d90c_2202x420.png 848w, https://substackcdn.com/image/fetch/$s_!L-73!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b52f22b-7a4c-441d-ba74-60b64dc4d90c_2202x420.png 1272w, https://substackcdn.com/image/fetch/$s_!L-73!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b52f22b-7a4c-441d-ba74-60b64dc4d90c_2202x420.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!L-73!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b52f22b-7a4c-441d-ba74-60b64dc4d90c_2202x420.png" width="1456" height="278" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b52f22b-7a4c-441d-ba74-60b64dc4d90c_2202x420.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:278,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:82977,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thefinoperator.com/i/171305648?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b52f22b-7a4c-441d-ba74-60b64dc4d90c_2202x420.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!L-73!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b52f22b-7a4c-441d-ba74-60b64dc4d90c_2202x420.png 424w, https://substackcdn.com/image/fetch/$s_!L-73!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b52f22b-7a4c-441d-ba74-60b64dc4d90c_2202x420.png 848w, https://substackcdn.com/image/fetch/$s_!L-73!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b52f22b-7a4c-441d-ba74-60b64dc4d90c_2202x420.png 1272w, https://substackcdn.com/image/fetch/$s_!L-73!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b52f22b-7a4c-441d-ba74-60b64dc4d90c_2202x420.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3><strong>Cash Basis Accounting and Strategic Timing</strong></h3><p>EDPs operate on cash basis accounting, meaning upfront payments for savings plans and reservations count toward annual commitment targets in the year they're paid, not when the underlying usage occurs. This creates opportunities for strategic financial management.</p><p>Organizations can time large upfront payments to coincide with challenging commitment years, effectively borrowing spending credit from future years. However, this requires careful coordination between FinOps and Finance teams to manage cash flow and ensure commitments remain achievable across the entire contract term.</p><h2><strong>Strategic Considerations and Risk Management</strong></h2><p>Both tactical and strategic discount instruments require careful balance between savings optimization and operational flexibility. The key considerations include:</p><p><strong>Growth Planning:</strong> Commitments should align with realistic growth projections, not optimistic scenarios that may not materialize.</p><p><strong>Optimization Impact:</strong> Consider how efficiency initiatives might affect committed spending levels and plan accordingly.</p><p><strong>Contract Timing:</strong> Stagger commitment expirations to maintain flexibility for renegotiation or strategic changes.</p><p><strong>Multi-Cloud Consistency:</strong> Ensure discount strategies work coherently across multiple cloud providers rather than optimizing each in isolation.</p><p>The ultimate goal is maximizing savings while maintaining the operational agility that makes cloud computing valuable in the first place.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thefinoperator.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Finoperator! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Building FinOps Data Infrastructure That Scales with FOCUS]]></title><description><![CDATA[Here&#8217;s how I got into Finops: a request to "help make sense of our cloud costs" led to building out data pipelines for each cloud vendor that we used.]]></description><link>https://www.thefinoperator.com/p/building-finops-data-infrastructure</link><guid isPermaLink="false">https://www.thefinoperator.com/p/building-finops-data-infrastructure</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Wed, 18 Jun 2025 15:17:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!PsW4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7223392-0698-4c61-ace4-9583f283c6cc_2552x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Here&#8217;s how I got into Finops: a request to "help make sense of our cloud costs" led to building out data pipelines for each cloud vendor that we used.  Those all required a lot of analysis of the billing data and building of expertise - months and months of it - in order to build out DBT models that gave my employer a better picture of where the money was going.  Months more work and an <a href="https://focus.finops.org/">open source FinOps billing spec</a> later, I had merged all of those bills into 1 unified cloud bill that gave my employer unprecedented visibility into our cloud spend.  Years after that we&#8217;d built out multiple internal data products/tables/reports/what have you that I&#8217;m pretty sure took us into the 99th percentile of &#8220;knows exactly what&#8217;s going on with our cloud spend&#8221; among anyone using the cloud out there.</p><p>The <a href="https://focus.finops.org/">FinOps Open Cost and Usage Specification</a> (FOCUS) was designed to help with the first problem by providing a common billing data format that attempts to accommodate all subscription software vendors - cloud, SaaS, you name it. More importantly, it allows you to build FinOps data infrastructure once, correctly, with patterns that scale as your organization grows. And that's exactly what we're going to do.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thefinoperator.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Finoperator! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>The Market Problem: Vendor Extraction at Scale</h2><p>Before we dive into FOCUS, let's acknowledge what's happening in the FinOps tooling market. </p><p>I&#8217;d tried to avoid all that work in the intro.  I went through sales loops with a couple of FinOps tooling vendors because I knew how much work it would be to build up all the expertise to produce the reporting my employer needed.  They all had a pricing scheme that was a percentage of our cloud bills though, essentially an additional tax on our cloud bills just to know where to get started optimizing them.  I presented that to my bosses and basically got laughed out of the room.  This experience planted a seed within me, and I started building it myself.</p><p>Vendors are charging percentage-of-spend pricing to customers who are already struggling with cloud costs. It's a business model that penalizes growth and extracts more revenue as your pain increases. Of course, they&#8217;ll sing a perfectly true song that their costs vis-a-vis the amount of data they have to work with essentially grow as your cloud bill grows.  But - having spent my time in the mines I can tell you that their margins are dramatically outpacing the growth of their storage and compute bills.  It's predatory, and it needs to stop.  </p><p>Thanks to the wonder of open source, the technology exists to build better alternatives. Open source databases like DuckDB, modern data pipeline frameworks, and standardized formats like FOCUS have matured to the point where building your own FinOps infrastructure isn't just possible - it's practical.  By owning this yourself you build expertise in house, avoid vendor lockin down the road, and have the ability to mold exactly the solution that your business needs.</p><h2>What We're Building Together</h2><p>This post kicks off a series where we'll build a complete, open source finops visibility platform from scratch. By the end of this series, you'll have:</p><ul><li><p><strong>Multi-cloud billing ingestion</strong> using FOCUS-standardized formats</p></li><li><p><strong>Scalable data pipelines</strong> built with modern open source tools</p></li><li><p><strong>Standardized transformations</strong> using dbt to convert any vendor format to FOCUS</p></li><li><p><strong>Pre-built dashboards</strong> with Metabase for immediate visibility</p></li><li><p><strong>Docker/Podman deployment</strong> that makes the entire platform installable by anyone with basic technical skills</p></li><li><p><strong>Production-ready infrastructure</strong> that costs pennies per dollar compared to vendor solutions</p></li></ul><p>Each post will add functionality while documenting the architectural decisions and trade-offs. You'll see working code, real implementation patterns, and honest assessments of what works (and what doesn't).</p><p>The goal isn't just education - it's to kill the FinOps vendor tax by making the alternative so accessible that paying vendor premiums becomes indefensible.</p><h2>Why FOCUS Changes Everything</h2><p>FOCUS isn't a product - it's a specification that provides "<a href="https://www.thefinoperator.com/p/so-what-is-focus">guidance to cloud vendors, practitioners, tooling vendors, and the software engineering community at large</a>" about how billing data should be structured. Think of it as the standardized schema that finally lets you build infrastructure once instead of maintaining vendor-specific transformations forever.</p><p>Here's what the architecture looks like before and after FOCUS:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PsW4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7223392-0698-4c61-ace4-9583f283c6cc_2552x1048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PsW4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7223392-0698-4c61-ace4-9583f283c6cc_2552x1048.png 424w, https://substackcdn.com/image/fetch/$s_!PsW4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7223392-0698-4c61-ace4-9583f283c6cc_2552x1048.png 848w, https://substackcdn.com/image/fetch/$s_!PsW4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7223392-0698-4c61-ace4-9583f283c6cc_2552x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!PsW4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7223392-0698-4c61-ace4-9583f283c6cc_2552x1048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PsW4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7223392-0698-4c61-ace4-9583f283c6cc_2552x1048.png" width="1456" height="598" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7223392-0698-4c61-ace4-9583f283c6cc_2552x1048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:598,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:211855,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thefinoperator.com/i/165938583?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7223392-0698-4c61-ace4-9583f283c6cc_2552x1048.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PsW4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7223392-0698-4c61-ace4-9583f283c6cc_2552x1048.png 424w, https://substackcdn.com/image/fetch/$s_!PsW4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7223392-0698-4c61-ace4-9583f283c6cc_2552x1048.png 848w, https://substackcdn.com/image/fetch/$s_!PsW4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7223392-0698-4c61-ace4-9583f283c6cc_2552x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!PsW4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7223392-0698-4c61-ace4-9583f283c6cc_2552x1048.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ofKz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e59e682-5bc7-4b98-bc3d-db6ff70a8071_2034x846.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ofKz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e59e682-5bc7-4b98-bc3d-db6ff70a8071_2034x846.png 424w, https://substackcdn.com/image/fetch/$s_!ofKz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e59e682-5bc7-4b98-bc3d-db6ff70a8071_2034x846.png 848w, https://substackcdn.com/image/fetch/$s_!ofKz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e59e682-5bc7-4b98-bc3d-db6ff70a8071_2034x846.png 1272w, https://substackcdn.com/image/fetch/$s_!ofKz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e59e682-5bc7-4b98-bc3d-db6ff70a8071_2034x846.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ofKz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e59e682-5bc7-4b98-bc3d-db6ff70a8071_2034x846.png" width="1456" height="606" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1e59e682-5bc7-4b98-bc3d-db6ff70a8071_2034x846.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:606,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:171539,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thefinoperator.com/i/165938583?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e59e682-5bc7-4b98-bc3d-db6ff70a8071_2034x846.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ofKz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e59e682-5bc7-4b98-bc3d-db6ff70a8071_2034x846.png 424w, https://substackcdn.com/image/fetch/$s_!ofKz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e59e682-5bc7-4b98-bc3d-db6ff70a8071_2034x846.png 848w, https://substackcdn.com/image/fetch/$s_!ofKz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e59e682-5bc7-4b98-bc3d-db6ff70a8071_2034x846.png 1272w, https://substackcdn.com/image/fetch/$s_!ofKz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e59e682-5bc7-4b98-bc3d-db6ff70a8071_2034x846.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The transformation isn't just about fewer ETL pipelines&#8212;it's about fundamentally different infrastructure patterns. With FOCUS, you can:</p><ul><li><p><strong>Design data models once</strong> instead of mapping between vendor vocabularies</p></li><li><p><strong>Build reusable components</strong> that work across all cloud providers</p></li><li><p><strong>Focus on business logic</strong> instead of format wrangling</p></li><li><p><strong>Scale infrastructure horizontally</strong> without vendor-specific complexity</p></li></ul><h2>The Technical Foundation: FOCUS Schema Essentials</h2><p>FOCUS defines a common vocabulary for cloud billing with standardized columns that work across all providers. Instead of learning that AWS calls something `lineItem/UsageAmount` while Azure calls it `Quantity` and GCP calls it `usage.amount` (all with wildly different units of measure, themselves another column elsewhere in the bill), FOCUS gives us a single `UsageQuantity` column.</p><p>Here&#8217;s a small sampling of some of these columns:</p><p><code>BillingPeriodStart # Something like &#8220;invoice month&#8221;</code></p><p><code>UsagePeriodStart # The specific time this charge was generated</code></p><p><code>ServiceName # What service generated the cost</code></p><p><code>ResourceId # Specific resource identifier</code></p><p><code>UsageQuantity # How much was consumed</code></p><p><code>UsageUnit # Unit of measurement</code></p><p><code>ListCost # Published price</code></p><p><code>EffectiveCost # Actual cost after discounts</code></p><p><code>BilledCost # What appears on your invoice</code></p><p>This isn't just about column naming - it's about designing your data models around concepts that are stable across vendors. When you build your warehouse schema using FOCUS patterns, adding a new cloud provider becomes a configuration change instead of a development project.</p><h2>Our Technology Stack: Open Source All the Way Down</h2><p>We're building this with tools that are free, performant, and designed for cloud engineering at scale:</p><ul><li><p><strong>DuckDB</strong> - Our starting point for data processing and transformation. It's a single binary that handles massive datasets and speaks SQL fluently.</p></li><li><p><strong>DLT (Data Load Tool)</strong> - Modern Python framework for building data pipelines. It handles the boring parts (incremental loading, schema evolution, error handling) so we can focus on business logic.</p></li><li><p><strong>dbt</strong> - Version-controlled transformations that convert vendor billing formats to FOCUS. We'll build a library of transformations that handles every major cloud provider and billing format.</p></li><li><p><strong>Metabase</strong> - Pre-built dashboards and analytics that work out-of-the-box with FOCUS data.</p></li><li><p><strong>Docker/Podman</strong> - Package everything into a deployable platform that works anywhere.</p></li><li><p><strong>FOCUS Specification</strong> - Our data modeling foundation that ensures everything we build works across cloud vendors.</p></li><li><p><strong>Python + SQL</strong> - Because you already know these tools, and they're perfect for the job.</p></li></ul><p>Starting with DuckDB might seem humble, but it's strategically smart. We'll prove the patterns work with the simplest possible setup, then show how they scale to production systems (ClickHouse, BigQuery, Snowflake) in later posts.</p><h2>A Quick Taste: FOCUS Transformation with DuckDB</h2><p>Let's see how FOCUS-first thinking changes data pipeline design. Here's a snippet that transforms raw AWS billing data into FOCUS format:</p><p><code>-- Transform AWS CUR to FOCUS format</code></p><p><code>CREATE TABLE focus_billing AS</code></p><p><code>SELECT</code></p><p><code> bill_billing_period_start_date as BillingPeriod,</code></p><p><code> product_product_name as ServiceName,</code></p><p><code> line_item_resource_id as ResourceId,</code></p><p><code> line_item_usage_amount as UsageQuantity,</code></p><p><code> line_item_usage_type as UsageUnit,</code></p><p><code> line_item_unblended_cost as ListCost,</code></p><p><code> line_item_net_unblended_cost as EffectiveCost,</code></p><p><code> line_item_blended_cost as BilledCost</code></p><p><code>FROM aws_billing_raw;</code></p><p>This same pattern works for Azure and GCP data once they're in FOCUS format. One common pattern for the transformation logic across multiple data sources.  </p><h2>What's Coming Next</h2><p>The next post will dive into the data pipeline architecture, introducing DLT and designing the CLI interface for our FinOps platform. We'll start with AWS billing ingestion and build the foundation that makes multi-cloud support trivial.</p><p>Here's the roadmap:</p><ul><li><p>Post 2: Data pipeline architecture and CLI design with DLT</p></li><li><p>Post 3: AWS billing pipeline implementation</p></li><li><p>Post 4: Azure billing integration and multi-cloud refactoring</p></li><li><p>Post 5: dbt transformations - building the FOCUS conversion library</p></li><li><p>Post 6: Metabase dashboards and visualization layer</p></li><li><p>Post 7: Docker packaging and deployment automation</p></li><li><p>Posts 8+: Production scaling, cost allocation, and advanced analytics</p></li></ul><p>By the end, we'll have built the FinOps platform that should have existed all along&#8212;one that treats data engineering seriously, respects your existing infrastructure, and costs orders of magnitude less than vendor alternatives.</p><h2>The Path Forward</h2><p>The choice is "<a href="https://www.thefinoperator.com/p/square-1-from-a-few-years-beyond">between going fast only to go slow later, or going slow to go fast later</a>." Vendor tools get you to basic visibility quickly, but they can't scale beyond that without vendor lock-in and escalating costs.</p><p>We're choosing the second path: building the foundation that lets you scale infinitely while maintaining technical ownership of your FinOps practice. FOCUS gives us the standardized foundation, open source tools give us the implementation power, and this series gives us the roadmap.</p><p>The FinOps vendor tax ends here. Let's build something better.</p><p><em>---</em></p><p><strong>The code and configurations from this series will be available in the <a href="https://github.com/JGrubb/open-finops-stack">open-finops-stack</a> repository. Star it now and follow along as we build the alternative the industry needs.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thefinoperator.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Finoperator! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The FinOperator's view of FinOps]]></title><description><![CDATA[Wherein we discuss what an income statement is and why you should care about it, especially if you're not in the Finance team.]]></description><link>https://www.thefinoperator.com/p/the-finoperators-view-of-finops</link><guid isPermaLink="false">https://www.thefinoperator.com/p/the-finoperators-view-of-finops</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Sun, 13 Apr 2025 17:17:46 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1044fd23-3e90-4921-b0a5-fe5a7399ef16_1500x1139.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Housekeeping</h2><p>Hello readers. I am two weeks into a new job, the first time I've said that since 2016. This post will be heavy on the prose, as I have left all my data and charting capability with which to illustrate my points behind. One of my first jobs in this new role is to rebuild my powers and thus build my employers capabilities in this area. Stay tuned.</p><p>Additionally, I made the decision sometime earlier this year that the focus of my writing here would be for the technical FinOps practitioner, engineer, or data person. This is my background, and so my vocabulary and background has the greatest overlap with technical staff, <em>not </em>Finance staff. I will be explaining basic finance concepts in this blog that will not be useful for the finance professional, and assuming technical background that the typical finance professional shouldn't be expected to have.</p><p>With that out of the way, I present to you:</p><h2>The Income Statement</h2><p>Being new in a job, it&#8217;s a habit of mine to explain my point of view to my new teammates, so that they hopefully understand where I'm coming from someday. Early on my first week I explained to the overall team (I have 3 teams right now) that my mental framework for where to focus our efforts is often informed by thinking about the company's income statement. I didn't go into much detail on that.</p><p>Later, I was having a 1:1 with a member of the data team this week, an "AE" in the parlance of our times. We have a couple headcount open that we'll soon begin hiring for and I was voicing my wish to have one of the analyst hires to be focused on FinOps. Somewhere in there I said "COGS" and she said "wait, what?". We got into the structure of how the income statement works and because technical staff are often interviewed on SQL optimization techniques or how to invert a binary tree on a whiteboard, she hadn't been properly introduced to the income statement before.</p><p>Today we're going to take it high level and talk about an important topic that informs my conceptual framework for how <em>I</em> do FinOps. <strong>The Income Statement.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xis5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6715c266-ee62-4bf7-843a-1af7aca5f986_1500x1139.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xis5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6715c266-ee62-4bf7-843a-1af7aca5f986_1500x1139.webp 424w, https://substackcdn.com/image/fetch/$s_!xis5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6715c266-ee62-4bf7-843a-1af7aca5f986_1500x1139.webp 848w, https://substackcdn.com/image/fetch/$s_!xis5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6715c266-ee62-4bf7-843a-1af7aca5f986_1500x1139.webp 1272w, https://substackcdn.com/image/fetch/$s_!xis5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6715c266-ee62-4bf7-843a-1af7aca5f986_1500x1139.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xis5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6715c266-ee62-4bf7-843a-1af7aca5f986_1500x1139.webp" width="1500" height="1139" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6715c266-ee62-4bf7-843a-1af7aca5f986_1500x1139.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1139,&quot;width&quot;:1500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!xis5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6715c266-ee62-4bf7-843a-1af7aca5f986_1500x1139.webp 424w, https://substackcdn.com/image/fetch/$s_!xis5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6715c266-ee62-4bf7-843a-1af7aca5f986_1500x1139.webp 848w, https://substackcdn.com/image/fetch/$s_!xis5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6715c266-ee62-4bf7-843a-1af7aca5f986_1500x1139.webp 1272w, https://substackcdn.com/image/fetch/$s_!xis5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6715c266-ee62-4bf7-843a-1af7aca5f986_1500x1139.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">MSFT's 2024 income state, which I borrowed from Investopedia's article on the income statement: <a href="https://www.investopedia.com/terms/i/incomestatement.asp?ref=thefinoperator.com">https://www.investopedia.com/terms/i/incomestatement.asp</a></figcaption></figure></div><h3>The topline</h3><p>I picture the income statement as a funnel diagram. A Sankey will often be used as well, but I think the funnel maps very cleanly to the concepts from <strong>top</strong> to <strong>bottom.</strong> At the top of the statement you have your income, also known as <strong>revenue</strong> also known colloquially as, you guessed it, the "<em>topline</em>".</p><p>Because I work in the internet business, most of our industry's topline comes from sales of whatever our product is, or possibly professional services income from support it. If your company has investments in the form of $whatever (cash) earning interest then that'd also go in the topline section, but most of any company's revenue is going to come from selling the $thing that the company exists to sell.</p><p>Regardless of where it comes from, this is the <em>money in</em> at the top of the funnel. After/below this, the income statement is mostly an exercise in subtracting various categories of expenses before landing on the "<em>bottom line</em>".</p><p><strong>&#128161; By the way, a very important point: you'll hear people say "P&amp;L" as you work deeper into the business. Income statement == P&amp;L. It's the same thing.</strong></p><h3>COGS, aka "cost of revenue", aka "cost of sales"</h3><p>COGS is Cost of Goods Sold and I think of COGS as <em>the sphere of my influence </em>as a FinOps person. COGS is what it says - it's the cost of the things that are required to produce the goods <em>or services</em> that the company sells. You could put aside the funnel metaphor for a moment and think of COGS as the cost of the <em>inputs</em> required to produce the <em>outputs</em> that represent whatever your company sells to its customers.</p><p>In the last century this could be the cost of mining and shipping iron ore, and refining that ore into the steel that is ultimately sold for revenue. The next company in line would have the cost of the steel as part of their COGS to building the car that brings in their revenue. In the 21st century a typical company hosting products on a public cloud vendor like GCP or AWS would have (parts of) their cloud bills as the cost inputs to provide the service that nets the resulting revenue output. I'll come back to the "parts of" part later.</p><p>Other common COGS inputs are things like your support or professional services staff. Without them handling customers you don't have a sustainable business model, and so if the cost is <em>in any way</em> related to the function of the thing that is sold for revenue at your business, then it fairly belongs in COGS.</p><h3>Below COGS - gross margin, operating costs, etc</h3><p>Pull together your COGS, then subtract them from the topline and you arrive at an important metrics called <strong>gross margin.  </strong>Below gross margin you subtract your operating costs - things like R&amp;D, Marketing, Sales, and others - to arrive at your <strong>operating margin</strong>. R&amp;D and Marketing might seem simple enough, but you'll definitely have things in your cloud bills that belong in these two categories, so you can't just dump the entire cloud bill into COGS and call it a day. "But it all lands at the bottom either way. Why does it matter whether it comes out in this section or that section?" A fabulous question that lives near the borders of my understanding of VC backed company finance.</p><p>In a nutshell, because it matters. The various major sections of your income statement are in place because they each tend to have a different relationship with scaling as revenue scales. If you are a cloud-based software provider, it is expected that parts of your operation will scale more efficiently than others as the overall business scales. IOW - as revenue grows your COGS will grow as well, but it will grow with a different slope than say, Marketing or R&amp;D.</p><p>The average slope of these various segments within an average company in a given vertical is probably fairly well known by investor analysts, and so they will be able to model out your potential profitability if your income statement is tidy enough. They will be able to model, for example, if you have a 70% gross margin today what optimizations might take place over the next 5 years to land you at a 76% margin with 250MM ARR. These are all metrics and models they use to gauge your company's potential return on their investment.</p><p>On the other hand if you have a 65% gross margin today, how does that scale out to result in a vastly less profitable company (that they might pass on investing in)?</p><h3>So, back to COGS</h3><p>This is why it's so tremendously important to get the math right, and make sure that what is being allocated to COGS and what is being allocated elsewhere (we'll cover "Opex" eventually) is correct. This will be an extended conversation with your Finance team, because this analysis will require a thorough, transparent, and repeatable process of working with your cloud bills to improve tagging and visibility of the costs within them. This is why proper tagging matters in the first place. It's not just for improving the visibility of these costs, it plays a central role in proper cost allocation all the way down the line.</p><h2>Zooming back out</h2><p>The point of going through this is that the income statement can give you a lot of information about your company. Likely you'll need to make good friends with someone in Finance before they let you see it - it's privileged information - but I think it can tell you what to focus on as a data or FinOps person. In data broadly as well as FinOps specifically we are tasked with helping our employer better understand itself, and the income statement provides a framework for what strengths the company has that must be protected as well as its weaknesses that must be further developed. It's a very important map, without which you're missing critical information about the company you're trying to help.</p><p>However, even just thinking in this manner puts you ahead of most staff in most companies outside of Finance. After all, finance is a support function, engineering is a major driver of company outcomes.</p><p>In closing - <strong>understand the business you're in</strong>.</p>]]></content:encoded></item><item><title><![CDATA[Re: naming things]]></title><description><![CDATA[&#128161; This is largely from a previous blog, but this concept has been stuck in my head again lately, so I'm repurposing.]]></description><link>https://www.thefinoperator.com/p/re-naming-things</link><guid isPermaLink="false">https://www.thefinoperator.com/p/re-naming-things</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Thu, 06 Feb 2025 18:02:50 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a7f39353-c43b-4811-a482-7cd2d501405f_2000x1335.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="pullquote"><p>&#128161; This is largely from <a href="https://www.ignoredbydinosaurs.com/posts/naming-things-considerately-is-an-act-of-selflessness?ref=thefinoperator.com">a previous blog</a>, but this concept has been stuck in my head again lately, so I'm repurposing. The data warehouse that I mention up top is what has formed the foundation of my employer's FinOps visibility effort.</p></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1fNM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de1effd-ec60-48ed-8eaf-52f9030744c1_2000x1335.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1fNM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de1effd-ec60-48ed-8eaf-52f9030744c1_2000x1335.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1fNM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de1effd-ec60-48ed-8eaf-52f9030744c1_2000x1335.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1fNM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de1effd-ec60-48ed-8eaf-52f9030744c1_2000x1335.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1fNM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de1effd-ec60-48ed-8eaf-52f9030744c1_2000x1335.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1fNM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de1effd-ec60-48ed-8eaf-52f9030744c1_2000x1335.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8de1effd-ec60-48ed-8eaf-52f9030744c1_2000x1335.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Re: naming things&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Re: naming things" title="Re: naming things" srcset="https://substackcdn.com/image/fetch/$s_!1fNM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de1effd-ec60-48ed-8eaf-52f9030744c1_2000x1335.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1fNM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de1effd-ec60-48ed-8eaf-52f9030744c1_2000x1335.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1fNM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de1effd-ec60-48ed-8eaf-52f9030744c1_2000x1335.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1fNM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de1effd-ec60-48ed-8eaf-52f9030744c1_2000x1335.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Not sure if I mentioned this in the last post, but what I&#8217;m doing right now is essentially building a data warehouse for my employer. It&#8217;s from scratch, there was effectively nothing here beforehand, so I get get to/have had to chose everything from the tech stack to the processes to my favorite part of late: naming things.</p><p>The name you give to a piece of software, or a command line flag, or a column in a database is an act of asynchronous communication with another human. You are asking them to care about the thing you&#8217;ve built. If they chose to work with your tool, you are asking them to understand the choices that you made in its design.</p><p>The most selfless thing you can do is think about how much effort it takes for the user who did not design the thing to understand how to use the thing. Name things according to what they are and what they do, make it intuitive. This is what design is. It&#8217;s not the parts that most people will never see, it&#8217;s the parts that most people will only see.</p><div><hr></div><p>Where this fits into a FinOps context - and I've probably written about this here before because it's not a new concept to me - is that huge part of the early job of FinOps is taking AWS's terminology and vocabulary and translating it into that of your company. This is how you get engineers to pay attention to costs, by making it easier for them.</p><p>All those tags you have on all those resources - make it easy to query them by hoisting the important ones out to their own column. Make the default view of the billing data do this automatically, create a SQL view that performs this drudgery. Are there inconsistencies in the data, different spellings of what should be the same segment of data? Normalize them in that SQL view. This all makes it easier for the person after you to hunt down 1 name, rather than 3 or 300.</p><p>The more care you take in naming these constructs that you're unearthing, the more immediately effective they'll be to the person you ultimately want to engage with them.</p>]]></content:encoded></item><item><title><![CDATA[Square 1, from a few years beyond.]]></title><description><![CDATA[What I'd like to have told younger me, specifically on the topic of getting started on visibility of the billing data.]]></description><link>https://www.thefinoperator.com/p/square-1-from-a-few-years-beyond</link><guid isPermaLink="false">https://www.thefinoperator.com/p/square-1-from-a-few-years-beyond</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Thu, 16 Jan 2025 18:47:36 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3263312c-e4ce-4184-b9e4-fdadb98d697d_2000x1331.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>What I'd like to have told younger me, specifically on the topic of getting started on visibility of the billing data. This is a quick one.</p><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oSz1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76dfb93e-7209-46b7-9cc4-21624975a7bc_2000x1331.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oSz1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76dfb93e-7209-46b7-9cc4-21624975a7bc_2000x1331.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oSz1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76dfb93e-7209-46b7-9cc4-21624975a7bc_2000x1331.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oSz1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76dfb93e-7209-46b7-9cc4-21624975a7bc_2000x1331.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oSz1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76dfb93e-7209-46b7-9cc4-21624975a7bc_2000x1331.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oSz1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76dfb93e-7209-46b7-9cc4-21624975a7bc_2000x1331.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/76dfb93e-7209-46b7-9cc4-21624975a7bc_2000x1331.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Square 1, from a few years beyond.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Square 1, from a few years beyond." title="Square 1, from a few years beyond." srcset="https://substackcdn.com/image/fetch/$s_!oSz1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76dfb93e-7209-46b7-9cc4-21624975a7bc_2000x1331.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oSz1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76dfb93e-7209-46b7-9cc4-21624975a7bc_2000x1331.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oSz1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76dfb93e-7209-46b7-9cc4-21624975a7bc_2000x1331.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oSz1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76dfb93e-7209-46b7-9cc4-21624975a7bc_2000x1331.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><p>This is all data work, and the iron triangle that I look at with data work is <strong>fast, cheap, scalable</strong>.&nbsp; You're (presumably) trying to get to square 1 of visibility of your spend.&nbsp; 3rd party tooling vendors can get you to square 1 pretty fast but I haven't seen one that I'd consider cheap yet.</p><p>Once you get to square 1 though, you are going to see squares 2 and 3 and 4, and that is where I don't feel any 3rd party tool can provide for real scale.&nbsp; What I mean by <strong>scale</strong> is connecting it to the other data you will find lying around your org that will enrich the cost data and allow you to take the practice far beyond square 1.</p><p>Some more mature tooling vendors will point out that you can import custom datasets in their platform and essentially turn their platform into your personal data warehouse, but consider the time you'll spend building all of that into someone else's platform.&nbsp; Think of the vendor lock in, and how much those add ons cost.&nbsp; Also, the speed that you paid for up front is long gone by that point.</p><p>Conversely, building your own visibility takes time up front <em>but beyond square 1 the velocity can be so much faster.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!28cC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8c3eb3-f0ee-45a3-82e9-01b67b6baf7a_2000x1500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!28cC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8c3eb3-f0ee-45a3-82e9-01b67b6baf7a_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!28cC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8c3eb3-f0ee-45a3-82e9-01b67b6baf7a_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!28cC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8c3eb3-f0ee-45a3-82e9-01b67b6baf7a_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!28cC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8c3eb3-f0ee-45a3-82e9-01b67b6baf7a_2000x1500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!28cC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8c3eb3-f0ee-45a3-82e9-01b67b6baf7a_2000x1500.jpeg" width="4608" height="3456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d8c3eb3-f0ee-45a3-82e9-01b67b6baf7a_2000x1500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3456,&quot;width&quot;:4608,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Square 1, from a few years beyond.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Square 1, from a few years beyond." title="Square 1, from a few years beyond." srcset="https://substackcdn.com/image/fetch/$s_!28cC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8c3eb3-f0ee-45a3-82e9-01b67b6baf7a_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!28cC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8c3eb3-f0ee-45a3-82e9-01b67b6baf7a_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!28cC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8c3eb3-f0ee-45a3-82e9-01b67b6baf7a_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!28cC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d8c3eb3-f0ee-45a3-82e9-01b67b6baf7a_2000x1500.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@lisabakerwales?ref=thefinoperator.com">Lisa Baker</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure></div><p>So really it's a choice between going fast only to go slow later, or going slow to go fast later.&nbsp; <strong>Don't discount the importance of optics in the early stages of the practice.</strong> You have to deliver some wins early in order to build trust and gain more buy-in. This is just a POV from a few years past where you are now.</p><p>Even if you buy a tool to deliver some wins early, only sign a 1 year contract and never stop thinking about how you might replace that tool when you need to. Never stop improving the underlying data quality. Never lean on a product feature that lets you shortcut improving the data quality - tagging, specifically.</p><p>Building your own may be a luxury some of us can't afford at all times, but I'm convinced it's the only way forward for most companies.</p>]]></content:encoded></item><item><title><![CDATA[Rightsizing - show, don't tell]]></title><description><![CDATA[Hello reader.]]></description><link>https://www.thefinoperator.com/p/rightsizing-show-dont-tell</link><guid isPermaLink="false">https://www.thefinoperator.com/p/rightsizing-show-dont-tell</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Wed, 06 Nov 2024 21:13:14 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8e6e84b7-ce2a-4f0a-9ac3-a8f1f9eb045a_766x549.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ue10!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a31be73-bc3a-4e71-b845-03c4acf21dd2_766x549.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ue10!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a31be73-bc3a-4e71-b845-03c4acf21dd2_766x549.png 424w, https://substackcdn.com/image/fetch/$s_!ue10!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a31be73-bc3a-4e71-b845-03c4acf21dd2_766x549.png 848w, https://substackcdn.com/image/fetch/$s_!ue10!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a31be73-bc3a-4e71-b845-03c4acf21dd2_766x549.png 1272w, https://substackcdn.com/image/fetch/$s_!ue10!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a31be73-bc3a-4e71-b845-03c4acf21dd2_766x549.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ue10!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a31be73-bc3a-4e71-b845-03c4acf21dd2_766x549.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a31be73-bc3a-4e71-b845-03c4acf21dd2_766x549.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Rightsizing - show, don't tell&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Rightsizing - show, don't tell" title="Rightsizing - show, don't tell" srcset="https://substackcdn.com/image/fetch/$s_!ue10!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a31be73-bc3a-4e71-b845-03c4acf21dd2_766x549.png 424w, https://substackcdn.com/image/fetch/$s_!ue10!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a31be73-bc3a-4e71-b845-03c4acf21dd2_766x549.png 848w, https://substackcdn.com/image/fetch/$s_!ue10!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a31be73-bc3a-4e71-b845-03c4acf21dd2_766x549.png 1272w, https://substackcdn.com/image/fetch/$s_!ue10!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a31be73-bc3a-4e71-b845-03c4acf21dd2_766x549.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Hello reader. My employer has been in rightsizing mode lately, and I've participating more in that exercise than ever before. As you probably know I'm a data person, and I believe very strongly that the practice of FinOps is a data-heavy practice. I'm continually learning new tricks and lately I'm getting around to the "story telling" portion of a well-rounded data practice. Let me illustrate...</p><h2>Opportunity knocks</h2><p>Not terribly long ago we launched a new product feature that allowed us to target development resources that hadn't been used in a few weeks and "power them down" on behalf of our customers. They could power them back up as needed of course, but this had the overall effect of reducing compute usage across a certain tier of our VMs by about 30%.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2UWc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401cbae6-072c-4369-a655-e8e33b35c496_713x296.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2UWc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401cbae6-072c-4369-a655-e8e33b35c496_713x296.png 424w, https://substackcdn.com/image/fetch/$s_!2UWc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401cbae6-072c-4369-a655-e8e33b35c496_713x296.png 848w, https://substackcdn.com/image/fetch/$s_!2UWc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401cbae6-072c-4369-a655-e8e33b35c496_713x296.png 1272w, https://substackcdn.com/image/fetch/$s_!2UWc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401cbae6-072c-4369-a655-e8e33b35c496_713x296.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2UWc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401cbae6-072c-4369-a655-e8e33b35c496_713x296.png" width="713" height="296" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/401cbae6-072c-4369-a655-e8e33b35c496_713x296.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:296,&quot;width&quot;:713,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Rightsizing - show, don't tell&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Rightsizing - show, don't tell" title="Rightsizing - show, don't tell" srcset="https://substackcdn.com/image/fetch/$s_!2UWc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401cbae6-072c-4369-a655-e8e33b35c496_713x296.png 424w, https://substackcdn.com/image/fetch/$s_!2UWc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401cbae6-072c-4369-a655-e8e33b35c496_713x296.png 848w, https://substackcdn.com/image/fetch/$s_!2UWc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401cbae6-072c-4369-a655-e8e33b35c496_713x296.png 1272w, https://substackcdn.com/image/fetch/$s_!2UWc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F401cbae6-072c-4369-a655-e8e33b35c496_713x296.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Total allocated dev CPU time, by region and day</figcaption></figure></div><p>The chart above shows total CPU time <em>allocated</em> by our container orchestration framework. The underlying VMs are still there, just working that much less. In theory we can remove that much compute <em>capacity</em> from our system, but here's where things get complicated.</p><p>At that exact point in time, we were launching a major new product line. The entire engineering org was tied up in shipping this new product line, and this new product line also came with some interesting (and still in flux) changes to the compute profiles that we'd be selling. Nobody had the bandwidth to contemplate what all these competing priorities meant for each other, so we just focused on the hard deliverable and decided to leave this for later. Time goes by...</p><p>New product line gets launched, life stuff happens, nobody's fully "in charge" of this capacity planning routine, and the optimization that we made last year also more or less broke our old (clearly not mission critical) reporting. Boss gives me an assignment to rebuild this reporting, what we colloquially refer to as "the overcommit reporting", so that we can start to trim the fat in the system.</p><h2>to the data..</h2><p>Our previous iteration of the overcommit reporting gave us the ratio of sold/allocated capacity to actual capacity. Without going into all the details, this ratio is very important for both profitability and the experience of our customers on our platform. We've always taken an approach informed by experience but not necessarily by hard data, and so I've had a hunch that our understanding of this topic wasn't as well developed as it should be.</p><p>After some experimentation it occurred to me that the ratio we'd been watching all these years was more of an <em><a href="https://thenorth.io/input-metrics-vs-output-metrics/?ref=thefinoperator.com">output metric</a></em> - it's the outcome we want to watch. The input metric should be something closer to the customer experience - at what point does overcommitting a VM start to noticeably affect performance of our customers' applications? This is one of those topics that sounds really obvious but from my experience, the process of building up the data ecosystem and literacy within an existing company is anything but obvious. This was the real job.</p><p><em>Let's get our hands on the VM usage and utilization data and understanding loading of our platform regions around the world.</em></p><p>Well, as FinOps practitioners, and for as much as we talk about "rightsizing" as being one of the core activities, it's amazingly difficult to get your hands on the proper usage data. Take AWS. The service at play is Cloudwatch. It's not free, and the UI is pretty Byzantine (to me). I have tried to query for all machines of type <code>$whatever</code> in a given region and this is what they give you.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0oc0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22da0cf7-e223-4c3a-ab09-31fb083f336b_943x300.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0oc0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22da0cf7-e223-4c3a-ab09-31fb083f336b_943x300.png 424w, https://substackcdn.com/image/fetch/$s_!0oc0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22da0cf7-e223-4c3a-ab09-31fb083f336b_943x300.png 848w, https://substackcdn.com/image/fetch/$s_!0oc0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22da0cf7-e223-4c3a-ab09-31fb083f336b_943x300.png 1272w, https://substackcdn.com/image/fetch/$s_!0oc0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22da0cf7-e223-4c3a-ab09-31fb083f336b_943x300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0oc0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22da0cf7-e223-4c3a-ab09-31fb083f336b_943x300.png" width="943" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22da0cf7-e223-4c3a-ab09-31fb083f336b_943x300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:300,&quot;width&quot;:943,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Rightsizing - show, don't tell&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Rightsizing - show, don't tell" title="Rightsizing - show, don't tell" srcset="https://substackcdn.com/image/fetch/$s_!0oc0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22da0cf7-e223-4c3a-ab09-31fb083f336b_943x300.png 424w, https://substackcdn.com/image/fetch/$s_!0oc0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22da0cf7-e223-4c3a-ab09-31fb083f336b_943x300.png 848w, https://substackcdn.com/image/fetch/$s_!0oc0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22da0cf7-e223-4c3a-ab09-31fb083f336b_943x300.png 1272w, https://substackcdn.com/image/fetch/$s_!0oc0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22da0cf7-e223-4c3a-ab09-31fb083f336b_943x300.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Line charts - really not great for dense time series data and yet somehow the default choice for all cloud resource monitoring.</figcaption></figure></div><p>This assumes that you even have access in the first place, which you might not. Also, if you're a multi-cloud shop you already know the pain of learning multiple billing consoles. The pain of learning multiple cloud vendor metrics consoles is equivalent.</p><p>I'm very lucky to work in a shop that collects our own cloud-agnostic resource metrics in a central location - BigQuery. Over a couple days I built out a POC of a system-wide infrastructure monitoring setup in Metabase, our BI tool.</p><blockquote><p>&#128161; One nice thing about SQL in general is the ability to define custom metrics over arbitrary slices of our infrastructure. I start playing with a metric that I call the "heat index" that's essentially a function of the average CPU load across several machines + the Std Dev of CPU load across those same machines. This gives me an idea of how heavily loaded the machines are on average, but also the spread between hottest and coolest machine. A wider spread indicates an unbalanced load.</p></blockquote><p>So one weekend I search "dense time series visualization" and lo and behold, I discover the door to a whole new level of data analysis. I get started on Monday and within a few hours I have a working prototype of a "heatmap" visualization. Let's compare two visualizations of the exact same data. First is a line chart of CPU utilization over 15 hosts worth of data.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OeOK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74691e61-5739-4815-bc74-c01c0920af11_783x407.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OeOK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74691e61-5739-4815-bc74-c01c0920af11_783x407.png 424w, https://substackcdn.com/image/fetch/$s_!OeOK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74691e61-5739-4815-bc74-c01c0920af11_783x407.png 848w, https://substackcdn.com/image/fetch/$s_!OeOK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74691e61-5739-4815-bc74-c01c0920af11_783x407.png 1272w, https://substackcdn.com/image/fetch/$s_!OeOK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74691e61-5739-4815-bc74-c01c0920af11_783x407.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OeOK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74691e61-5739-4815-bc74-c01c0920af11_783x407.png" width="783" height="407" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/74691e61-5739-4815-bc74-c01c0920af11_783x407.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:407,&quot;width&quot;:783,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Rightsizing - show, don't tell&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Rightsizing - show, don't tell" title="Rightsizing - show, don't tell" srcset="https://substackcdn.com/image/fetch/$s_!OeOK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74691e61-5739-4815-bc74-c01c0920af11_783x407.png 424w, https://substackcdn.com/image/fetch/$s_!OeOK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74691e61-5739-4815-bc74-c01c0920af11_783x407.png 848w, https://substackcdn.com/image/fetch/$s_!OeOK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74691e61-5739-4815-bc74-c01c0920af11_783x407.png 1272w, https://substackcdn.com/image/fetch/$s_!OeOK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74691e61-5739-4815-bc74-c01c0920af11_783x407.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So I'm pretty sure this tells me that the region is happy, but I'm not sure how this tells me whether we have too many machines in the region. It looks like the average is between 20% and 40% utilization, the max on the Y axis is 45%. There's a spike up to 50% for one machine for a minute but this does not tell me a story. It most certainly does not tell our engineering and operational staff a story. Let's look at this data another way and see if we get somewhere.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9CDA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8be606e-078d-429e-8f5c-eed472c8c042_901x577.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9CDA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8be606e-078d-429e-8f5c-eed472c8c042_901x577.png 424w, https://substackcdn.com/image/fetch/$s_!9CDA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8be606e-078d-429e-8f5c-eed472c8c042_901x577.png 848w, https://substackcdn.com/image/fetch/$s_!9CDA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8be606e-078d-429e-8f5c-eed472c8c042_901x577.png 1272w, https://substackcdn.com/image/fetch/$s_!9CDA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8be606e-078d-429e-8f5c-eed472c8c042_901x577.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9CDA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8be606e-078d-429e-8f5c-eed472c8c042_901x577.png" width="901" height="577" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8be606e-078d-429e-8f5c-eed472c8c042_901x577.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:577,&quot;width&quot;:901,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Rightsizing - show, don't tell&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Rightsizing - show, don't tell" title="Rightsizing - show, don't tell" srcset="https://substackcdn.com/image/fetch/$s_!9CDA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8be606e-078d-429e-8f5c-eed472c8c042_901x577.png 424w, https://substackcdn.com/image/fetch/$s_!9CDA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8be606e-078d-429e-8f5c-eed472c8c042_901x577.png 848w, https://substackcdn.com/image/fetch/$s_!9CDA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8be606e-078d-429e-8f5c-eed472c8c042_901x577.png 1272w, https://substackcdn.com/image/fetch/$s_!9CDA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8be606e-078d-429e-8f5c-eed472c8c042_901x577.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So I shared this with my coworkers in the infrastructure team and within a very short amount of time, we'd begun the plan to reduce some of this capacity where the chart above shows we clearly have some extra to spare. This heatmap viz gives each VM its own row, and I have the ability to manually set the scale between 0% and 100% utilization. Every line chart out there is going to default to setting the scale between min% and max%, which our human brains just don't interpret as cleanly as this heatmap above.</p><p>Now, if I may, <em>this is how you FinOps</em>. You don't go to your operational teams and talk about "rightsizing" and why it's important. From their point of view the system is functional which means the customers are happy and they are not getting yelled at and they are <strong>not at all wrong</strong>. Most infrastructure observability tools are open source, off-the-shelf and setup by operational staff with a few extra hours. They rarely have the time to keep going after they solve their first set of problems, which is how our observability sat for some years.</p><p>In chart number 2 though, it's quite clear that we have excess capacity and we can safely shed a few machines. Take them this and everyone can <em>see</em> in an instant that in some places we have an excess of capacity.</p><h2>The wrap</h2><p>The more I do it, the more I'm convinced that FinOps is a very specialized, <em>very</em> important BI and Data Science role. The more data access you have as a practitioner, and the more you understand the underlying data terrain in terms of cloud infrastructure, and the more skill you have with extracting insights from all that data, the more you can be <strong>useful to your engineering teams</strong>. I have other charts that allow us to visualize utilization across the <em>entire fleet, </em>18 regions worth of 6-8 different machines types, with 3-24 machines of each type. Hotspots - and excess capacity - have never been this easy to spot.</p><p>The end result of this work is going to be a relatively tremendous amount of cloud savings, because we can see more clearly.</p><p>Get your hands dirty.</p>]]></content:encoded></item><item><title><![CDATA[Cost allocation 101: building the foundations]]></title><description><![CDATA[&#128161; Number 2 in a series on Cost Allocation.]]></description><link>https://www.thefinoperator.com/p/cost-allocation-101-building-the-foundations</link><guid isPermaLink="false">https://www.thefinoperator.com/p/cost-allocation-101-building-the-foundations</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Mon, 19 Aug 2024 14:25:38 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/fce8d967-1659-4d9f-9a46-8531b2d7d279_2400x1200.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="pullquote"><p>&#128161; Number 2 in a series on Cost Allocation. The first post on data and tooling can be found <a href="https://www.thefinoperator.com/dbt-and-finops-a-match-made-in-heaven/">here</a>. In this post we'll start to get into the nitty gritty, starting with unifying our cloud bills according to the <a href="https://focus.finops.org/?ref=thefinoperator.com">FOCUS</a> spec.</p></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ARqa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9278aee4-5d2e-4859-8390-70ae3f83f816_2400x1200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ARqa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9278aee4-5d2e-4859-8390-70ae3f83f816_2400x1200.png 424w, https://substackcdn.com/image/fetch/$s_!ARqa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9278aee4-5d2e-4859-8390-70ae3f83f816_2400x1200.png 848w, https://substackcdn.com/image/fetch/$s_!ARqa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9278aee4-5d2e-4859-8390-70ae3f83f816_2400x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!ARqa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9278aee4-5d2e-4859-8390-70ae3f83f816_2400x1200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ARqa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9278aee4-5d2e-4859-8390-70ae3f83f816_2400x1200.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9278aee4-5d2e-4859-8390-70ae3f83f816_2400x1200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Cost allocation 101: building the foundations&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cost allocation 101: building the foundations" title="Cost allocation 101: building the foundations" srcset="https://substackcdn.com/image/fetch/$s_!ARqa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9278aee4-5d2e-4859-8390-70ae3f83f816_2400x1200.png 424w, https://substackcdn.com/image/fetch/$s_!ARqa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9278aee4-5d2e-4859-8390-70ae3f83f816_2400x1200.png 848w, https://substackcdn.com/image/fetch/$s_!ARqa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9278aee4-5d2e-4859-8390-70ae3f83f816_2400x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!ARqa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9278aee4-5d2e-4859-8390-70ae3f83f816_2400x1200.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>There will be a lot of diagrams in this series, because there are so many steps in this overall pipeline that it's impossible for me to understand them all without being able to visualize the flow between them. For the most part each post in this series will focus on 1 major step in the cost allocation pipeline. Let's start with the very highest level conceptual overview of the job.</p><h2>Company overview</h2><p> sankey-beta Cost of Goods Sold aka COGS,Customer A,1 Cost of Goods Sold aka COGS,Customer B,2 Cost of Goods Sold aka COGS,Customer C,5 Cost of Goods Sold aka COGS,Customer N,3</p><p>My employer is a B2B and B2C product company. We are a midsized company of about 300 employees and we have customers. We don't have internal business units to which we chargeback cloud hosting, rather our customers run their (typically web-facing) workloads on our platform and we handle the infrastructure for them. They never see the underlying cloud bill, and are free to totally ignore which cloud vendor is actually hosting their workloads.</p><blockquote><p>&#9888;&#65039; Note: The better you understand the technical architecture <em>and</em> the architecture of your company from the business perspective, the better your cost allocation routine can be. Ideally, the end result will be able to inform strategic discussions on the cost <em>and</em> revenue sides of the business, i.e. engineering <em>and</em> everyone else.</p></blockquote><h2>Product line overview</h2><p>We only have one primary product as far as our customers are concerned, and the base sellable Thing that we sell is called A Project. A Project has a 1:1 relationship with a Git repo, and we operate a platform that handles your DevOps needs for you, i.e. - you git push to us and we handle it from there.</p><p>Internally, we have two main COGS centers. The main COGS center by mindshare is the containerized hosting platform, what we refer to internally as "the grid". I like to imagine it in <a href="https://www.youtube.com/watch?v=4-J4duzP8Ng&amp;ref=thefinoperator.com">Jeff Bridges' voice</a>. One of the marquee features of the platform is that any Git branch you create in your project will instantly create a new hosting environment for that branch, complete with data cloned from the parent branch and all supporting infrastructure already wired together. This means that containers come and go as Git branches come and go, and we'll account for this in our cost allocation.</p><p>The other main COGS center is simply called "dedicated". Dedicated is for customers that want significant resource guarantees for their production workloads. These dedicated "environments" are just another "deployment target" as far as our platform is concerned - a child of a Project. A project can look like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yUhA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946296d8-bc59-4efb-8f1b-fbc775471ed1_1562x1036.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yUhA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946296d8-bc59-4efb-8f1b-fbc775471ed1_1562x1036.png 424w, https://substackcdn.com/image/fetch/$s_!yUhA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946296d8-bc59-4efb-8f1b-fbc775471ed1_1562x1036.png 848w, https://substackcdn.com/image/fetch/$s_!yUhA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946296d8-bc59-4efb-8f1b-fbc775471ed1_1562x1036.png 1272w, https://substackcdn.com/image/fetch/$s_!yUhA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946296d8-bc59-4efb-8f1b-fbc775471ed1_1562x1036.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yUhA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946296d8-bc59-4efb-8f1b-fbc775471ed1_1562x1036.png" width="1456" height="966" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/946296d8-bc59-4efb-8f1b-fbc775471ed1_1562x1036.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:966,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:464596,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thefinoperator.substack.com/i/161249966?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946296d8-bc59-4efb-8f1b-fbc775471ed1_1562x1036.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yUhA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946296d8-bc59-4efb-8f1b-fbc775471ed1_1562x1036.png 424w, https://substackcdn.com/image/fetch/$s_!yUhA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946296d8-bc59-4efb-8f1b-fbc775471ed1_1562x1036.png 848w, https://substackcdn.com/image/fetch/$s_!yUhA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946296d8-bc59-4efb-8f1b-fbc775471ed1_1562x1036.png 1272w, https://substackcdn.com/image/fetch/$s_!yUhA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F946296d8-bc59-4efb-8f1b-fbc775471ed1_1562x1036.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Many small streams make a river of money&#8230;</figcaption></figure></div><h2>First problem - container allocation</h2><p>Dedicated resources show up in the cloud bill and if properly tagged can be tied directly back to a project and therefore a customer. Containerized resources cannot. Any FinOps practitioner who's dealt with Kubernetes knows this problem - containers are an abstraction. Additionally, a given container can live for 5 minutes or 5 years. It can also move across hosts during the day. We'll go deep on the nuances of container allocation in this series, because there's a lot here.</p><h2>Second problem - shared costs</h2><p>Between the containerized segment and the dedicated segment, that accounts for 75-80% of our total hosting costs that are able to be directly tied in some fashion to a customer's workload. The remaining 20+% is shared infra, R&amp;D, and frankly some of it is god-only-knows but it has to be accounted for. We'll go into how we spread these costs.</p><h2>Third problem - credits from cloud providers, or The January Problem</h2><p>This is completely hypothetical of course, but picture an alternate dimension where you have a contract with an imaginary cloud provider and that contract includes some yearly credits back to your account as part of your incentives. These credits might land all at once on an annual basis, and might materially discount the cash basis cost of your bill for the month in which they land.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HXIr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60610315-e244-4668-aa87-4f60c12b8fb6_1324x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HXIr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60610315-e244-4668-aa87-4f60c12b8fb6_1324x600.png 424w, https://substackcdn.com/image/fetch/$s_!HXIr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60610315-e244-4668-aa87-4f60c12b8fb6_1324x600.png 848w, https://substackcdn.com/image/fetch/$s_!HXIr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60610315-e244-4668-aa87-4f60c12b8fb6_1324x600.png 1272w, https://substackcdn.com/image/fetch/$s_!HXIr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60610315-e244-4668-aa87-4f60c12b8fb6_1324x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HXIr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60610315-e244-4668-aa87-4f60c12b8fb6_1324x600.png" width="1324" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/60610315-e244-4668-aa87-4f60c12b8fb6_1324x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1324,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Cost allocation 101: building the foundations&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cost allocation 101: building the foundations" title="Cost allocation 101: building the foundations" srcset="https://substackcdn.com/image/fetch/$s_!HXIr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60610315-e244-4668-aa87-4f60c12b8fb6_1324x600.png 424w, https://substackcdn.com/image/fetch/$s_!HXIr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60610315-e244-4668-aa87-4f60c12b8fb6_1324x600.png 848w, https://substackcdn.com/image/fetch/$s_!HXIr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60610315-e244-4668-aa87-4f60c12b8fb6_1324x600.png 1272w, https://substackcdn.com/image/fetch/$s_!HXIr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60610315-e244-4668-aa87-4f60c12b8fb6_1324x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The purely hypothetical January Problem</figcaption></figure></div><p>This will make that month appear noticeably cheap in comparison to its temporal siblings on either side of it, and so all your cost allocation work will be operating on data that some might consider artificially depressed. We'll need to account for this and amortize these credits via some schedule, which your bill might not do for you.</p><h2>Zeroth problem - multi cloud</h2><p>The above are real cost allocation problems, and none of them can be solved before solving this one: we have multiple bills from multiple cloud providers. We host essentially identical workloads on AWS, Azure, and GCP because reasons. Some of those bills are in USD, some are in Euro. They all use different terminology and names for their VMs, their object storage, their network disk or block storage. We have to normalize these bills together to do <em>anything</em>, and for this we're going to look to the <a href="https://focus.finops.org/?ref=thefinoperator.com">FOCUS project</a> for guidance.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ij3b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3daa7758-adea-4b10-b3fe-47b4cf92f0ce_1526x994.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ij3b!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3daa7758-adea-4b10-b3fe-47b4cf92f0ce_1526x994.png 424w, https://substackcdn.com/image/fetch/$s_!ij3b!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3daa7758-adea-4b10-b3fe-47b4cf92f0ce_1526x994.png 848w, https://substackcdn.com/image/fetch/$s_!ij3b!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3daa7758-adea-4b10-b3fe-47b4cf92f0ce_1526x994.png 1272w, https://substackcdn.com/image/fetch/$s_!ij3b!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3daa7758-adea-4b10-b3fe-47b4cf92f0ce_1526x994.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ij3b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3daa7758-adea-4b10-b3fe-47b4cf92f0ce_1526x994.png" width="1456" height="948" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3daa7758-adea-4b10-b3fe-47b4cf92f0ce_1526x994.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:948,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:582734,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thefinoperator.substack.com/i/161249966?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3daa7758-adea-4b10-b3fe-47b4cf92f0ce_1526x994.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ij3b!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3daa7758-adea-4b10-b3fe-47b4cf92f0ce_1526x994.png 424w, https://substackcdn.com/image/fetch/$s_!ij3b!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3daa7758-adea-4b10-b3fe-47b4cf92f0ce_1526x994.png 848w, https://substackcdn.com/image/fetch/$s_!ij3b!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3daa7758-adea-4b10-b3fe-47b4cf92f0ce_1526x994.png 1272w, https://substackcdn.com/image/fetch/$s_!ij3b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3daa7758-adea-4b10-b3fe-47b4cf92f0ce_1526x994.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Seriously, how did we do anything before the FOCUS standard??</figcaption></figure></div><p>FOCUS makes this entire thing possible in the first place, since any meaningful analysis or allocation has to gather all the costs together in 1 dataset to get started. This is where we'll start in the next post - building out your unified FOCUS dataset.</p>]]></content:encoded></item><item><title><![CDATA[DBT and FinOps data - a match made in heaven]]></title><description><![CDATA[&#128161;Hello reader &#128075;, I just got back from FinOps X - the big yearly FinOps conference - and am feeling inspired to tackle a series that's been brewing in my imagination for quite some time on the topic of cost allocation.]]></description><link>https://www.thefinoperator.com/p/dbt-and-finops-a-match-made-in-heaven</link><guid isPermaLink="false">https://www.thefinoperator.com/p/dbt-and-finops-a-match-made-in-heaven</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Tue, 02 Jul 2024 12:46:52 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ecaf8aa7-6f81-4b41-bb55-962f5314e1d8_2000x1333.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="pullquote"><p>&#128161;Hello reader &#128075;, I just got back from <a href="https://x.finops.org/?ref=thefinoperator.com">FinOps X</a> - the big yearly FinOps conference - and am feeling inspired to tackle a series that's been brewing in my imagination for quite some time on the topic of <em>cost allocation</em>.</p></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Psbs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a3741d3-01b9-47c1-b6d6-e23c2465c682_2000x1333.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Psbs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a3741d3-01b9-47c1-b6d6-e23c2465c682_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Psbs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a3741d3-01b9-47c1-b6d6-e23c2465c682_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Psbs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a3741d3-01b9-47c1-b6d6-e23c2465c682_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Psbs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a3741d3-01b9-47c1-b6d6-e23c2465c682_2000x1333.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Psbs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a3741d3-01b9-47c1-b6d6-e23c2465c682_2000x1333.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2a3741d3-01b9-47c1-b6d6-e23c2465c682_2000x1333.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;DBT and FinOps data - a match made in heaven&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="DBT and FinOps data - a match made in heaven" title="DBT and FinOps data - a match made in heaven" srcset="https://substackcdn.com/image/fetch/$s_!Psbs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a3741d3-01b9-47c1-b6d6-e23c2465c682_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Psbs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a3741d3-01b9-47c1-b6d6-e23c2465c682_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Psbs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a3741d3-01b9-47c1-b6d6-e23c2465c682_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Psbs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a3741d3-01b9-47c1-b6d6-e23c2465c682_2000x1333.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Cost allocation is a common FinOps responsibility and while the methodology is particular to each business, I think the general shape of the process is probably similar enough that a few posts about our methodology might be useful to put out there.</p><p>Cost allocation is broadly about figuring out "what costs what?" in the vocabulary of your business, rather than the cloud vendor's vocabulary present in the monthly bill. It directly relates to a lot of FinOps visibility work and often builds upon previous allocation work, so let's dive in with a primer discussion on the tools that I use here to manage it all.</p><h2>Prologue</h2><p>A recent leg of my career path found me spinning up the data function at my current employer. We'd previously had no holistic treatment of the company's data - minimal BI, minimal data warehousing, and as a result no visibility into several business processes that were starting to present themselves as a strategic problem for the business. I'd spent the previous few years in customer facing management roles, quietly cataloging issues that somebody was going to have to solve someday when we get around to hiring a data person. At some point I started daydreaming about how I&#8217;d tackle it myself.</p><p>After multiple quarters of staring at the problem I raised my hand and asked if we could do something about this situation, officially, deliberately. They said "sure, go for it" and so I spent the next few months researching the data-tech landscape and revisiting the Kimball et al section of my bookshelf to formulate a plan.</p><p>We had some key technical pieces in place already. <a href="https://cloud.google.com/bigquery?ref=thefinoperator.com">Google BigQuery</a> was already being used as a semi-structured destination for some data feeds from engineering and the platform side of the business. I picture BigQuery as the bottom layer of the cake. <a href="https://www.metabase.com/?ref=thefinoperator.com">Metabase</a> was already installed as a BI dashboard with a MySQL database as the backend for some data pipelines pulling from our ticketing system and a few other internal sources. Metabase - capable enough to not be the top priority - is where most users will be querying the warehouse and building reports and functions as the top layer of the cake. Without turning this into a series on how to build out a modern data platform, that left us with "the middle layer" - getting all the raw data into BigQuery and then, most importantly, <em>reshaping it</em> to fit the business needs and vocabulary of my employer.</p><p>I didn't know how important a piece it would eventually become, but I kept seeing mention of a tool called <a href="https://www.getdbt.com/?ref=thefinoperator.com">DBT</a> in all the data job descriptions I was checking out as part of my research. I didn't understand it on first glance, so I'll tell you what it is right now...</p><h2>DBT</h2><p>DBT is a framework for building out a data warehouse, in much the same way that Ruby on Rails is a framework for building out a web application. It's a set of conventions, helper functions, and supporting software bits that an open source community has collected together into a software toolkit - a framework.</p><p>In short, DBT provides tooling to help with writing SQL queries against raw data in your warehouse, and with managing the resulting tables and views. These queries are rarely finished reports (though they can be). More often they take the form of pulling together raw data from all over your warehouse into 1 location (schema), and cleaning up the data along the way.</p><p>Put more simply - you have data all over the place, and most of it is a mess. DBT helps you manage it, refine it, and document it all in one place. It also allows you to manage a large data project more like a large software project - version control, CI/CD automation, some support for testing, etc.</p><h3>From ETL to ELT</h3><p>If you've been anywhere near data in a business setting in the last 30 years, you've heard the acronym "ETL" - extract, transform, load, in that order. Well, the paradigm has shifted in the cloud era toward a model of "ELT" - extract, load, transform. Get the data from the source, store it in your cloud warehouse or S3 bucket exactly as it came from the source, and then transform it <em>later</em>.</p><p>This approach has the benefit of allowing you to <strong>change your mind</strong> about the logic in your transformations when you inevitably need to, without reimporting the data all over again. This method largely decouples the constantly evolving data analysis needs of the business from the upstream data engineering teams that are responsible for procuring the data.</p><p> flowchart TB a[Raw AWS CUR billing data in your data warehouse]--&gt;b[DBT executes SQL statement, creating a new SQL view or table] b--&gt;c[Your BI tool queries against this cleaned up table] c--&gt;d d[You discover an error in the original SQL transform logic, or you learn more about the underlying data and have a better idea]--&gt;e[You update the logic and recreate the SQL view. Note that you didn't have to reimport any data.] e--&gt;c</p><p>DBT is the T step in ELT and you do the transforming with plain old SQL. How about a short example?</p><pre><code>-- in models/aws_focus.sql
SELECT 
  `bill/BillingPeriodStartDate` AS BillingPeriodStart,
  `bill/BillingPeriodEndDate` AS BillingPeriodEnd,
  `lineItem/UsageStartDate` AS ChargePeriodStart,
  `lineItem/UsageEndDate` AS ChargePeriodEnd,
  `lineItem/UnblendedCost` AS BilledCost,
  ...
FROM {{ source('billing_data', 'aws_cur_raw') }}
-- this last bit is DBT code that selects the aws_cur_raw table from
-- the billing_data database (or schema).  More on this later.</code></pre><p>Suppose you've already done the work of ingesting your AWS bill into your data warehouse. If you finish this SQL statement above with all 43 columns in the current FOCUS spec, you can do <code>dbt run -s aws_focus</code> and DBT will execute this SQL against your data warehouse and create a <em>SQL view - </em>essentially a pre-written SQL query that functions just like a virtual table - that you can query with your BI tool. Congrats, you have just reformatted your historical AWS billing data into the FOCUS spec without any new data pipelines, and without breaking your ability to query <em>historical</em> billing data.</p><p>I'll have a lot more cool examples in the next post.</p><h2>Ok cool, but ... why?</h2><p>As I have said <a href="https://www.thefinoperator.com/a-finops-journey/">elsewhere in this blog</a> - it is my opinion that the data part of FinOps is a specific domain of business intelligence, BI. BI done correctly benefits from the additive effects of being able to connect disparate data sources together to derive insights that a single data source alone might not make obvious.</p><blockquote><p>Data and BI become more valuable as you are able to connect together more of your company's data.</p></blockquote><p>If you are able to manage your cloud billing data in the same place as, say, customer support requests, or Stripe transactions, you are more able to build an automated, holistic picture of your company's operations. It's work, but it's <em>possible</em> to build data products specific to your business that no 3rd party FinOps tool could ever accommodate. Even the very best 3rd party tool is going to reach the limits of its capability to integrate with your business' data, and when you reach that limit, you'll be exporting data to a spreadsheet all over again.</p><p>Moreover, you likely already have some of these pieces lying around at your company already - a BI dash connected to a data warehouse, for example. That's several sales cycles, procurement, onboarding and all the rest of the baggage associated with a new tool that you can refocus on getting to work on your specific set of questions.</p><p>Lastly, if you go the path of technical ownership of your FinOps visibility effort, <em>you will gain unparalleled subject matter expertise and true mastery over the data that forms the foundation of the entire practice of FinOps</em>.</p><h2>In closing</h2><p>That's it for today, the next post will be more specific examples of the possibilities of bringing an open source tool like DBT to your FinOps data - we're going to implement the FOCUS spec in SQL.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!brW4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c636d98-c375-44ab-ba75-f04cfbedecc1_2000x1333.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!brW4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c636d98-c375-44ab-ba75-f04cfbedecc1_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!brW4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c636d98-c375-44ab-ba75-f04cfbedecc1_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!brW4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c636d98-c375-44ab-ba75-f04cfbedecc1_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!brW4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c636d98-c375-44ab-ba75-f04cfbedecc1_2000x1333.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!brW4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c636d98-c375-44ab-ba75-f04cfbedecc1_2000x1333.jpeg" width="2000" height="1333" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c636d98-c375-44ab-ba75-f04cfbedecc1_2000x1333.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1333,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;DBT and FinOps data - a match made in heaven&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="DBT and FinOps data - a match made in heaven" title="DBT and FinOps data - a match made in heaven" srcset="https://substackcdn.com/image/fetch/$s_!brW4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c636d98-c375-44ab-ba75-f04cfbedecc1_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!brW4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c636d98-c375-44ab-ba75-f04cfbedecc1_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!brW4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c636d98-c375-44ab-ba75-f04cfbedecc1_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!brW4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c636d98-c375-44ab-ba75-f04cfbedecc1_2000x1333.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@bearsnap?ref=thefinoperator.com">Junseong Lee</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure></div>]]></content:encoded></item><item><title><![CDATA[FinOps FOCUS, succinctly]]></title><description><![CDATA[I attended the FinOps Roadshow in New York back in the late winter, and FOCUS was a large topic.]]></description><link>https://www.thefinoperator.com/p/so-what-is-focus</link><guid isPermaLink="false">https://www.thefinoperator.com/p/so-what-is-focus</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Fri, 28 Jun 2024 19:22:08 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1c8f4082-974d-46f4-9d17-01ed693be933_2000x1250.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5z2T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c266a5-e9f3-400f-8bf2-0d9025c4c8ab_2000x1250.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5z2T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c266a5-e9f3-400f-8bf2-0d9025c4c8ab_2000x1250.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5z2T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c266a5-e9f3-400f-8bf2-0d9025c4c8ab_2000x1250.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5z2T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c266a5-e9f3-400f-8bf2-0d9025c4c8ab_2000x1250.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5z2T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c266a5-e9f3-400f-8bf2-0d9025c4c8ab_2000x1250.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5z2T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c266a5-e9f3-400f-8bf2-0d9025c4c8ab_2000x1250.jpeg" width="2000" height="1250" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8c266a5-e9f3-400f-8bf2-0d9025c4c8ab_2000x1250.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1250,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;a basket filled with pretzels covered in powdered sugar&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="a basket filled with pretzels covered in powdered sugar" title="a basket filled with pretzels covered in powdered sugar" srcset="https://substackcdn.com/image/fetch/$s_!5z2T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c266a5-e9f3-400f-8bf2-0d9025c4c8ab_2000x1250.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5z2T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c266a5-e9f3-400f-8bf2-0d9025c4c8ab_2000x1250.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5z2T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c266a5-e9f3-400f-8bf2-0d9025c4c8ab_2000x1250.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5z2T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c266a5-e9f3-400f-8bf2-0d9025c4c8ab_2000x1250.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@markzanzig?ref=thefinoperator.com">Mark Zanzig</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure></div><p>I attended the FinOps Roadshow in New York back in the late winter, and FOCUS was a large topic. Talking to my friend <a href="http://dannb.org/?ref=thefinoperator.com">Dann B</a> after the thing, it became clear that for as much buzz as there is around FOCUS, it's ironically unclear what the deliverable of this project actually is. I hope to bring some clarity here.</p><h2>The Problem</h2><p><em>Billing data is all over the place.</em></p><p>All of these fabulous toys in the technology market generally and the cloud computing market specifically cost money. I don't know how many hundreds of billions of dollars a year it is, but it's probably in the 12 figures order of magnitude.</p><p>All of these toys that cost money have to bill their customers, and each of those bills must be legible, auditable, and understandable by the customer who's expected to pay them. This means ultimately that cloud billing is not like a receipt from a grocery store - a finished product you can scan over in 20 seconds - and more like a data source upon which you might build your own reports of the activity within it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u1UU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51390639-39e3-48d0-865e-988a50d08272_2000x862.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u1UU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51390639-39e3-48d0-865e-988a50d08272_2000x862.png 424w, https://substackcdn.com/image/fetch/$s_!u1UU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51390639-39e3-48d0-865e-988a50d08272_2000x862.png 848w, https://substackcdn.com/image/fetch/$s_!u1UU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51390639-39e3-48d0-865e-988a50d08272_2000x862.png 1272w, https://substackcdn.com/image/fetch/$s_!u1UU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51390639-39e3-48d0-865e-988a50d08272_2000x862.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u1UU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51390639-39e3-48d0-865e-988a50d08272_2000x862.png" width="2000" height="862" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/51390639-39e3-48d0-865e-988a50d08272_2000x862.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:862,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!u1UU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51390639-39e3-48d0-865e-988a50d08272_2000x862.png 424w, https://substackcdn.com/image/fetch/$s_!u1UU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51390639-39e3-48d0-865e-988a50d08272_2000x862.png 848w, https://substackcdn.com/image/fetch/$s_!u1UU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51390639-39e3-48d0-865e-988a50d08272_2000x862.png 1272w, https://substackcdn.com/image/fetch/$s_!u1UU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51390639-39e3-48d0-865e-988a50d08272_2000x862.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Can't really do this in the GCP billing UI yet</figcaption></figure></div><p>As this whole market has matured and the quantity of billers and the magnitude of their bills have grown, it's become its own job just wrangling and understanding all of this billing data. This may form the largest expense that your company pays, after all. Wrangling and understanding the billing data is one of the fundamental FinOps motions, so that we may facilitate the understanding of our business partners in Finance and Engineering about how to, y'know... make our money go farther.</p><p>It's gets knotty though, because every vendor has their own format, delivery method, and vocabulary for their bills. It's almost as if the eventual billing data is NOT the first thing on the engineering team&#8217;s mind as they work through the product engineering lifecycle! So begins a mad scramble to figure out a billing format, without the time to consult outside sources or the market in general.</p><h2>Solution</h2><p><em>A common vocabulary for billing data</em></p><p>FOCUS - FinOps Open Cost and Usage Spec - aims to reverse engineer a common billing interface from a handful of pre-existing implementations, namely the major public cloud service providers - AWS, GCP, Azure, Oracle. Put simply, FOCUS is a common vocabulary for billing data. The exact format of each vendor's bill is different, but if you spend time looking at them and understanding their structure you start to see patterns:</p><ul><li><p>An invoice period, or billing month</p></li><li><p>A timestamp for the beginning and end of some period, during which usage of a resource is measured</p></li><li><p>A column or two that tell you the SKU, and maybe give you a human readable description of it</p></li><li><p>Some columns about usage quantity, and what unit of measure is that usage reported in</p></li><li><p>Some columns that tell you the unit price for that SKU</p></li><li><p>Another column that multiplies unit price (P) by quantity (Q) to arrive at the cost (C) of that line item.</p></li><li><p>User added tags, credits or discounts applied, additional columns describing the service, etc, etc, etc</p></li></ul><p>While there is a lot that is conceptually the same, getting to know just the structure of a cloud vendor's bill is such an enormous job that literally <em>dozens</em> of competing vendors in the FinOps tooling space have sprung up to make it a little easier, especially for customers who utilize more than 1 cloud vendor. A big feature of all these tools is that they will normalize your various bills in some way that allows you to visualize and report on more than 1 at a time.</p><p>Into this space steps the FOCUS project, to provide guidance to cloud vendors, practitioners, tooling vendors, and the software engineering community at large that says:</p><blockquote><p>&#10071;Hey, this is a billing format that a LOT of us have gotten together on and discussed and hashed out over the last couple years. We&#8217;re pretty confident that it can address almost any billing usecase in the cloud or SaaS market. How about you provide your bill in this format, and you'll make life that much easier for the people who actually pay your bills.</p></blockquote><h2>What FOCUS is <em>not</em></h2><p>FOCUS is not a product. It does not <em>do</em> anything in and of itself. It's a very intriguing idea to many of us that have to wrangle data, but I answered several people's questions at the FinOps X conference last week about "How can I use it?". I'll be answering that question here in greater depth for quite a while, so stay tuned.</p><p><a href="https://www.thefinoperator.com/how-to-compute-reservation-coverage-and-utilization-from-your-aws-bill/">The Finoperator John Grubb</a></p>]]></content:encoded></item><item><title><![CDATA[EBS - monthly pricing means monthly pricing]]></title><description><![CDATA[I just made a rather surprising discovery that I wanted to quickly share/jot down regarding EBS.]]></description><link>https://www.thefinoperator.com/p/ebs-monthly-means-monthly</link><guid isPermaLink="false">https://www.thefinoperator.com/p/ebs-monthly-means-monthly</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Thu, 06 Jun 2024 19:21:19 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/14026b1f-ec34-4792-9b1f-4ea39cc7df8b_751x303.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I just made a rather surprising discovery that I wanted to quickly share/jot down regarding EBS. My usecase is that I'm trying to gather up all the provisioned storage that we have in <code>$segment</code> so I can compare it to some other metrics reporting I have on the topic.</p><p>The metrics I have are reporting from Ceph, which is a pooled storage solution that includes replication etc etc, so that the amount of EBS you buy from AWS - say 1024GB - is not what you'll have available to use in Ceph. If you configured Ceph to run with 1 replica then your available storage from that 1024 would actually only be 512GB (tremendously simplifying here).</p><p>So, like all things, I turn to my bill to see what it has to tell me about the amount of storage that we've purchased for this <code>$segment</code>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PJFW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad1860e6-382b-4f26-ade2-798bac7198d6_751x303.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PJFW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad1860e6-382b-4f26-ade2-798bac7198d6_751x303.png 424w, https://substackcdn.com/image/fetch/$s_!PJFW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad1860e6-382b-4f26-ade2-798bac7198d6_751x303.png 848w, https://substackcdn.com/image/fetch/$s_!PJFW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad1860e6-382b-4f26-ade2-798bac7198d6_751x303.png 1272w, https://substackcdn.com/image/fetch/$s_!PJFW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad1860e6-382b-4f26-ade2-798bac7198d6_751x303.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PJFW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad1860e6-382b-4f26-ade2-798bac7198d6_751x303.png" width="751" height="303" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad1860e6-382b-4f26-ade2-798bac7198d6_751x303.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:303,&quot;width&quot;:751,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!PJFW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad1860e6-382b-4f26-ade2-798bac7198d6_751x303.png 424w, https://substackcdn.com/image/fetch/$s_!PJFW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad1860e6-382b-4f26-ade2-798bac7198d6_751x303.png 848w, https://substackcdn.com/image/fetch/$s_!PJFW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad1860e6-382b-4f26-ade2-798bac7198d6_751x303.png 1272w, https://substackcdn.com/image/fetch/$s_!PJFW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad1860e6-382b-4f26-ade2-798bac7198d6_751x303.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Usage reporting from the CUR for this 1 volume last week.</figcaption></figure></div><p>Now, I logged in to the AWS panel to verify the size of this volume to be 1024GB, so I know that's what I'm working against. My thought process is "how does 1024GB work into 33.03 GB/mo"? Typically I would think I need to multiply the GB/mo by 720 - the number of hours in a 30 day month and my goto for how many hours are in a month, more on this later - and then divide by 24 to land at the size of the volume (assuming it doesn't change). However:</p><p><code>(33.03 * 720) / 24 = 990</code> hmmm. So wait, what's <code>1024 / 33.03</code>? To my surprise it's 31, which is odd, and yes there were 31 days in May but wait, what's up with June 1? Zoom out! Enhance!</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3R5n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab00abff-d5e5-48a8-9a76-caf96f1251e4_712x141.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3R5n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab00abff-d5e5-48a8-9a76-caf96f1251e4_712x141.png 424w, https://substackcdn.com/image/fetch/$s_!3R5n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab00abff-d5e5-48a8-9a76-caf96f1251e4_712x141.png 848w, https://substackcdn.com/image/fetch/$s_!3R5n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab00abff-d5e5-48a8-9a76-caf96f1251e4_712x141.png 1272w, https://substackcdn.com/image/fetch/$s_!3R5n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab00abff-d5e5-48a8-9a76-caf96f1251e4_712x141.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3R5n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab00abff-d5e5-48a8-9a76-caf96f1251e4_712x141.png" width="712" height="141" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab00abff-d5e5-48a8-9a76-caf96f1251e4_712x141.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:141,&quot;width&quot;:712,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!3R5n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab00abff-d5e5-48a8-9a76-caf96f1251e4_712x141.png 424w, https://substackcdn.com/image/fetch/$s_!3R5n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab00abff-d5e5-48a8-9a76-caf96f1251e4_712x141.png 848w, https://substackcdn.com/image/fetch/$s_!3R5n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab00abff-d5e5-48a8-9a76-caf96f1251e4_712x141.png 1272w, https://substackcdn.com/image/fetch/$s_!3R5n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab00abff-d5e5-48a8-9a76-caf96f1251e4_712x141.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>Oh no. Oh <a href="https://tenor.com/view/get-out-no-nononono-gif-7950670?ref=thefinoperator.com">no, no, no, no</a>. Guess what <code>1024 / 34.13</code> is? If you guessed "the number of days in the month of June" you are the winner! I'm very surprised to find this out - that they daily usage the same EBS volume actually changes depending on the number of days in the month - but not as surprised as when I add the cost in...</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hUI1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0760fa-66f3-44e3-9ff2-36ccb3c801ae_1012x402.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hUI1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0760fa-66f3-44e3-9ff2-36ccb3c801ae_1012x402.png 424w, https://substackcdn.com/image/fetch/$s_!hUI1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0760fa-66f3-44e3-9ff2-36ccb3c801ae_1012x402.png 848w, https://substackcdn.com/image/fetch/$s_!hUI1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0760fa-66f3-44e3-9ff2-36ccb3c801ae_1012x402.png 1272w, https://substackcdn.com/image/fetch/$s_!hUI1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0760fa-66f3-44e3-9ff2-36ccb3c801ae_1012x402.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hUI1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0760fa-66f3-44e3-9ff2-36ccb3c801ae_1012x402.png" width="1012" height="402" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2a0760fa-66f3-44e3-9ff2-36ccb3c801ae_1012x402.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:402,&quot;width&quot;:1012,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!hUI1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0760fa-66f3-44e3-9ff2-36ccb3c801ae_1012x402.png 424w, https://substackcdn.com/image/fetch/$s_!hUI1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0760fa-66f3-44e3-9ff2-36ccb3c801ae_1012x402.png 848w, https://substackcdn.com/image/fetch/$s_!hUI1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0760fa-66f3-44e3-9ff2-36ccb3c801ae_1012x402.png 1272w, https://substackcdn.com/image/fetch/$s_!hUI1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0760fa-66f3-44e3-9ff2-36ccb3c801ae_1012x402.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Yes, that's right. The daily cost of your EBS volume also changes depending on the length of the month. So, to borrow a phrase, my mental model for how the world works was wrong and I must now update it. I would also like to point out again where I think Microsoft has chosen such user-friendly standards for the people who pay the bills while building out Azure. A month in Azure is not 720 hours, nor 744, it's 730, which is <code>24 * 365 / 12</code> which makes for an extremely logical and predictable experience when trying to figure out what things cost.</p><p>I'm still mid-investigation so that's all I have for now, typically if I wait until I've got it totally figured out the shock of it has worn off and I no longer feel like posting. Cheers.</p>]]></content:encoded></item><item><title><![CDATA[Cloud Computing is Fractional Reserve Banking]]></title><description><![CDATA[&#9888;&#65039; I've never seen this framing before and I can't find it anywhere on the internet so that means one of two things, but here goes...]]></description><link>https://www.thefinoperator.com/p/cloud-computing-and-fractional-reserve-banking</link><guid isPermaLink="false">https://www.thefinoperator.com/p/cloud-computing-and-fractional-reserve-banking</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Thu, 22 Feb 2024 17:30:04 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8d39a967-5a61-40a7-9240-cad959a76b70_673x454.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#9888;&#65039;</p><p>I've never seen this framing before and I can't find it anywhere on the internet so that means one of two things, but here goes...</p><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-zwe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05acf765-6307-430c-9cc9-0ed74b8be17f_673x454.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-zwe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05acf765-6307-430c-9cc9-0ed74b8be17f_673x454.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-zwe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05acf765-6307-430c-9cc9-0ed74b8be17f_673x454.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-zwe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05acf765-6307-430c-9cc9-0ed74b8be17f_673x454.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-zwe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05acf765-6307-430c-9cc9-0ed74b8be17f_673x454.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-zwe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05acf765-6307-430c-9cc9-0ed74b8be17f_673x454.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/05acf765-6307-430c-9cc9-0ed74b8be17f_673x454.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Cloud Computing is Fractional Reserve Banking&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cloud Computing is Fractional Reserve Banking" title="Cloud Computing is Fractional Reserve Banking" srcset="https://substackcdn.com/image/fetch/$s_!-zwe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05acf765-6307-430c-9cc9-0ed74b8be17f_673x454.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-zwe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05acf765-6307-430c-9cc9-0ed74b8be17f_673x454.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-zwe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05acf765-6307-430c-9cc9-0ed74b8be17f_673x454.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-zwe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05acf765-6307-430c-9cc9-0ed74b8be17f_673x454.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><p>My employer operates a Platform as a Service, a PaaS. We host "customer workloads", which is to say we run their web apps and anything involved with making it easier for the people building those web apps to deliver them. I imagine that our founder (my boss) started building this platform probably the day after the concept of cgroups was announced on some Linux mailing list, that is to say - <a href="https://imgflip.com/i/8gpi9d?ref=thefinoperator.com">we have always been a containerized platform</a>.</p><p>My work lately has been allocating costs (from our cloud bills on the left side) out to the tens or hundreds of thousands of containers that make use of the resources we buy (the right side), so I've been deep, deep, deep in the weeds of what resources are being allocated where. Part of the point of containerization (and virtualization in general) involves the capability to allocate more resources to $things than what you actually have on hand. An example:</p><p>We purchase a 4CPU VM from a provider, a "host". We then place containerized customer $things on that host and allocate resources to those containers. It's extraordinarily rare that all containers need to use CPU time simultaneously, and so via the magic of containers we're able to allocate a multiple of that 4CPU to the containers on that host, say 40CPU - a 10x "overcommit". We have systems in place in case a host becomes overloaded, but in general this works very, very well for web workloads. They're spiky both in the long term and the short term - big traffic waves come and go, and each individual web request often only requires a relative handful of cycles to fulfill, leaving the CPU otherwise idle. We make use of that otherwise idle time in another container.</p><p>This might surprise some folks who are not super familiar with the cloud computing industry, but it occurred to me yesterday that there's an analogy in the world of finance that's been in use for centuries and underpins essentially all of modern life - fractional reserve banking.</p><p>In fractional reserve banking, banks are only required to hold a fraction of their customers' deposits as reserves, while the rest can be lent out to other customers. This allows them to <em>create</em> more credit than the cash reserves they actually have on hand. Similarly, in cloud computing, virtualization technology allows providers - us, and AWS before us - to sell more compute resources than they physically have on hand.</p><p>&#129300;</p><p>Have you ever <em>really</em> thought about how it is that AWS has extra capacity sitting around doing nothing, making no money prior to you wanting to spin up a new VM? <br><br>How virtualization actually works is well covered on the internet, but to torture a different analogy - picture an apartment building where the landlord rents out your apartment to someone else when you go to work each day. They do this throughout the building, and have a very well-oiled understanding of how much "empty apartment" capacity is available at any moment to rent out to someone. That's basically how virtualization works, but the landlord is the OS kernel.</p><p>An obvious difference between the two is that fractional reserve banking is a centuries-old practice that has been codified into law and regulation, while cloud computing is a relatively new, opaque, wildly profitable market that is still evolving. However, both involve<em> the creation of resources that are backed by the creditworthiness or trustworthiness of the provider</em>, rather than physical assets.</p><p>In both cases, the goal is to create more value than would be possible through physical means alone. By creating virtual resources that can be sold or lent out, providers can generate more revenue and profit than they could through traditional means. However, this also creates the potential for risk and instability, as the value or reliability of these resources can fluctuate based on a variety of factors. In the cloud business, capacity planning is the very serious business of ensuring that if there's a "run on the bank", our customers' apps don't fall over as a result.</p><p>Additionally, there are varying levels of "capital reserve requirements" for the various classes of technology resources. Compute is easily leveraged, and this leverage is what I've been thinking of lately as our potential profit margin. Computing is a time-bound activity but once it completes it can move on to the next thing with virtually no penalty. Picture a cook in a diner, knocking out customer orders one after the other. Whether busy or not the cook is getting paid the same, so best to keep them busy (from the capitalist viewpoint).</p><p>Storage on the other hand is more complicated as saving state for later is its entire job. It fills up like a filing cabinet, so you <em>have</em> to keep excess capacity on hand lest disks reach 100%. It's possible, but a lot more specialized a practice to make use of any unused disk space. Likewise for bandwidth, as its simply like water flowing through a pipe. There is no way to make it multiply it just because its not being used somewhere else. In fact, it's <em>all being used</em> by definition - unused water doesn't flow through the pipe.</p><p>This is a fresh spitball session, but I can't help trying to connect this to something like <a href="https://en.wikipedia.org/wiki/Bretton_Woods_system?ref=thefinoperator.com">Bretton Woods</a>, whence the world decided on USD as the global reserve currency, and the platform power that has given the US ever since. Likewise, allowing the marketing teams at AWS to convince us all that "Capex bad, Opex good, nobody's running their own servers anymore" is clever and has spawned countless innovations as well as an entire industry, but bears a closer look as your company (hopefully) scales.</p><p>I am also forced to ponder the implications of building on somebody else's platform, and the wisdom and downsides of that once you've proven out your business model. To wit - if your company is too successful in adding value, if the business built in rented space is too successful, what's to stop the landlord from raising your rent? Anyway, this is fresh creative magma so tread carefully..</p><p>Until next time.</p>]]></content:encoded></item><item><title><![CDATA[The Rosetta Stone]]></title><description><![CDATA[Hi there, I'm going to try to re-prime the pump with a quick thought today about the overall nature of FinOps as a profession, at least as we practice it at my employer.]]></description><link>https://www.thefinoperator.com/p/the-rosetta-stone</link><guid isPermaLink="false">https://www.thefinoperator.com/p/the-rosetta-stone</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Fri, 09 Feb 2024 14:48:31 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a5a1eb34-99cb-41b5-99a9-f0a8970908e4_2000x1333.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Awpm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe58e1e-09ca-4235-9746-592eea926a39_2000x1333.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Awpm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe58e1e-09ca-4235-9746-592eea926a39_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Awpm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe58e1e-09ca-4235-9746-592eea926a39_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Awpm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe58e1e-09ca-4235-9746-592eea926a39_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Awpm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe58e1e-09ca-4235-9746-592eea926a39_2000x1333.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Awpm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe58e1e-09ca-4235-9746-592eea926a39_2000x1333.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fbe58e1e-09ca-4235-9746-592eea926a39_2000x1333.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The Rosetta Stone&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Rosetta Stone" title="The Rosetta Stone" srcset="https://substackcdn.com/image/fetch/$s_!Awpm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe58e1e-09ca-4235-9746-592eea926a39_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Awpm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe58e1e-09ca-4235-9746-592eea926a39_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Awpm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe58e1e-09ca-4235-9746-592eea926a39_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Awpm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe58e1e-09ca-4235-9746-592eea926a39_2000x1333.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><p>Hi there, I'm going to try to re-prime the pump with a quick thought today about the overall nature of FinOps as a profession, at least as we practice it at my employer. The background is that my teammate just got her CGEIT certification - Certified in the Governance of Enterprise IT - and is really flying up the ramp of FinOps effectiveness in the last few months.</p><p>I've been thinking for months how crazy familiar I am with the inner workings of my employer now via its cloud bills. The cloud bills, once they're really understood, are a paper trail of everything this company does that costs a fraction of a cents. All our main money makers, the growth of our customer base, our tagging hygiene practices - they're all represented in these vendors' bills. Cost of Goods Sold has become so interesting that I'm looking at publicly traded companies' quarterly statements just for fun now. I'm curious to know just how much one can learn about a company's inner workings by looking at where the money goes.</p><p>Moreover, because I'm in the interesting position of having the same workloads deployed on multiple providers, I get a glimpse inside the big cloud vendors as well. The same workloads are represented in 3 different ways, which gives you an incredible look at the internal culture of AWS, Azure, and GCP as well.</p><p>AWS - the market leader, inventing so many of these concepts from scratch.</p><p>Azure - the market follower, with the good sense to borrow what they could from AWS and to improve it in many ways for that most neglected yet still crucial customer segment, the finance team that pays the bills.</p><p>GCP - clearly not afraid to reinvent things their own way. It's resulted in some amazing innovations that don't get nearly enough press in the cloud industry in my opinion, but they were clearly built with no thought for the aforementioned folks who need to understand the billing.</p><p>So - I have so much to brain dump on that it's impossible to choose which path to walk down first, but topics marinating in my head:</p><ul><li><p>The FinOps FOCUS project, especially how it's used in my day to day work</p></li><li><p>What GCP means when they say "reservations" and how tricky they can be</p></li><li><p>Deriving and allocating cost models inside my employer's containerized infrastructure</p></li><li><p>Where COGS connects to Finance</p></li><li><p>Where COGS connects to Pricing and Product</p></li><li><p>The primer I never had on what COGS even is</p></li><li><p>Oh, the execs are interested in your work now...</p></li></ul><p>And like a hundred more in the last 6 months, but let's see if I can crack those open first. I promise a mix of real world, this-is-how-you-get-shit-done content and not just weighty thought pieces like this one :P Thanks...</p>]]></content:encoded></item><item><title><![CDATA[How to compute reservation coverage (and utilization) from your AWS bill]]></title><description><![CDATA[&#128161; Starting a new tag called "Dancing Lessons", where we'll teach our cloud bills to do tricks you might have suspected they could do, but not known how to get them to do it.]]></description><link>https://www.thefinoperator.com/p/how-to-compute-reservation-coverage-and-utilization-from-your-aws-bill</link><guid isPermaLink="false">https://www.thefinoperator.com/p/how-to-compute-reservation-coverage-and-utilization-from-your-aws-bill</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Thu, 10 Aug 2023 20:19:29 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6ce83c60-f6c0-4d5c-9a0e-c31f1793c694_2000x933.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#128161;</p><p>Starting a new tag called "Dancing Lessons", where we'll teach our cloud bills to do tricks you might have suspected they could do, but not known how to get them to do it.</p><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lAya!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ce557db-a150-4ed7-b354-9b5d1dfe806f_2000x933.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lAya!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ce557db-a150-4ed7-b354-9b5d1dfe806f_2000x933.png 424w, https://substackcdn.com/image/fetch/$s_!lAya!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ce557db-a150-4ed7-b354-9b5d1dfe806f_2000x933.png 848w, https://substackcdn.com/image/fetch/$s_!lAya!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ce557db-a150-4ed7-b354-9b5d1dfe806f_2000x933.png 1272w, https://substackcdn.com/image/fetch/$s_!lAya!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ce557db-a150-4ed7-b354-9b5d1dfe806f_2000x933.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lAya!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ce557db-a150-4ed7-b354-9b5d1dfe806f_2000x933.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ce557db-a150-4ed7-b354-9b5d1dfe806f_2000x933.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How to compute reservation coverage (and utilization) from your AWS bill&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="How to compute reservation coverage (and utilization) from your AWS bill" title="How to compute reservation coverage (and utilization) from your AWS bill" srcset="https://substackcdn.com/image/fetch/$s_!lAya!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ce557db-a150-4ed7-b354-9b5d1dfe806f_2000x933.png 424w, https://substackcdn.com/image/fetch/$s_!lAya!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ce557db-a150-4ed7-b354-9b5d1dfe806f_2000x933.png 848w, https://substackcdn.com/image/fetch/$s_!lAya!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ce557db-a150-4ed7-b354-9b5d1dfe806f_2000x933.png 1272w, https://substackcdn.com/image/fetch/$s_!lAya!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ce557db-a150-4ed7-b354-9b5d1dfe806f_2000x933.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><p>Today we're going to get our AWS CUR to tell us all about Savings Plan <em>and</em> Reservation coverage in the same report. &nbsp;After we're done with that, we're going to look at how calculate Savings Plan utilization to make sure we're not overpurchasing, or to quantify by how much if we've already made the boo-boo.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aOO_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded9eeac-e411-4eb0-bd50-1e9b3b84ebf1_1532x984.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aOO_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded9eeac-e411-4eb0-bd50-1e9b3b84ebf1_1532x984.png 424w, https://substackcdn.com/image/fetch/$s_!aOO_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded9eeac-e411-4eb0-bd50-1e9b3b84ebf1_1532x984.png 848w, https://substackcdn.com/image/fetch/$s_!aOO_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded9eeac-e411-4eb0-bd50-1e9b3b84ebf1_1532x984.png 1272w, https://substackcdn.com/image/fetch/$s_!aOO_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded9eeac-e411-4eb0-bd50-1e9b3b84ebf1_1532x984.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aOO_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded9eeac-e411-4eb0-bd50-1e9b3b84ebf1_1532x984.png" width="1532" height="984" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ded9eeac-e411-4eb0-bd50-1e9b3b84ebf1_1532x984.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:984,&quot;width&quot;:1532,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How to compute reservation coverage (and utilization) from your AWS bill&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="How to compute reservation coverage (and utilization) from your AWS bill" title="How to compute reservation coverage (and utilization) from your AWS bill" srcset="https://substackcdn.com/image/fetch/$s_!aOO_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded9eeac-e411-4eb0-bd50-1e9b3b84ebf1_1532x984.png 424w, https://substackcdn.com/image/fetch/$s_!aOO_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded9eeac-e411-4eb0-bd50-1e9b3b84ebf1_1532x984.png 848w, https://substackcdn.com/image/fetch/$s_!aOO_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded9eeac-e411-4eb0-bd50-1e9b3b84ebf1_1532x984.png 1272w, https://substackcdn.com/image/fetch/$s_!aOO_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded9eeac-e411-4eb0-bd50-1e9b3b84ebf1_1532x984.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">AWS Reservation coverage report.</figcaption></figure></div><p>I'm sure you've looked at this one a few times - the AWS reservation coverage report back in cost explorer. &nbsp;This is distinct from the Savings Plan report, which has the exact same shape but lives in a different tab in the cost explorer. &nbsp;I find this situation a little lacking. &nbsp;I wanted these two reports in 1 place, so that I could explain to our stakeholders what a job we were doing managing our <em>discount inventory</em>. &nbsp;See, some years back we decided to stop buying RIs and go all in on SPs, so for years now we've had a blend of the two and keeping an eye on each is a thing. &nbsp;This required me to write a tiny bit of SQL after understanding how these reports are put together. &nbsp;</p><p>The first bit of SQL, against your AWS CUR -</p><pre><code>CASE
    WHEN line_item_type = 'DiscountedUsage' THEN 'Reservation'
    WHEN line_item_type = 'SavingsPlanCoveredUsage' THEN 'Savings Plan'
    WHEN line_item_usage_type LIKE '%SpotUsage%' THEN 'Spot'
    WHEN line_item_type = 'Usage' THEN 'On Demand'
    ELSE NULL
END AS finops_pricing_model,</code></pre><p>This gives us a very helpful column in our bill to slice our usage line items by the billing model they are under at the time of usage. &nbsp;</p><p>I have another dimension/column that I can use to explicitly ignore Spot usage and anything not related to <em>hypothetically</em> reservable usage, since I don't really want to report that out in our reservation coverage reporting -</p><pre><code>CASE
    WHEN line_item_type IN 
    ('DiscountedUsage', 'SavingsPlanCoveredUsage', 'Usage') AND (
        line_item_usage_type LIKE '%BoxUsage%' OR
        line_item_usage_type LIKE '%EBSOptimized%'
    ) THEN 'Reservable Resource'
    -- this value ^^ allows me to target only usage line items for which
    -- a discount _could_ hypothetically apply.  
    ELSE 'Non-Reservable Resource'
END AS finops_usage_class,</code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DKiD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00606c40-248e-4f0b-8b1e-7439a02bdf19_2198x964.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DKiD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00606c40-248e-4f0b-8b1e-7439a02bdf19_2198x964.png 424w, https://substackcdn.com/image/fetch/$s_!DKiD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00606c40-248e-4f0b-8b1e-7439a02bdf19_2198x964.png 848w, https://substackcdn.com/image/fetch/$s_!DKiD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00606c40-248e-4f0b-8b1e-7439a02bdf19_2198x964.png 1272w, https://substackcdn.com/image/fetch/$s_!DKiD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00606c40-248e-4f0b-8b1e-7439a02bdf19_2198x964.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DKiD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00606c40-248e-4f0b-8b1e-7439a02bdf19_2198x964.png" width="2000" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00606c40-248e-4f0b-8b1e-7439a02bdf19_2198x964.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:877,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How to compute reservation coverage (and utilization) from your AWS bill&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="How to compute reservation coverage (and utilization) from your AWS bill" title="How to compute reservation coverage (and utilization) from your AWS bill" srcset="https://substackcdn.com/image/fetch/$s_!DKiD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00606c40-248e-4f0b-8b1e-7439a02bdf19_2198x964.png 424w, https://substackcdn.com/image/fetch/$s_!DKiD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00606c40-248e-4f0b-8b1e-7439a02bdf19_2198x964.png 848w, https://substackcdn.com/image/fetch/$s_!DKiD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00606c40-248e-4f0b-8b1e-7439a02bdf19_2198x964.png 1272w, https://substackcdn.com/image/fetch/$s_!DKiD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00606c40-248e-4f0b-8b1e-7439a02bdf19_2198x964.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Reservable resource spend by pricing model, on-demand dollars.</figcaption></figure></div><p>So here's an interesting thing, and why you should really care deeply about the data that you're managing in your FinOps practice. &nbsp;The chart above shows our coverage daily for the first 3 months of this year, reporting the same way that Amazon reports it - using the "on demand" cost of the resource in question to calculate your coverage. &nbsp;This method of reporting will make the coverage appear higher versus the following chart, which rolls up the exact same data but reports on a different metrics - the <a href="https://www.thefinoperator.com/most-important-columns-aws-cur/">finops_effective_cost</a> metric, which computes what we're actually paying for these resources.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JF9l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba4e98a-f1eb-4650-8a8d-769c2e8b5c32_2212x1028.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JF9l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba4e98a-f1eb-4650-8a8d-769c2e8b5c32_2212x1028.png 424w, https://substackcdn.com/image/fetch/$s_!JF9l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba4e98a-f1eb-4650-8a8d-769c2e8b5c32_2212x1028.png 848w, https://substackcdn.com/image/fetch/$s_!JF9l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba4e98a-f1eb-4650-8a8d-769c2e8b5c32_2212x1028.png 1272w, https://substackcdn.com/image/fetch/$s_!JF9l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba4e98a-f1eb-4650-8a8d-769c2e8b5c32_2212x1028.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JF9l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba4e98a-f1eb-4650-8a8d-769c2e8b5c32_2212x1028.png" width="2000" height="929" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0ba4e98a-f1eb-4650-8a8d-769c2e8b5c32_2212x1028.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:929,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How to compute reservation coverage (and utilization) from your AWS bill&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="How to compute reservation coverage (and utilization) from your AWS bill" title="How to compute reservation coverage (and utilization) from your AWS bill" srcset="https://substackcdn.com/image/fetch/$s_!JF9l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba4e98a-f1eb-4650-8a8d-769c2e8b5c32_2212x1028.png 424w, https://substackcdn.com/image/fetch/$s_!JF9l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba4e98a-f1eb-4650-8a8d-769c2e8b5c32_2212x1028.png 848w, https://substackcdn.com/image/fetch/$s_!JF9l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba4e98a-f1eb-4650-8a8d-769c2e8b5c32_2212x1028.png 1272w, https://substackcdn.com/image/fetch/$s_!JF9l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba4e98a-f1eb-4650-8a8d-769c2e8b5c32_2212x1028.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Reservable resource spend by pricing model, actual amortized dollars spent.</figcaption></figure></div><p>You'll notice the coverage doesn't appear to be quite as complete, even though it is arguably giving you a more realistic version of actual dollars spent. &nbsp;I want you, reader, to understand my manifesto on this point.</p><p>&#8252;&#65039;</p><p>Whomever best understands the data in a given business area effectively <em>controls</em> that data, and whomever controls the data will most easily control the narrative of what that data represents. <br><br>This is why it is absolutely paramount for the FinOps practitioner to have a deeper understanding of the billing data and the technical and business processes that it represents than anyone in their organization.</p><p>Now, let's move to the counterpart - savings plan utilization.</p><h2>Savings plan and reservation utilization</h2><p>This is one that I'm still learning, and have only come to my current understanding recently. &nbsp;My early months in the AWS bill were spent largely in the line items that represent Usage of some kind or another. &nbsp;The <a href="https://docs.aws.amazon.com/cur/latest/userguide/savingsplans-columns.html?ref=thefinoperator.com">SavingsPlan</a> and <a href="https://docs.aws.amazon.com/cur/latest/userguide/reservation-columns.html?ref=thefinoperator.com">Reservation</a> line items were to be dealt with later. &nbsp;Besides, I was able to pull out the cost of our reservations and savings plans in the <a href="https://www.thefinoperator.com/most-important-columns-aws-cur/">amortized line item</a> usage columns and get what I needed, but now I find myself in that uncomfortable if inevitable position of being ... overpurchased on Savings Plans. &nbsp;</p><p>Firstly, you'll notice that the Savings Plan and Reservation coverage has a counterpart chart - the utilization reporting. &nbsp;This is great, but I had no idea what it meant in terms of dollars if the percentage dropped below 100</p><p>This exploration was tipped off by my discovery of the <a href="https://docs.aws.amazon.com/cur/latest/userguide/savingsplans-columns.html?ref=thefinoperator.com#savingsplans-details-U">savingsPlan/UsedCommitment</a> column, while diving around in the docs. &nbsp;By the way - I dive around in docs without aim a lot. &nbsp;Just saying. &nbsp;You learn a lot that way. &nbsp;So let's start at the top, with a computed column I call T<em>otal Amortized SP cost:</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sIi2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cded50-bddc-4792-a9d1-39cf48c0dfeb_896x418.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sIi2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cded50-bddc-4792-a9d1-39cf48c0dfeb_896x418.png 424w, https://substackcdn.com/image/fetch/$s_!sIi2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cded50-bddc-4792-a9d1-39cf48c0dfeb_896x418.png 848w, https://substackcdn.com/image/fetch/$s_!sIi2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cded50-bddc-4792-a9d1-39cf48c0dfeb_896x418.png 1272w, https://substackcdn.com/image/fetch/$s_!sIi2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cded50-bddc-4792-a9d1-39cf48c0dfeb_896x418.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sIi2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cded50-bddc-4792-a9d1-39cf48c0dfeb_896x418.png" width="896" height="418" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f9cded50-bddc-4792-a9d1-39cf48c0dfeb_896x418.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:418,&quot;width&quot;:896,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How to compute reservation coverage (and utilization) from your AWS bill&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="How to compute reservation coverage (and utilization) from your AWS bill" title="How to compute reservation coverage (and utilization) from your AWS bill" srcset="https://substackcdn.com/image/fetch/$s_!sIi2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cded50-bddc-4792-a9d1-39cf48c0dfeb_896x418.png 424w, https://substackcdn.com/image/fetch/$s_!sIi2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cded50-bddc-4792-a9d1-39cf48c0dfeb_896x418.png 848w, https://substackcdn.com/image/fetch/$s_!sIi2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cded50-bddc-4792-a9d1-39cf48c0dfeb_896x418.png 1272w, https://substackcdn.com/image/fetch/$s_!sIi2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cded50-bddc-4792-a9d1-39cf48c0dfeb_896x418.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When filtered to only include line items <code>WHERE line_item_type = "SavingsPlanRecurringFee"</code> you get the total cost of your savings plans for that time period, including the amortized upfront payments. &nbsp;So this is pretty simple now, you go <code>sum(totalSPCost) - sum(SP_used_commitment)</code> and if you wind up with anything more than 0, you have overpurchased your Savings Plans.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!odSA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4311b9-c279-4e36-b1a0-17c96512eac9_894x472.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!odSA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4311b9-c279-4e36-b1a0-17c96512eac9_894x472.png 424w, https://substackcdn.com/image/fetch/$s_!odSA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4311b9-c279-4e36-b1a0-17c96512eac9_894x472.png 848w, https://substackcdn.com/image/fetch/$s_!odSA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4311b9-c279-4e36-b1a0-17c96512eac9_894x472.png 1272w, https://substackcdn.com/image/fetch/$s_!odSA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4311b9-c279-4e36-b1a0-17c96512eac9_894x472.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!odSA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4311b9-c279-4e36-b1a0-17c96512eac9_894x472.png" width="894" height="472" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae4311b9-c279-4e36-b1a0-17c96512eac9_894x472.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:472,&quot;width&quot;:894,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How to compute reservation coverage (and utilization) from your AWS bill&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="How to compute reservation coverage (and utilization) from your AWS bill" title="How to compute reservation coverage (and utilization) from your AWS bill" srcset="https://substackcdn.com/image/fetch/$s_!odSA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4311b9-c279-4e36-b1a0-17c96512eac9_894x472.png 424w, https://substackcdn.com/image/fetch/$s_!odSA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4311b9-c279-4e36-b1a0-17c96512eac9_894x472.png 848w, https://substackcdn.com/image/fetch/$s_!odSA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4311b9-c279-4e36-b1a0-17c96512eac9_894x472.png 1272w, https://substackcdn.com/image/fetch/$s_!odSA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4311b9-c279-4e36-b1a0-17c96512eac9_894x472.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Now you can do some relatively simple math to calculate your utilization percentage -</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yNM7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae5e4bb0-3206-4150-8179-e89224c68a89_902x464.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yNM7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae5e4bb0-3206-4150-8179-e89224c68a89_902x464.png 424w, https://substackcdn.com/image/fetch/$s_!yNM7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae5e4bb0-3206-4150-8179-e89224c68a89_902x464.png 848w, https://substackcdn.com/image/fetch/$s_!yNM7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae5e4bb0-3206-4150-8179-e89224c68a89_902x464.png 1272w, https://substackcdn.com/image/fetch/$s_!yNM7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae5e4bb0-3206-4150-8179-e89224c68a89_902x464.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yNM7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae5e4bb0-3206-4150-8179-e89224c68a89_902x464.png" width="902" height="464" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae5e4bb0-3206-4150-8179-e89224c68a89_902x464.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:464,&quot;width&quot;:902,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How to compute reservation coverage (and utilization) from your AWS bill&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="How to compute reservation coverage (and utilization) from your AWS bill" title="How to compute reservation coverage (and utilization) from your AWS bill" srcset="https://substackcdn.com/image/fetch/$s_!yNM7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae5e4bb0-3206-4150-8179-e89224c68a89_902x464.png 424w, https://substackcdn.com/image/fetch/$s_!yNM7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae5e4bb0-3206-4150-8179-e89224c68a89_902x464.png 848w, https://substackcdn.com/image/fetch/$s_!yNM7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae5e4bb0-3206-4150-8179-e89224c68a89_902x464.png 1272w, https://substackcdn.com/image/fetch/$s_!yNM7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae5e4bb0-3206-4150-8179-e89224c68a89_902x464.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Utilization percentage calculation</figcaption></figure></div><p>And if you plot both of those metrics together on the same chart -</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UAXM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a87f4d7-3a26-4385-967f-56e485c46866_2000x814.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UAXM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a87f4d7-3a26-4385-967f-56e485c46866_2000x814.png 424w, https://substackcdn.com/image/fetch/$s_!UAXM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a87f4d7-3a26-4385-967f-56e485c46866_2000x814.png 848w, https://substackcdn.com/image/fetch/$s_!UAXM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a87f4d7-3a26-4385-967f-56e485c46866_2000x814.png 1272w, https://substackcdn.com/image/fetch/$s_!UAXM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a87f4d7-3a26-4385-967f-56e485c46866_2000x814.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UAXM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a87f4d7-3a26-4385-967f-56e485c46866_2000x814.png" width="2000" height="814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a87f4d7-3a26-4385-967f-56e485c46866_2000x814.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:814,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How to compute reservation coverage (and utilization) from your AWS bill&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="How to compute reservation coverage (and utilization) from your AWS bill" title="How to compute reservation coverage (and utilization) from your AWS bill" srcset="https://substackcdn.com/image/fetch/$s_!UAXM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a87f4d7-3a26-4385-967f-56e485c46866_2000x814.png 424w, https://substackcdn.com/image/fetch/$s_!UAXM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a87f4d7-3a26-4385-967f-56e485c46866_2000x814.png 848w, https://substackcdn.com/image/fetch/$s_!UAXM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a87f4d7-3a26-4385-967f-56e485c46866_2000x814.png 1272w, https://substackcdn.com/image/fetch/$s_!UAXM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a87f4d7-3a26-4385-967f-56e485c46866_2000x814.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Savings Plan Utilization (blue line) and actual $$ amount that represents (in purple)</figcaption></figure></div><p>So ideally you want the blue line stuck to the ceiling and no purple bars at all but here in the real world, when stakeholders start yelling at you about on demand spend as this unequivocal evil to be avoided at all costs, this can happen. &nbsp;It's super helpful if you already have some reporting like this ready to show them the flip side and to help them understanding that optimizing for <em>this one metric</em> is rarely a good idea in life <em>or</em> business. &nbsp;Indeed, we've been doing really good this year at strategizing about how we can start optimizing hardware inventories, and after spending Q1 getting the business about our on demand spend, now we have the opposite problem.</p><p>Fortunately, SPs are expiring on their own and bringing that overcommit number back down, but I never want to see this happen again. &nbsp;I share my shame so that hopefully you don't have to.</p><h2>Reservation Utilization</h2><p>As you can see from the main image at the top, we chose to start moving out of reservations and into savings plans a little over 3 years ago. &nbsp;Our inventory has been almost entirely converted at this point, so I don't have a lot to offer on how to monitor reservation utilization. &nbsp;My hunch is that it's very similar to SP utilization though, I'll update this post when I have time to dig in a little bit.</p>]]></content:encoded></item><item><title><![CDATA[FinOps is performance optimization]]></title><description><![CDATA[In the early days of the automobile, aerodynamics were not a huge concern.]]></description><link>https://www.thefinoperator.com/p/finops-is-performance-optimization</link><guid isPermaLink="false">https://www.thefinoperator.com/p/finops-is-performance-optimization</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Fri, 04 Aug 2023 18:05:40 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/905b2011-b106-4704-aded-7f54b0344168_2000x1050.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PsnO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59f63d6-a24b-40dc-94fd-c0bd156bad10_2000x1050.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PsnO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59f63d6-a24b-40dc-94fd-c0bd156bad10_2000x1050.webp 424w, https://substackcdn.com/image/fetch/$s_!PsnO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59f63d6-a24b-40dc-94fd-c0bd156bad10_2000x1050.webp 848w, https://substackcdn.com/image/fetch/$s_!PsnO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59f63d6-a24b-40dc-94fd-c0bd156bad10_2000x1050.webp 1272w, https://substackcdn.com/image/fetch/$s_!PsnO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59f63d6-a24b-40dc-94fd-c0bd156bad10_2000x1050.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PsnO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59f63d6-a24b-40dc-94fd-c0bd156bad10_2000x1050.webp" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a59f63d6-a24b-40dc-94fd-c0bd156bad10_2000x1050.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;FinOps is performance optimization&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="FinOps is performance optimization" title="FinOps is performance optimization" srcset="https://substackcdn.com/image/fetch/$s_!PsnO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59f63d6-a24b-40dc-94fd-c0bd156bad10_2000x1050.webp 424w, https://substackcdn.com/image/fetch/$s_!PsnO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59f63d6-a24b-40dc-94fd-c0bd156bad10_2000x1050.webp 848w, https://substackcdn.com/image/fetch/$s_!PsnO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59f63d6-a24b-40dc-94fd-c0bd156bad10_2000x1050.webp 1272w, https://substackcdn.com/image/fetch/$s_!PsnO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa59f63d6-a24b-40dc-94fd-c0bd156bad10_2000x1050.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><p>In the early days of the automobile, aerodynamics were not a huge concern. &nbsp;"Cars" were basically horse carriages fitted with outboard motors rather than being pulled by horses. &nbsp;It wasn't until a little later that, as the engines became more powerful and the cars became faster, the shape of the car started to matter in many different ways. &nbsp;The point of the car hasn't changed since the late 1800s, but the various optimizations on which humans are constantly innovating has not stopped ever since.</p><div><hr></div><p>I was a web dev once. &nbsp;I'd be stunned if anyone reading this hadn't heard <a href="https://www.conductor.com/academy/page-speed-resources/faq/amazon-page-speed-study/?ref=thefinoperator.com">the old yarn</a> that Amazon once did a study and concluded that every 100ms of additional page load time cost them 1% of total sales. &nbsp;You know what a web dev does the first time they hear this one? &nbsp;Well, if it's 2008 or so you go and run your site through Google's PageSpeed test, an <a href="https://developers.google.com/speed/docs/insights/v5/about?ref=thefinoperator.com">evolved version</a> of which lives on to this day.</p><p>You know what it told you to do? &nbsp;It told you to take your 400 javascript files and smush them all into one file and then maybe to do some magic called "<a href="https://minify-js.com/?ref=thefinoperator.com">minification</a>" and then to GZip them all, and darned if it didn't make your site faster. &nbsp;You didn't have to rewrite your site and you definitely didn't have to fuss with the functionality, you just made some optimizations to better handle how it physically travels over the wire to your customer. &nbsp;The automation to handle all this has been an open source commodity for over a decade now.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rySU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f780302-bfc4-4f14-a959-a9aed878bd0d_2000x1333.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rySU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f780302-bfc4-4f14-a959-a9aed878bd0d_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rySU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f780302-bfc4-4f14-a959-a9aed878bd0d_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rySU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f780302-bfc4-4f14-a959-a9aed878bd0d_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rySU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f780302-bfc4-4f14-a959-a9aed878bd0d_2000x1333.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rySU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f780302-bfc4-4f14-a959-a9aed878bd0d_2000x1333.jpeg" width="3000" height="2000" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f780302-bfc4-4f14-a959-a9aed878bd0d_2000x1333.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2000,&quot;width&quot;:3000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;FinOps is performance optimization&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="FinOps is performance optimization" title="FinOps is performance optimization" srcset="https://substackcdn.com/image/fetch/$s_!rySU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f780302-bfc4-4f14-a959-a9aed878bd0d_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rySU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f780302-bfc4-4f14-a959-a9aed878bd0d_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rySU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f780302-bfc4-4f14-a959-a9aed878bd0d_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rySU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f780302-bfc4-4f14-a959-a9aed878bd0d_2000x1333.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@spacex?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">SpaceX</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure></div><p>We are in the early days of cloud computing, and it's analogous to the early days of many new technology paradigms. &nbsp;People are just trying to get their heads around it for the most part, and transition their old ways of thinking and doing into these new tools and ways of doing. &nbsp;They bring their preconceptions and previous mental models with them. &nbsp;This is healthy.</p><p>This gives us simple analogies to grab on to when explaining FinOps.</p><p>&#128161;</p><p>FinOps is performance optimization for your organization's cloud infrastructure.&nbsp;</p><p>Instead of measuring network latencies or CPU or memory utilization, we're zooming out a little bit and looking more broadly at the whole system. &nbsp;Which parts cost a lot of money? &nbsp;Should they cost a lot of money? &nbsp;How can that part be made more cost effective without sacrificing functionality for our users and quality of life for the engineers building it?</p><p>Posing the problem this way is especially effective for one of your two primary stakeholders as a FinOps practitioner - the engineering org. &nbsp;Performance optimization is a fun part of the craft of building things. &nbsp;Engineers typically have &nbsp;all manner of debugging and profiling tools available when they want to figure out which parts of the system are (under)performant, but this wealth of tooling and visibility and <strong>awareness</strong> hasn't completely made it into the area of cloud costs yet.</p><p>That is part of our job, as I see it. &nbsp;We make otherwise inscrutable billing info meaningful by translating it into the language of our engineering orgs. &nbsp;Once we do that it becomes, essentially, profiling data. &nbsp;It profiles the efficiencies and inefficiencies of our cloud infrastructure, and then we can start getting creative about how to make them more performant within the same functional footprint. &nbsp;It allows the process of optimizing your company's cloud infrastructure to start happening on its own, without your needing to push it too much.</p><p>Happy Friday, and thanks for reading.</p>]]></content:encoded></item><item><title><![CDATA[GCP compute can be both reserved AND on demand]]></title><description><![CDATA[&#128564; Bare minimum Mondays: wherein we scratch the surface of a topic to be explored further in a future post.]]></description><link>https://www.thefinoperator.com/p/gcp-both-reserved-and-on-demand</link><guid isPermaLink="false">https://www.thefinoperator.com/p/gcp-both-reserved-and-on-demand</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Mon, 31 Jul 2023 19:34:32 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c9ad0192-d3bc-4285-85cd-75741350c089_2000x1333.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#128564;</p><p>Bare minimum Mondays: wherein we scratch the surface of a topic to be explored further in a future post.</p><p>I was sitting around a table of practitioners recently, discussing the "vibe" of the big 3 cloud vendors - AWS, Azure, and GCP. &nbsp;We all pretty much agreed that they live on a spectrum with "built for engineers" at one end and "built for the folks who pay the bills" at the other. &nbsp;</p><p><code>&lt;---built for engineers---------------built for finance---&gt;</code></p><p>Azure is, in our unanimous opinion, built first for the folks who pay the bills. &nbsp;It is the bill that I have spent the least amount of time in so far, primarily because I don't feel like I really needed a ton of effort to <em>figure it out</em>. &nbsp;They give you two different versions of the bill - the Actual and the Amortized, and after that everything just kind of works. What things cost lives in the one and only column you'd think to look into. &nbsp;</p><p>AWS lives in the middle - a world class technical feature set and obviously many years of hard won experience at play in the engineering of the CUR.</p><p>At the far end of the spectrum, in a world where engineers scoff at notions of paying for things and bean counter concepts like amortization lives GCP.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6xI-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51478df3-da64-4084-9126-d0883181d29c_2000x1333.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6xI-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51478df3-da64-4084-9126-d0883181d29c_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6xI-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51478df3-da64-4084-9126-d0883181d29c_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6xI-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51478df3-da64-4084-9126-d0883181d29c_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6xI-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51478df3-da64-4084-9126-d0883181d29c_2000x1333.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6xI-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51478df3-da64-4084-9126-d0883181d29c_2000x1333.jpeg" width="3656" height="2436" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/51478df3-da64-4084-9126-d0883181d29c_2000x1333.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2436,&quot;width&quot;:3656,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Rainbow created with garden hosepipe&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Rainbow created with garden hosepipe" title="Rainbow created with garden hosepipe" srcset="https://substackcdn.com/image/fetch/$s_!6xI-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51478df3-da64-4084-9126-d0883181d29c_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6xI-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51478df3-da64-4084-9126-d0883181d29c_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6xI-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51478df3-da64-4084-9126-d0883181d29c_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6xI-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51478df3-da64-4084-9126-d0883181d29c_2000x1333.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@tumbao1949?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">James Wainscoat</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure></div><h2>One line item, many pricing models</h2><p>Whereas in the other two vendors a given line item can be said to be either "on demand" or "reserved" (or .. savings plan'd), on GCP things are a little different. &nbsp;The gist is that every line has two columns that tell you the world - <code>cost</code> and <code>credits</code>. &nbsp;<code>Cost</code> can be thought of as the "on demand" cost of the thing, and then you subtract the credits column to arrive at something like the "net cost" of the item. &nbsp;The trick is that <code>credits</code> is what's known in BigQuery as a "repeated" field.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jvII!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb2e482-f7db-401b-bf4d-f786ed25d225_1170x354.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jvII!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb2e482-f7db-401b-bf4d-f786ed25d225_1170x354.png 424w, https://substackcdn.com/image/fetch/$s_!jvII!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb2e482-f7db-401b-bf4d-f786ed25d225_1170x354.png 848w, https://substackcdn.com/image/fetch/$s_!jvII!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb2e482-f7db-401b-bf4d-f786ed25d225_1170x354.png 1272w, https://substackcdn.com/image/fetch/$s_!jvII!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb2e482-f7db-401b-bf4d-f786ed25d225_1170x354.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jvII!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb2e482-f7db-401b-bf4d-f786ed25d225_1170x354.png" width="1170" height="354" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/acb2e482-f7db-401b-bf4d-f786ed25d225_1170x354.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:354,&quot;width&quot;:1170,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!jvII!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb2e482-f7db-401b-bf4d-f786ed25d225_1170x354.png 424w, https://substackcdn.com/image/fetch/$s_!jvII!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb2e482-f7db-401b-bf4d-f786ed25d225_1170x354.png 848w, https://substackcdn.com/image/fetch/$s_!jvII!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb2e482-f7db-401b-bf4d-f786ed25d225_1170x354.png 1272w, https://substackcdn.com/image/fetch/$s_!jvII!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb2e482-f7db-401b-bf4d-f786ed25d225_1170x354.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The schema of the repeated <code>credits</code> record in your GCP bill.</figcaption></figure></div><p>Because this is bare minimum Monday, I'm not getting into the details here now. &nbsp;All you need to know is that <em>multiple credits can apply to any given line item</em>. &nbsp;A line item can and will have charges associated with <a href="https://cloud.google.com/docs/cuds?ref=thefinoperator.com">a CUD</a>, or multiple discreet CUDs, of potentially <a href="https://cloud.google.com/docs/cuds?ref=thefinoperator.com#commitment_types">different types</a>, as well as other random discounts/credits too.</p><p>The following is therefore a very common pattern in analyzing your GCP bill.</p><pre><code>cost
- sum(credits)
--------------
net_cost</code></pre><p>Now, <code>net_cost</code> is not the "true cost" of a resource either, because you're not &nbsp;yet factoring in the cost of those discounts. &nbsp;We'll get into lots of specifics in future posts.</p>]]></content:encoded></item><item><title><![CDATA[BigQuery Editions pricing in practice, late July 2023]]></title><description><![CDATA[BigQuery is a fabulously capable "cloud native" data warehouse product built by our friends at Google Cloud Platform, GCP.]]></description><link>https://www.thefinoperator.com/p/bigquery-editions-pricing</link><guid isPermaLink="false">https://www.thefinoperator.com/p/bigquery-editions-pricing</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Fri, 28 Jul 2023 16:29:47 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/77ceea64-902f-4e2d-86ce-ced1bc8f6060_2000x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bDPO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f2b0c1-2a5a-4411-a1bd-d2fa2160dc83_2000x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bDPO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f2b0c1-2a5a-4411-a1bd-d2fa2160dc83_2000x816.png 424w, https://substackcdn.com/image/fetch/$s_!bDPO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f2b0c1-2a5a-4411-a1bd-d2fa2160dc83_2000x816.png 848w, https://substackcdn.com/image/fetch/$s_!bDPO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f2b0c1-2a5a-4411-a1bd-d2fa2160dc83_2000x816.png 1272w, https://substackcdn.com/image/fetch/$s_!bDPO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f2b0c1-2a5a-4411-a1bd-d2fa2160dc83_2000x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bDPO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f2b0c1-2a5a-4411-a1bd-d2fa2160dc83_2000x816.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/17f2b0c1-2a5a-4411-a1bd-d2fa2160dc83_2000x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;BigQuery Editions pricing in practice, late July 2023&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="BigQuery Editions pricing in practice, late July 2023" title="BigQuery Editions pricing in practice, late July 2023" srcset="https://substackcdn.com/image/fetch/$s_!bDPO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f2b0c1-2a5a-4411-a1bd-d2fa2160dc83_2000x816.png 424w, https://substackcdn.com/image/fetch/$s_!bDPO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f2b0c1-2a5a-4411-a1bd-d2fa2160dc83_2000x816.png 848w, https://substackcdn.com/image/fetch/$s_!bDPO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f2b0c1-2a5a-4411-a1bd-d2fa2160dc83_2000x816.png 1272w, https://substackcdn.com/image/fetch/$s_!bDPO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f2b0c1-2a5a-4411-a1bd-d2fa2160dc83_2000x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><p>BigQuery is a fabulously capable "cloud native" data warehouse product built by our friends at Google Cloud Platform, GCP. It is the foundation of our entire data ecosystem at my current employer and my name has been on the dotted line as internal owner for a few years now. Because our FinOps tooling stack is the same as our internal BI stack, this means that BigQuery (henceforth BQ) is also the foundation of our FinOps data and visibility tooling effort as well.</p><p>We have tinkered with various flavors of controlling BQ costs since early 2022 when the Data function began to get some traction here, when we were using their standard on-demand pricing. I am here today to talk about recent innovations to their pricing model and will (try to) save historical story telling for another post.</p><p>TLDR - It's a net positive, with caveats.</p><h2>The good - physical storage pricing</h2><p>So perhaps you noticed this little SKU switcheroo at the beginning of this year:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IUI9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f237d2-95e6-4fe0-aec0-907410eef905_2000x825.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IUI9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f237d2-95e6-4fe0-aec0-907410eef905_2000x825.png 424w, https://substackcdn.com/image/fetch/$s_!IUI9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f237d2-95e6-4fe0-aec0-907410eef905_2000x825.png 848w, https://substackcdn.com/image/fetch/$s_!IUI9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f237d2-95e6-4fe0-aec0-907410eef905_2000x825.png 1272w, https://substackcdn.com/image/fetch/$s_!IUI9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f237d2-95e6-4fe0-aec0-907410eef905_2000x825.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IUI9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f237d2-95e6-4fe0-aec0-907410eef905_2000x825.png" width="2000" height="825" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46f237d2-95e6-4fe0-aec0-907410eef905_2000x825.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:825,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;BigQuery Editions pricing in practice, late July 2023&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="BigQuery Editions pricing in practice, late July 2023" title="BigQuery Editions pricing in practice, late July 2023" srcset="https://substackcdn.com/image/fetch/$s_!IUI9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f237d2-95e6-4fe0-aec0-907410eef905_2000x825.png 424w, https://substackcdn.com/image/fetch/$s_!IUI9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f237d2-95e6-4fe0-aec0-907410eef905_2000x825.png 848w, https://substackcdn.com/image/fetch/$s_!IUI9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f237d2-95e6-4fe0-aec0-907410eef905_2000x825.png 1272w, https://substackcdn.com/image/fetch/$s_!IUI9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f237d2-95e6-4fe0-aec0-907410eef905_2000x825.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">GCP BigQuery billing introducing new "logical storage" SKUs in early Jan 2023</figcaption></figure></div><p>This is a view from Metabase, our BI dashboard tool out of which we build our cost reporting. In early January this year, the BQ team suddenly got rid of 2 SKUs: Active Storage and Long Term Storage, and replaced them with Active <em>Logical</em> Storage and Long Term <em>Logical</em> Storage. The meaning of this wasn't explained at the time, but this was the setup for some announcements early this year that they'd be introducing a new storage class - <em>physical storage</em>.</p><p>&#128161;</p><p>The summary of physical storage is that it really should be called "compressed storage" and is billed at 2x the rate of logical storage <em>after</em> compression.</p><p>Whereas logical storage is billed at $X/GB/mo, physical storage is billed at $2X/GB/mo <em>but</em> physical storage measures (I presume) the actual physical size of the data on disk <em>after compression</em> whereas logical must measure the uncompressed size. BQ very helpfully gives you a clue in the details page of a given table, the same section where other table metadata is displayed.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7Ubo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F136d2eda-897b-4bb3-a421-b049afdea121_857x640.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7Ubo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F136d2eda-897b-4bb3-a421-b049afdea121_857x640.png 424w, https://substackcdn.com/image/fetch/$s_!7Ubo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F136d2eda-897b-4bb3-a421-b049afdea121_857x640.png 848w, https://substackcdn.com/image/fetch/$s_!7Ubo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F136d2eda-897b-4bb3-a421-b049afdea121_857x640.png 1272w, https://substackcdn.com/image/fetch/$s_!7Ubo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F136d2eda-897b-4bb3-a421-b049afdea121_857x640.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7Ubo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F136d2eda-897b-4bb3-a421-b049afdea121_857x640.png" width="857" height="640" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/136d2eda-897b-4bb3-a421-b049afdea121_857x640.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:857,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;BigQuery Editions pricing in practice, late July 2023&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="BigQuery Editions pricing in practice, late July 2023" title="BigQuery Editions pricing in practice, late July 2023" srcset="https://substackcdn.com/image/fetch/$s_!7Ubo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F136d2eda-897b-4bb3-a421-b049afdea121_857x640.png 424w, https://substackcdn.com/image/fetch/$s_!7Ubo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F136d2eda-897b-4bb3-a421-b049afdea121_857x640.png 848w, https://substackcdn.com/image/fetch/$s_!7Ubo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F136d2eda-897b-4bb3-a421-b049afdea121_857x640.png 1272w, https://substackcdn.com/image/fetch/$s_!7Ubo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F136d2eda-897b-4bb3-a421-b049afdea121_857x640.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">I didn't get the pricing exactly right, but this is a stunning example of the marvel that is compression.</figcaption></figure></div><p><a href="https://cloud.google.com/bigquery/pricing?ref=thefinoperator.com#storage">Detailed BQ storage pricing page here.</a></p><p><a href="https://gist.github.com/JGrubb/1a07c8bf1bf82755481ac868e568a0d0?ref=thefinoperator.com">Here is a query that you can run</a> from the BQ UI in each of your projects where you have storage enough to care about this topic. This runs at the project level, so be mindful of <a href="https://gist.github.com/JGrubb/1a07c8bf1bf82755481ac868e568a0d0?ref=thefinoperator.com#file-bigquery_physical_storage_pricing_estimator-sql-L18">line 18</a> where you choose your region, and then probably export the results to a G Sheet for actually sharing around. So far these estimates seem within reality for us. Now to that reality.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m6U4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb079ab76-09ae-4a1d-822f-3fadbd75fcb2_2000x828.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m6U4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb079ab76-09ae-4a1d-822f-3fadbd75fcb2_2000x828.png 424w, https://substackcdn.com/image/fetch/$s_!m6U4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb079ab76-09ae-4a1d-822f-3fadbd75fcb2_2000x828.png 848w, https://substackcdn.com/image/fetch/$s_!m6U4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb079ab76-09ae-4a1d-822f-3fadbd75fcb2_2000x828.png 1272w, https://substackcdn.com/image/fetch/$s_!m6U4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb079ab76-09ae-4a1d-822f-3fadbd75fcb2_2000x828.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m6U4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb079ab76-09ae-4a1d-822f-3fadbd75fcb2_2000x828.png" width="2000" height="828" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b079ab76-09ae-4a1d-822f-3fadbd75fcb2_2000x828.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:828,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;BigQuery Editions pricing in practice, late July 2023&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="BigQuery Editions pricing in practice, late July 2023" title="BigQuery Editions pricing in practice, late July 2023" srcset="https://substackcdn.com/image/fetch/$s_!m6U4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb079ab76-09ae-4a1d-822f-3fadbd75fcb2_2000x828.png 424w, https://substackcdn.com/image/fetch/$s_!m6U4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb079ab76-09ae-4a1d-822f-3fadbd75fcb2_2000x828.png 848w, https://substackcdn.com/image/fetch/$s_!m6U4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb079ab76-09ae-4a1d-822f-3fadbd75fcb2_2000x828.png 1272w, https://substackcdn.com/image/fetch/$s_!m6U4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb079ab76-09ae-4a1d-822f-3fadbd75fcb2_2000x828.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">About a 2/3 cut in BigQuery storage costs after switching to physical storage pricing.</figcaption></figure></div><p>We are one of Google's petabyte scale customers as all of our platform events flow constantly into BigQuery. Your mileage will most certainly vary, but after several months of waiting for this improvement, I am happy to report that for highly compressable datasets in BigQuery physical storage pricing is an absolute win.</p><h2>The bad - goodbye to flat rate query pricing</h2><p>Most of what has been marketed about BigQuery Editions is on this side of the house. They now market "autoscaling", presumably because suits with little to no infrastructure experience absolutely love the sound of that word. This is a shot from Google's internal customer marketing about what the autoscaling experience looks like:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AyvV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ceb561-8c4a-49d7-96e3-68131de00007_722x362.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AyvV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ceb561-8c4a-49d7-96e3-68131de00007_722x362.png 424w, https://substackcdn.com/image/fetch/$s_!AyvV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ceb561-8c4a-49d7-96e3-68131de00007_722x362.png 848w, https://substackcdn.com/image/fetch/$s_!AyvV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ceb561-8c4a-49d7-96e3-68131de00007_722x362.png 1272w, https://substackcdn.com/image/fetch/$s_!AyvV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ceb561-8c4a-49d7-96e3-68131de00007_722x362.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AyvV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ceb561-8c4a-49d7-96e3-68131de00007_722x362.png" width="722" height="362" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/36ceb561-8c4a-49d7-96e3-68131de00007_722x362.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:362,&quot;width&quot;:722,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;BigQuery Editions pricing in practice, late July 2023&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="BigQuery Editions pricing in practice, late July 2023" title="BigQuery Editions pricing in practice, late July 2023" srcset="https://substackcdn.com/image/fetch/$s_!AyvV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ceb561-8c4a-49d7-96e3-68131de00007_722x362.png 424w, https://substackcdn.com/image/fetch/$s_!AyvV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ceb561-8c4a-49d7-96e3-68131de00007_722x362.png 848w, https://substackcdn.com/image/fetch/$s_!AyvV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ceb561-8c4a-49d7-96e3-68131de00007_722x362.png 1272w, https://substackcdn.com/image/fetch/$s_!AyvV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ceb561-8c4a-49d7-96e3-68131de00007_722x362.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The first rule of FinOps is that "only pay for what you use" means you're going to pay a lot.</figcaption></figure></div><p>Now, do your data warehouse workloads actually look like this? Because ours look like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CFxk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F168987a9-62c7-4cc0-8b33-7cc0c3512524_1880x762.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CFxk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F168987a9-62c7-4cc0-8b33-7cc0c3512524_1880x762.png 424w, https://substackcdn.com/image/fetch/$s_!CFxk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F168987a9-62c7-4cc0-8b33-7cc0c3512524_1880x762.png 848w, https://substackcdn.com/image/fetch/$s_!CFxk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F168987a9-62c7-4cc0-8b33-7cc0c3512524_1880x762.png 1272w, https://substackcdn.com/image/fetch/$s_!CFxk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F168987a9-62c7-4cc0-8b33-7cc0c3512524_1880x762.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CFxk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F168987a9-62c7-4cc0-8b33-7cc0c3512524_1880x762.png" width="1880" height="762" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/168987a9-62c7-4cc0-8b33-7cc0c3512524_1880x762.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:762,&quot;width&quot;:1880,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;BigQuery Editions pricing in practice, late July 2023&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="BigQuery Editions pricing in practice, late July 2023" title="BigQuery Editions pricing in practice, late July 2023" srcset="https://substackcdn.com/image/fetch/$s_!CFxk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F168987a9-62c7-4cc0-8b33-7cc0c3512524_1880x762.png 424w, https://substackcdn.com/image/fetch/$s_!CFxk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F168987a9-62c7-4cc0-8b33-7cc0c3512524_1880x762.png 848w, https://substackcdn.com/image/fetch/$s_!CFxk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F168987a9-62c7-4cc0-8b33-7cc0c3512524_1880x762.png 1272w, https://substackcdn.com/image/fetch/$s_!CFxk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F168987a9-62c7-4cc0-8b33-7cc0c3512524_1880x762.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Blue line - actual usage. Red line - billed usage.</figcaption></figure></div><p>Maybe the marketing version is over a 60 second timeframe, I don't know. The autoscaler is supposed to work in 1 minute increments, and granted we have a pretty busy warehouse, but the "capacity we're using" and the "capacity we're being charged for" do not fit each other nearly as neatly in the marketing. Possibly the granularity of this report over several hours is not tight enough to let me see the prettier truth, but to find this out I have to go build my own reporting out of the <em>INFORMATION SCHEMA</em>.</p><p>The capacity that we've reserved is 100 "baseline slots" with a max of 400 "autoscaled slots". I think this means that we're being charged for 100 slots no matter what we we do with them - your standard reserved capacity model - but that as the autoscaler detects whatever it detects, it will scale our billed-for capacity up to 400 slots - your standard on demand model. In other words, it is the worst of both worlds: we are back to a highly variable cost structure but with a maximum capacity cap in place that ensures that I have to care about both unpredictable costs <strong>and</strong> poor performance. In all the previous models it was either one or the other, now it's both.</p><p>And frankly, the autoscaler doesn't look very good as it autoscales your costs in a way that appears to only somewhat correlate with your actual usage per their reporting.</p><p>Here's how it's gone for the year so far:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!027E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0faa46-9434-4d9e-9e2e-98d3e378ed98_1988x1108.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!027E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0faa46-9434-4d9e-9e2e-98d3e378ed98_1988x1108.png 424w, https://substackcdn.com/image/fetch/$s_!027E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0faa46-9434-4d9e-9e2e-98d3e378ed98_1988x1108.png 848w, https://substackcdn.com/image/fetch/$s_!027E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0faa46-9434-4d9e-9e2e-98d3e378ed98_1988x1108.png 1272w, https://substackcdn.com/image/fetch/$s_!027E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0faa46-9434-4d9e-9e2e-98d3e378ed98_1988x1108.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!027E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0faa46-9434-4d9e-9e2e-98d3e378ed98_1988x1108.png" width="1988" height="1108" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d0faa46-9434-4d9e-9e2e-98d3e378ed98_1988x1108.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1108,&quot;width&quot;:1988,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;BigQuery Editions pricing in practice, late July 2023&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="BigQuery Editions pricing in practice, late July 2023" title="BigQuery Editions pricing in practice, late July 2023" srcset="https://substackcdn.com/image/fetch/$s_!027E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0faa46-9434-4d9e-9e2e-98d3e378ed98_1988x1108.png 424w, https://substackcdn.com/image/fetch/$s_!027E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0faa46-9434-4d9e-9e2e-98d3e378ed98_1988x1108.png 848w, https://substackcdn.com/image/fetch/$s_!027E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0faa46-9434-4d9e-9e2e-98d3e378ed98_1988x1108.png 1272w, https://substackcdn.com/image/fetch/$s_!027E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d0faa46-9434-4d9e-9e2e-98d3e378ed98_1988x1108.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">400 flat rate slots on the left, a max of 400 autoscaled slots on the right.</figcaption></figure></div><p>That big middle finger on the right side? That was a Materialized View that kept failing for a week before I noticed it. If we were on demand it wouldn't even have caused that, as query failures don't register on the TB-billed side of things. It truly is a bummer. Granted, we are not doing any <a href="https://cloud.google.com/bigquery/pricing?ref=thefinoperator.com#capacity_compute_analysis_pricing">long term commitments</a> yet, primarily because I have no idea how they work. You reserve in chunks of 100 slots, so does that mean that to cover my 400-max workload I have to reserve 400 slots and they are always on and we're back to flat rate pricing at a vastly higher rate? In fairness, I haven't asked our GCP reps yet but I don't know as of today.</p><h2>In conclusion</h2><p>The moves that the BigQuery pricing team have made this year have mostly been a net positive for us, as we are heavy users of BQ and store a lot of data there. The new physical storage pricing has been a huge savings for us, but the new Editions pricing on the compute side of the house is pretty annoying. I was blessed with being able to ignore compute costs for the most part for a little bit, but not anymore. Here's the full story from Q2 - present:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h0Y6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f12045-e71e-492c-a8f6-f3fdd4283476_2000x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h0Y6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f12045-e71e-492c-a8f6-f3fdd4283476_2000x816.png 424w, https://substackcdn.com/image/fetch/$s_!h0Y6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f12045-e71e-492c-a8f6-f3fdd4283476_2000x816.png 848w, https://substackcdn.com/image/fetch/$s_!h0Y6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f12045-e71e-492c-a8f6-f3fdd4283476_2000x816.png 1272w, https://substackcdn.com/image/fetch/$s_!h0Y6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f12045-e71e-492c-a8f6-f3fdd4283476_2000x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h0Y6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f12045-e71e-492c-a8f6-f3fdd4283476_2000x816.png" width="2000" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/26f12045-e71e-492c-a8f6-f3fdd4283476_2000x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;BigQuery Editions pricing in practice, late July 2023&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="BigQuery Editions pricing in practice, late July 2023" title="BigQuery Editions pricing in practice, late July 2023" srcset="https://substackcdn.com/image/fetch/$s_!h0Y6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f12045-e71e-492c-a8f6-f3fdd4283476_2000x816.png 424w, https://substackcdn.com/image/fetch/$s_!h0Y6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f12045-e71e-492c-a8f6-f3fdd4283476_2000x816.png 848w, https://substackcdn.com/image/fetch/$s_!h0Y6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f12045-e71e-492c-a8f6-f3fdd4283476_2000x816.png 1272w, https://substackcdn.com/image/fetch/$s_!h0Y6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26f12045-e71e-492c-a8f6-f3fdd4283476_2000x816.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">There's more drama to the left, but that's for a future post.</figcaption></figure></div><p>Thanks readers, and hopefully this can help some of you better understand these new BigQuery pricing changes for your org.</p>]]></content:encoded></item><item><title><![CDATA[The most important columns in your AWS bill - the cost metrics.]]></title><description><![CDATA[One of my earliest questions was &#8220;what do things actually cost?&#8221; On demand usage was easily available in the unblended_cost column, but if I take all DiscountedUsage line items (ones that are covered by a reservation) and SUM(unblended_cost), it gives me 0.]]></description><link>https://www.thefinoperator.com/p/most-important-columns-aws-cur</link><guid isPermaLink="false">https://www.thefinoperator.com/p/most-important-columns-aws-cur</guid><dc:creator><![CDATA[John Grubb]]></dc:creator><pubDate>Mon, 24 Jul 2023 23:51:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3bbc8f25-1aba-42b5-a2e3-1ac97eb10d24_2000x1335.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!o833!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a66dc79-fa9b-40f6-bb88-dc928bc1c7d8_2000x1335.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o833!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a66dc79-fa9b-40f6-bb88-dc928bc1c7d8_2000x1335.jpeg 424w, https://substackcdn.com/image/fetch/$s_!o833!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a66dc79-fa9b-40f6-bb88-dc928bc1c7d8_2000x1335.jpeg 848w, https://substackcdn.com/image/fetch/$s_!o833!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a66dc79-fa9b-40f6-bb88-dc928bc1c7d8_2000x1335.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!o833!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a66dc79-fa9b-40f6-bb88-dc928bc1c7d8_2000x1335.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!o833!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a66dc79-fa9b-40f6-bb88-dc928bc1c7d8_2000x1335.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a66dc79-fa9b-40f6-bb88-dc928bc1c7d8_2000x1335.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The most important columns in your AWS bill - the cost metrics.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The most important columns in your AWS bill - the cost metrics." title="The most important columns in your AWS bill - the cost metrics." srcset="https://substackcdn.com/image/fetch/$s_!o833!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a66dc79-fa9b-40f6-bb88-dc928bc1c7d8_2000x1335.jpeg 424w, https://substackcdn.com/image/fetch/$s_!o833!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a66dc79-fa9b-40f6-bb88-dc928bc1c7d8_2000x1335.jpeg 848w, https://substackcdn.com/image/fetch/$s_!o833!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a66dc79-fa9b-40f6-bb88-dc928bc1c7d8_2000x1335.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!o833!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a66dc79-fa9b-40f6-bb88-dc928bc1c7d8_2000x1335.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><p>One of my earliest questions was &#8220;what do things <em>actually cost</em>?&#8221; &nbsp;On demand usage was easily available in the <code>unblended_cost</code> column, but if I take all <code>DiscountedUsage</code> line items (ones that are covered by a reservation) and <code>SUM(unblended_cost)</code>, it gives me 0. &nbsp;What??</p><p>This is what I learned while figuring this out.</p><div><hr></div><h2>First, the code</h2><div class="captioned-image-container"><figure><pre><code>CASE
    WHEN line_item_type = 'DiscountedUsage' THEN reservation_effective_cost
    WHEN line_item_type = 'SavingsPlanCoveredUsage' THEN savings_plan_effective_cost
    ELSE unblended_cost
END AS finops_effective_cost,
</code></pre><figcaption class="image-caption">Don't sum your whole bill by this, or you'll get some looks.</figcaption></figure></div><p>This is it. &nbsp;It took me a while wandering in the woods to come up with this simple little case statement. &nbsp;Let's dig in a bit starting at the bottom.</p><h2>lineItem/UnblendedCost</h2><div class="captioned-image-container"><figure><p><a href="https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html?ref=thefinoperator.com#Lineitem-details-U">Line item details - AWS Cost and Usage Reports</a></p><figcaption class="image-caption"><a href="https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html?ref=thefinoperator.com#Lineitem-details-U">Columns under the lineItem header in AWS Cost and Usage Reports are static fields that appear in all Cost and Usage Reports. They cover all of the cost and usage information for your usage. This includes the following columns:</a></figcaption><figcaption class="image-caption"><a href="https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html?ref=thefinoperator.com#Lineitem-details-U">AWS Cost and Usage Reports</a></figcaption></figure></div><blockquote><p>The UnblendedCost is the UnblendedRate multiplied by the UsageAmount.</p></blockquote><p>Gee, thanks. &nbsp;Look, as simply as possible &#8211; this is the first column you're going to get to know in this bill when you're first introduced into this job. &nbsp;If you sum this column up for the entire month, you're going to get a number that matches what the Cost Explorer says you spent that month. &nbsp;</p><p>This number is the number that matters for basically <em>all</em> usage costs <em>except</em> those to which a reservation or savings plan apply. &nbsp;That is to say &#8211; storage, data transfer, anything <em>except</em> those where <code>line_item_type IN ("DiscountedUsage", "SavingsPlanCoveredUsage")</code>.</p><p><a href="https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html?ref=thefinoperator.com#Lineitem-details-L-LineItemType">lineItem/LineItemType</a></p><p>For those line items, they've set aside several special columns.</p><h2>reservation/EffectiveCost</h2><div class="captioned-image-container"><figure><p><a href="https://docs.aws.amazon.com/cur/latest/userguide/reservation-columns.html?ref=thefinoperator.com#reservation-details-E">Reservation details - AWS Cost and Usage Reports</a></p><figcaption class="image-caption"><a href="https://docs.aws.amazon.com/cur/latest/userguide/reservation-columns.html?ref=thefinoperator.com#reservation-details-E">Columns under the reservation header in AWS Cost and Usage Reports provide details about reserved resources.</a></figcaption><figcaption class="image-caption"><a href="https://docs.aws.amazon.com/cur/latest/userguide/reservation-columns.html?ref=thefinoperator.com#reservation-details-E">AWS Cost and Usage Reports</a></figcaption></figure></div><p>Things get hairy, fast. &nbsp;You're 30 seconds into my first nuts and bolts post, and we're going to talk about <em>amortization</em> already. &nbsp;Amortization is actually pretty simple, as are many previously inscrutable finance terms when you learn what they mean.</p><p>&#128161;</p><p>Amortization is an accounting technique used to periodically lower the book value of a loan or an <a href="https://www.investopedia.com/terms/i/intangibleasset.asp?ref=thefinoperator.com">intangible asset</a> over a set period of time. Concerning a loan, amortization focuses on spreading out loan payments over time. When applied to an asset, amortization is similar to <a href="https://www.investopedia.com/terms/d/depreciation.asp?ref=thefinoperator.com">depreciation</a>.<br><br><a href="https://www.investopedia.com/terms/a/amortization.asp?ref=thefinoperator.com">source - Investopedia</a></p><p>Amortization in our case means - we paid a lot, say $360,000 upfront for a 3 year reservation, but since we're using that over a 3 year period, our business is going to be using $10,000 of that reservation a month. &nbsp;This is amortization. &nbsp;It takes the otherwise huge swings in your company's expenses (in cash basis accounting) and smooths them out a little (into accrual basis accounting). &nbsp;<a href="https://en.wikipedia.org/wiki/Basis_of_accounting?ref=thefinoperator.com">More here</a>.</p><p>So &#8211; AWS helps you out a little with this. &nbsp;We'll get into the SavingsPlan and Reservation line items in a future post, but we're talking about <em>usage line items for which a reservation is applied</em> here.</p><p>There are two components to reservation covered usage:</p><ul><li><p>The amount that you paid upfront, aka <a href="https://docs.aws.amazon.com/cur/latest/userguide/regular-reserved-instances.html?ref=thefinoperator.com#upfront-fee">the upfront fee</a></p></li><li><p>The amount that you didn't pay upfront, aka <a href="https://docs.aws.amazon.com/cur/latest/userguide/regular-reserved-instances.html?ref=thefinoperator.com#recurring-monthly">the recurring fee</a></p></li></ul><p>The recurring fee is pretty simple &#8211; you get charged for it every day of the term of that reservation. &nbsp;It <em>recurs</em>. &nbsp;The upfront fee is more interesting. &nbsp;That's the big thing you bought at the beginning of the term. &nbsp;While you could theoretically account for that giant upfront fee in the month you paid it, your Finance team is almost certainly handling it by amortizing it over the term of the reservation.</p><p>AWS helps you by taking that upfront fee and amortizing it for you as well, daily. &nbsp;For a 3 year reservation with an upfront payment of $360k, they will count up the number of days in that 3 years &#8211; either 1095 or 1096 if there's a leap year &#8211; and divide 360,000 by that, roughly $330/day.</p><p>&#128181;</p><p>Important to note &#8211; your Finance department probably does not amortize these upfront payments daily, and so your amortized numbers for February will always be lower than January or March, whereas Finance's might be equal payments each month. This is why.</p><p>Now <em>here's</em> where it gets really fun. &nbsp;AWS takes that $330/day and makes it available in a couple of places. &nbsp;One place is in the <a href="https://docs.aws.amazon.com/cur/latest/userguide/reservation-columns.html?ref=thefinoperator.com#reservation-details-A-AmortizedUpfrontFeeForBillingPeriod">RIFee</a> line items in the bill. &nbsp;Each day you get a number of line items that pertain just to the Reservations, not the actual usage line items. &nbsp;These are ones where <code>line_item_type = "RIFee"</code>. (<a href="https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html?ref=thefinoperator.com#Lineitem-details-L-LineItemType">docs</a>). &nbsp;In those line items you have the amortized upfront payment for that day and that's pretty much it. &nbsp;</p><p>The &#8220;recurring fee for usage&#8221; shows up elsewhere - in the usage line items that benefit from the reservation. &nbsp;This is a little strange to me, but <a href="https://docs.aws.amazon.com/cur/latest/userguide/amortized-reservation.html?ref=thefinoperator.com#ri-effective-costs">the docs here</a> seem to confirm this: the amortized upfront stuff appears in the RIFee line item, the recurring costs do not. &nbsp;<a href="https://docs.aws.amazon.com/cur/latest/userguide/reservation-columns.html?ref=thefinoperator.com#reservation-details-R-RecurringFeeForUsage">recurringFeeForUsage docs</a> &#8211; it only shows up in DiscountedUsage, the usage line item.</p><p>This is a lot, I know, so let's review. &nbsp;You have:</p><ul><li><p><a href="https://docs.aws.amazon.com/cur/latest/userguide/reservation-columns.html?ref=thefinoperator.com#reservation-details-A-AmortizedUpfrontFeeForBillingPeriod">amortized upfront reservation costs</a> available in the <code>RIFee</code> line items. &nbsp;</p></li><li><p>Those <a href="https://docs.aws.amazon.com/cur/latest/userguide/reservation-columns.html?ref=thefinoperator.com#reservation-details-A-AmortizedUpfrontCostForUsage">same costs allocated down</a> into the usage line items that benefit from them. &nbsp;And finally,</p></li><li><p>The <a href="https://docs.aws.amazon.com/cur/latest/userguide/reservation-columns.html?ref=thefinoperator.com#reservation-details-R-RecurringFeeForUsage">recurring cost for that reservation</a> (if not fully paid upfront) that shows up in the usage line items as well (DiscountedUsage, that is).</p></li></ul><p>Now, you can do it yourself but AWS takes those two columns in the DiscountedUsage line items and adds them together to arrive at what we call the &#8220;effective cost&#8221;. &nbsp;Effective cost is the <code>amortized upfront cost</code> + <code>the recurring cost</code>.</p><ul><li><p><a href="https://docs.aws.amazon.com/cur/latest/userguide/reservation-columns.html?ref=thefinoperator.com#reservation-details-A-AmortizedUpfrontCostForUsage">AmortizedUpfrontCostForUsage</a></p></li><li><p>+ <a href="https://docs.aws.amazon.com/cur/latest/userguide/reservation-columns.html?ref=thefinoperator.com#reservation-details-R">recurringFeeForUsage</a>.</p></li><li><p>= <a href="https://docs.aws.amazon.com/cur/latest/userguide/reservation-columns.html?ref=thefinoperator.com#reservation-details-E">effectiveCost</a> &nbsp;<strong>This</strong> is the true cost of that resource (according to AWS' daily amortization schedule).</p></li></ul><pre><code>WHEN line_item_type = 'DiscountedUsage' THEN reservation_effective_cost
</code></pre><h2>savingsPlan/savingsPlanEffectiveCost</h2><div class="captioned-image-container"><figure><p><a href="https://docs.aws.amazon.com/cur/latest/userguide/savingsplans-columns.html?ref=thefinoperator.com#savingsplans-details-S">Savings Plans details - AWS Cost and Usage Reports</a></p><figcaption class="image-caption"><a href="https://docs.aws.amazon.com/cur/latest/userguide/savingsplans-columns.html?ref=thefinoperator.com#savingsplans-details-S">The SavingsPlan columns in AWS Cost and Usage Reports provide details about the ComputeSavingsPlans. SavingsPlan columns are visible if you have purchased Savings Plans. For more information about Savings Plans, see What are Savings Plans? in the</a></figcaption><figcaption class="image-caption"><a href="https://docs.aws.amazon.com/cur/latest/userguide/savingsplans-columns.html?ref=thefinoperator.com#savingsplans-details-S">AWS Cost and Usage Reports</a></figcaption></figure></div><p>The same basic logic applies to Savings Plans, but we can get into the nuances here in the future.</p><pre><code>WHEN line_item_type = 'SavingsPlanCoveredUsage' THEN savings_plan_effective_cost
</code></pre><h2>In closing</h2><p>This took me a while to figure out, so hopefully this can help make it a little bit clearer for you as you're learning your way around the CUR. &nbsp;This &#8220;effective cost&#8221; column is one that we use here to present the &#8220;true&#8221; cost of resources that we use for a given billing period.</p>]]></content:encoded></item></channel></rss>