Skip to main content
FinOps

Cloud spend forecasting for the quarterly close: a mid-market planning framework

Mohit Sharma|June 5, 2026|16 min read
Cloud spend forecasting for the quarterly close: a mid-market planning framework

Cloud spend forecasting for mid-market companies fails the same way every quarter: Finance asks Engineering "what will next quarter's AWS bill be," Engineering pulls a 90-day average, multiplies by three, adds a vague percentage for "growth," and sends a number. Two months later the actual is 18% off, both sides blame the other, and the next forecasting cycle starts with the same broken model. The problem is not bad math. It is that nobody has agreed on what a forecast even contains. This piece walks through the framework we deploy on FinOps engagements at 50-500 person companies — three separate forecasts that combine into one number, the inputs each one needs, the variance band you should actually defend to FP&A, and the categories of miss that will still bite you regardless.

Why the single-number forecast keeps breaking

The typical mid-market forecasting conversation has Finance treating the cloud bill like a SaaS subscription — a recurring line item with a predictable growth rate — and Engineering treating it like a weather forecast they would rather not commit to. Both are wrong. Cloud spend is not a single thing; it is at minimum three different things bundled into one invoice, and each one has a different forecasting method and a different error profile.

When you forecast the bundle as a single number, two things happen. First, you anchor on whichever component dominates your bill today, which is almost always steady-state run-rate, and you systematically underestimate the impact of project launches and decommissions. Second, when the forecast misses, you cannot diagnose which component was wrong. You just have a delta and an argument. We have walked into engagements where the FinOps lead and the FP&A analyst had spent six months disagreeing about a 12% forecast variance and neither of them could decompose it, because the underlying model was one number.

The fix is to separate the forecast into components that have different drivers, different owners, and different acceptable error bands. Then you reassemble them at the top. This is not a new idea — it is how supply chain forecasting has worked for decades — but cloud forecasting in mid-market environments still tends to be a single Excel cell with a fudge factor.

The three-forecast framework

We forecast cloud spend as three separate models that add up. Each has a distinct method, owner, and tolerance.

1. Baseline forecast — steady-state run-rate. What the bill would be if no project shipped, nothing was decommissioned, no incident occurred, and traffic grew at the trailing rate. This is the largest component for almost every mid-market company we see — typically 70-85% of the total. It is the most accurate to forecast because the drivers are stable.

2. Project-driven delta forecast — planned launches and decommissions. The net change from roadmap items: a new service going to production, a legacy workload being shut down, a region expansion, a database migration. Each item has a cost estimate and a go-live date. This component is small in dollar terms (10-20% of the total) but it is where most of the forecast variance lives, because timelines slip and cost estimates are optimistic.

3. Capacity and anomaly buffer — the part you will not predict precisely. Incident-driven egress, end-of-quarter ML training crunches, customer-driven traffic surges, support-engineer-spun-up debugging clusters that nobody cleaned up. This is not a fudge factor; it is a budget line with its own history and its own size. We typically size it at 5-10% of baseline, and we track its consumption explicitly so it does not become a slush fund. (The sub-bucket ranges that follow can sum higher than 10% in worst-case combinations — the 5-10% recommendation reflects the realized blended total we see in practice, not the arithmetic ceiling of stacking every sub-bucket at its max.)

When Finance asks "what will Q+1 be," the answer is the sum of the three — but you present them separately, with a variance band on each, so the conversation can be specific. That is the entire framework. The rest of this piece is about how to build each one.

Building the baseline forecast

The baseline is the steady-state run-rate, and it is the easiest of the three to defend if you do the inputs honestly.

Input 1: trailing 90-day run-rate, normalized. Pull the last 90 days of spend from Cost Explorer (AWS), Cost Management (Azure), or Billing Reports (GCP). For programmatic baseline normalization at scale, the Cost and Usage Report (CUR, or CUR 2.0 with its expanded schema) is the authoritative source — the console views are derived from it, and any serious mid-market FinOps practice eventually queries CUR directly to strip out one-time events: incident egress, a botched data export that copied a petabyte to the wrong region, a one-off ML training run. What remains is the base. We use 90 days rather than 30 because mid-month billing artifacts and partial-month commit applications make 30-day windows noisy. We do not use 12 months because cloud pricing, your architecture, and your traffic mix have all moved.

One seasonality caveat on the 90-day window: if your business has pronounced seasonal cycles — retail with Q4 holiday spikes, ed-tech with academic-calendar troughs and surges, B2C consumer apps with summer or holiday traffic patterns — a rolling 90 days will mis-anchor the baseline depending on where in the cycle you pull it. For seasonal businesses, normalize the baseline against the same 90-day window from the prior year and document the seasonality assumption explicitly. The framework still works; the window just stops being naive trailing.

Input 2: commit coverage and remaining term. What percentage of your steady-state compute is covered by Reserved Instances, Savings Plans, or committed-use discounts, and when does each commitment expire? A commit expiring in Q+1 changes your baseline materially if you do not plan to renew. A commit you bought 18 months ago at the previous generation's pricing may already be inefficient. Both Cloudability and Vantage will give you this view; AWS Cost Explorer requires you to assemble it from the Reservations and Savings Plans dashboards separately.

Input 3: organic growth assumption. What is the underlying growth rate of your traffic, data, and user base, holding architecture constant? This is the number most teams get wrong, because they conflate growth with project impact. If your platform team shipped a caching layer that cut 15% of compute, that is a project delta and belongs in component two, not a negative growth adjustment to the baseline.

For 50-200 person companies, organic growth is usually 2-5% per quarter on the cloud bill, even when ARR is growing 20% per quarter. The product gets more efficient as it matures and as engineering invests in performance. For 200-500 person companies with more complex architectures and more independent teams, organic growth often sits at 4-8% per quarter, because more teams shipping more workloads adds compounding drift.

Output: a quarterly baseline number with a stated assumption. Not "our baseline is $1.2M." But "our baseline is $1.2M assuming 3.5% organic growth, full renewal of the $400k Savings Plan expiring August 14, and no architecture changes." That sentence is the document you defend.

Building the project-driven delta forecast

The delta forecast is where most of the variance lives, and it is the component most mid-market FinOps practices skip entirely. They look at the bill, see project work as "noise," and bake it into a generic growth percentage. That is how a Q+1 forecast misses by 20%.

The method is unglamorous: a list of every project that will affect cloud spend in the forecast quarter, an estimated cost impact for each, and a probability-of-shipping weight.

For each project, we capture: the workload owner, a description of the cost driver (new EKS cluster, new RDS instance, new S3 bucket family, new third-party data source), an estimate range (low/expected/high) in dollars per month at steady state, the planned go-live date, and a confidence level on that date. Engineering managers fill in the estimates. The FinOps lead applies the probability weight based on the team's track record of shipping on time. If a team has shipped two of their last six features on the originally committed date, their probability-of-shipping-in-quarter starts at 35%, not 100%.

This is the part Finance will push back on. They want a single number. The answer is that the expected-value sum across all projects, weighted by probability and time-in-quarter, is a single number — it is just a more honest one than the sum of "we will ship everything."

A worked example. A team has eight projects with cloud impact next quarter:

  • Three are decommissions of legacy services, net savings of $42k/month at steady state, shipping on different dates within the quarter
  • Two are new production services, net cost $28k/month combined, shipping mid-quarter
  • One is a database migration that is cost-neutral but will run dual-write for six weeks, net cost $11k during the quarter only
  • Two are infrastructure efficiency projects (rightsizing, storage tier migration) with estimated savings of $19k/month

Weighted for ship probability and prorated for the portion of the quarter they are live, the net delta might come out to negative $35k for the quarter. That is your project component. It is small relative to a $3.6M quarterly baseline, but it is the difference between hitting and missing the number.

We have seen the cost of skipping this exercise. A 220-person SaaS company we worked with last year had been forecasting cloud spend as baseline-plus-15% for four quarters running. They were missing high by 8-12% every quarter, and Finance had started treating Engineering's number as untrustworthy. When we broke the forecast into the three components and built a real project list, the variance dropped to within 4% the first quarter and 2% the next. These specific deltas reflect one engagement; the FinOps Foundation's annual State of FinOps survey consistently ranks forecast accuracy among the top unmet priorities for FinOps practitioners, which matches what we see across the portfolio: the number did not get smarter; the model did.

Sizing the capacity and anomaly buffer

The buffer is the part everyone wants to ignore and nobody can actually skip. Incident-driven egress, end-of-quarter ML training surges, M&A absorption, a customer who unexpectedly tripled their usage — all of these happen, and treating them as "shouldn't have happened" does not remove them from the bill.

The right way to size the buffer is to look at your trailing 12 months and bucket every cost event that was not in the baseline and not a planned project. We typically find:

  • Incident-related costs (egress during a runaway data export, accidental cross-region replication, debugging clusters left running): 1-3% of annual spend
  • ML training surges around quarter close, sales kickoff, or annual model refresh: 2-4% if you run a meaningful ML practice, 0% if you do not
  • Customer or product traffic surprises (a marketing campaign that worked too well, a partner integration that scaled differently): 1-2%
  • Engineering-side absorption costs (a team forgot to tag, a new account joined without budget): 1-2%

In a worst-case quarter where every sub-bucket hits its high end, the arithmetic ceiling is 5-11%. The realized blended total we see across mid-market engagements is 5-10% of baseline, because the categories rarely max out simultaneously. That is the band we recommend. We track buffer consumption monthly so it does not silently become regular spend. If the buffer is being eaten by the same category every quarter, that category needs to be reclassified — it is no longer an anomaly; it is a workload, and it belongs in the baseline.

The variance band you should actually defend

Plus-or-minus 2% is a Fortune 500 number with a dedicated FP&A cloud analyst, a multi-million-dollar FinOps tooling stack, and a chargeback model that has been running for five years. Mid-market does not have those preconditions. Defending a 2% accuracy commitment will make you wrong every quarter and will burn the credibility of the forecast.

The band we recommend for a well-run 50-500 person company FinOps practice is plus-or-minus 8-10% at the monthly level, plus-or-minus 5-7% at the quarterly level. These ranges are what we observe across Optivulnix FinOps engagements at mid-market companies; they are operator judgment, not a published benchmark. For an external anchor, the FinOps Foundation's State of FinOps annual report tracks forecast accuracy as a maturity indicator across the practitioner community, and the priorities reported there are consistent with the gap our bands describe — forecast accuracy is broadly an unsolved problem at mid-market scale, not a solved one with a tighter answer.

The quarterly band is tighter than monthly because monthly variance partially averages out. If you are forecasting better than that, you are either over-investing in forecast precision (the marginal cost of dropping from 5% to 2% is significant and rarely justifies the work) or you are getting lucky and the next quarter will surprise you.

Set the band explicitly with Finance up front. "Our quarterly forecast will land within plus or minus 6%. Beyond that, we will run a postmortem and revise the model. Within that, we will not relitigate the number." That contract is more valuable than any specific forecast.

How forecast cadence differs at 50-200 vs 200-500 person companies

The framework is the same; the cadence is not.

50-200 person companies typically have one FinOps lead (or a platform lead with a FinOps hat), one or two cloud accounts that matter, and a handful of teams whose workloads dominate the bill. Quarterly forecasting is the right primary cadence. Monthly check-ins against actuals catch drift early. Annual planning is honest at the topline only — forecasting Q4 in March is fantasy at this stage.

200-500 person companies have more teams, more accounts, more workloads, and more project velocity. Quarterly forecasting is still the primary, but the inputs come from a broader source set: each engineering org submits their project list, the FinOps lead aggregates, and the forecast cycle takes two weeks of calendar time. Monthly variance reviews become formal — there is enough money flowing that a 1% miss is six figures, and you need an explicit owner for each variance category. Some companies at this scale start running rolling 12-month forecasts updated quarterly; the framework default we use is four quarters forward (the rolling view projects the next four full quarters after the in-flight one), refreshed at each quarter-end (an alternative convention some teams adopt is carrying five quarters in the view so the in-flight quarter and four forward sit beside the latest actuals — either works, but pick one and stick to it).

Both stages benefit from the same three-component model. The 200-500 person company just has more cells in the project-delta table and more discipline in the buffer tracking. The principle that you defend the components, not the sum, holds at both stages.

What tools actually do for forecasting

We work with all the major cloud cost platforms on engagements. Honest read on where each fits for forecasting specifically:

AWS Cost Explorer is free, gives you a usable 90-day baseline, and has a built-in forecast feature. AWS describes the native forecast as a prediction based on historical spend, expressed with an 80% prediction interval that widens with volatility in your trailing usage; the current AWS console layers Amazon Q Developer AI-powered explanations on top of the forecast to attribute drivers in natural language (see the AWS Cost Explorer forecast documentation). The native forecast is fine for baseline; it does not understand projects or anomalies. For mid-market AWS-only shops it is the right starting point. Do not pay for tooling you do not need yet.

Cloudability (Apptio) has the most mature multi-cloud baseline forecasting we work with, and the commit recommendation engine is strong. The forecasting view will not build your project-delta component for you — no tool will — but the baseline and commit-coverage inputs are well-modeled. In our engagements, the pricing has tended to make sense for 200-500 person companies running three cloud providers and to feel heavy for 50-person AWS-only shops; that is a practitioner read, not a list price.

CloudHealth (VMware/Broadcom) sits in similar territory to Cloudability. The forecasting features are competitive; the user experience varies by product area. In direct conversations on Optivulnix engagements since the Broadcom acquisition closed, mid-market customers have reported lock-in concerns and uncertainty around renewal terms; we have not seen a published benchmark on this, so treat it as engagement observation rather than industry consensus, and ask explicitly about renewal terms before signing.

Vantage is the platform we see most often at mid-market customers who outgrew Cost Explorer but, in our engagements, found Cloudability harder to justify on cost. The forecasting is solid for baseline, the multi-cloud support is good, and the unit-cost views (cost per customer, cost per service) are increasingly competitive. We use it on engagements where the customer wants self-serve visibility without a six-figure tooling commitment.

The shared honest point: no tool builds the project-delta component for you, because the inputs (probability-weighted ship dates, owner-supplied cost estimates) only exist in your engineering org's head. The tool helps with components one and three. Component two is human work, and the most valuable thing the FinOps lead does each quarter.

Where forecasts always miss

Even with the three-component model and disciplined inputs, certain categories of miss recur. Naming them up front is more useful than pretending they will not happen.

Incident-driven egress. A misconfigured cross-region replication or a runaway data export can add five figures to a single month's bill. Anomaly detection helps but does not prevent the cost; it only shortens the duration.

End-of-quarter ML training runs. Data science teams batch experiments near quarter close to ship for the next cycle. The training spend can spike 30-50% in a single week and then return to baseline. If you have a meaningful ML practice, model this explicitly in the buffer.

M&A absorption. An acquired company's cloud accounts get migrated into your billing org mid-quarter. The forecast made before the deal closed will be wrong, and that is acceptable — but flag the variance category so it does not look like a baseline miss.

Customer traffic surprises. A B2B customer expanding their seat count, a B2C marketing campaign that worked, a partner integration that scaled differently than expected. These are real and they are unpredictable. The buffer absorbs them; the postmortem decides whether to re-baseline.

Vendor pricing changes. AWS Snow product retirements, GPU instance availability shifts, regional pricing differentials on new instance families. These are rare but material when they happen. Build a quarterly habit of scanning provider pricing announcements relevant to your top five service categories.

The point of naming these is not to make the forecast bulletproof — it is not — but to give you a vocabulary to use with Finance when the variance shows up. "We missed by 7% in Q+1. Three points were ML training timing, two points were incident egress on May 14, two points were the customer migration that closed mid-quarter." That is a conversation. "We missed by 7% because cloud is hard" is not.

The conversation with Finance

Forecasting is half model and half relationship. The model gets the variance band defensible. The relationship gets Finance to use the forecast the way it should be used — as a planning input with stated uncertainty, not as a commitment that will be relitigated when it misses.

The conversation we coach FinOps leads to have, at the start of every quarterly cycle:

  1. We will give you a forecast with three components: baseline, project-driven delta, and anomaly buffer. Each has its own variance.
  2. The total will land within plus-or-minus 6% at the quarterly level. We commit to that band.
  3. If we miss the band, we will run a postmortem and revise the model. We will not pretend it was within tolerance.
  4. We will not revise the forecast mid-quarter unless there is a discrete event (a major customer migration, an M&A close, an incident with >2% spend impact) that justifies it. Drift is not a revision trigger.
  5. The forecast assumes the projects on this list ship on these dates with these probabilities. If the project list changes, the forecast changes. That is a separate conversation, not a forecast miss.

That contract makes the forecast a useful planning artifact. Without it, you are running a quarterly blame ritual that nobody learns from.

FAQ

How accurate should a mid-market cloud forecast be? Plus-or-minus 5-7% at the quarterly level and plus-or-minus 8-10% at the monthly level, in our experience across Optivulnix engagements at 50-500 person companies. Better than that requires investment in tooling and headcount that rarely pays back at this scale. The FinOps Foundation State of FinOps data confirms forecast accuracy is broadly an unmet need at this segment, not a solved problem with a tighter answer.

Should we use the cloud provider's native forecast or a third-party tool? For 50-200 person AWS-only shops, AWS Cost Explorer's forecast is enough for the baseline component — and per AWS documentation, it comes with an 80% prediction interval that makes the uncertainty explicit. Add Vantage or Cloudability when you have multi-cloud, when the FinOps lead is spending more than two days a quarter assembling data manually, or when you need unit-cost views for the business.

How do we handle a forecast that misses by more than the variance band? Run a postmortem that decomposes the variance into the three components (baseline drift, project-delta error, anomaly category breakdown). Identify which model assumption was wrong. Update the inputs and re-establish the band with Finance. Do not silently tighten or widen the band; make the conversation explicit.

Who owns the cloud forecast — Engineering or Finance? Engineering owns the inputs (baseline run-rate, project list, anomaly history). Finance owns the consumer view (the number that lands in the P&L forecast). The FinOps lead bridges them. If your organization does not have a FinOps lead role, the forecast will always be owned ambiguously and will always be wrong.

How does this framework change for AI/ML-heavy workloads? The baseline component grows more volatile because training is bursty. We separate ML training from ML inference in the baseline — inference behaves like steady-state production, training behaves more like a series of project deltas. The anomaly buffer for ML-heavy companies often runs at the higher end of the 5-10% band.

Where this fits in your FinOps maturity

If your organization does not yet have monthly variance tracking, defensible commit coverage data, or named project owners, the framework will not run cleanly. Forecasting is a stage-three discipline in a maturity model; you need stages one and two operational first. We have written separately on the FinOps maturity model for mid-market and on the annual planning view that wraps quarterly forecasts into a year-level commitment. The framework here is the quarterly-close piece of a larger discipline.

If forecasting is breaking and you are not sure whether the fix is the model or the underlying FinOps practice, that is the kind of question we work through on engagements. Our FinOps practice and the broader FinOps framework for 50-500 person companies lay out the sequence we use. The forecast is not the first thing to fix; it is the thing that becomes possible after the inputs are reliable.

Mohit Sharma

Mohit Sharma

Principal Consultant

Specializes in Cloud Architecture, Cybersecurity, and Enterprise AI Automation. Designs secure, scalable, and high-performance cloud ecosystems aligned with business strategy and long-term growth.

Stay Updated

Get the latest cloud optimization insights delivered to your inbox.

Ready to Transform Your Cloud Infrastructure?

Let our team show you where your cloud spend is going -- and how to fix it. AI-powered optimization across AWS, Azure, GCP, and OCI.

Schedule Your Free Consultation