Back to Blog
FinOpsreduce_costsAWS

FinOps is a practice, not a dashboard

Cost dashboards are the easy part — the real discipline is unit economics, tag governance, showback, and engineers who can see what their code costs.

JohannaJanuary 17, 20266 min read

Every company that gets serious about cloud cost buys or builds a dashboard, and most of them stop there. The dashboard shows spend going up and to the right, someone screenshots it in a monthly review, and nothing changes, because a dashboard is a thermometer and what you needed was a metabolism. FinOps is the practice around the numbers, not the numbers themselves. Here is what that practice is actually made of, and why the part everyone starts with is the part that matters least.

Start with the denominator

Aggregate cloud spend is a nearly useless figure on its own. "$180,000 last month" tells you nothing about whether that is good or bad, because it has no denominator. The discipline that separates FinOps from bill-watching is unit economics: cost per customer, cost per request, cost per feature, cost per tenant. A bill that grows 40% is alarming until you learn revenue grew 60% and cost-per-customer fell — at which point rising spend is the sound of a healthy business.

Unit economics is also where engineering decisions get their footing. "This feature costs $12,000 a month" is an abstraction nobody can act on. "This feature costs $0.004 per invocation and we invoke it on every page load" is a design review. Once you can express cost per unit of something the business cares about, you can reason about margin, about which customers are unprofitable, about whether a caching layer pays for itself. Without a denominator, every cost conversation is just vibes about a big number.

Untagged resources are invisible spend

You cannot compute cost-per-anything if you cannot attribute cost to anything, and attribution runs on cost allocation tags. Two facts about them trip up almost everyone. First, tags are not active for billing by default — you have to activate each tag key in the Billing console before it appears in Cost Explorer and the Cost and Usage Report. Second, activation is not retroactive: costs are attributed by tag only from activation forward, so the sooner you turn them on, the less blind history you accumulate.

The failure mode is untagged resources, and it is not a rounding error — on an ungoverned account, 20 to 40% of spend routinely lands in an "untagged" bucket that belongs to no team and answers to no one. That spend is invisible in the sense that matters: nobody feels responsible for it, so nobody optimizes it. Tag governance is the fix — enforce a required tag set (owner, team, environment, cost-center) through Organizations tag policies, service control policies, or, best of all, in the IaC so a resource cannot be created untagged in the first place. Governance beats after-the-fact tagging sweeps every time, because the sweeps never finish.

Showback before chargeback

Once cost is attributed, you decide what to do with the attribution. Showback means reporting each team its costs — pure visibility, no money changes hands. Chargeback means actually debiting the team's budget for its cloud spend, transferring real financial accountability. Chargeback is more powerful and far more political: it needs finance buy-in, a defensible allocation model for shared costs, and a tolerance for the arguments that follow the first surprising invoice.

My advice is to earn chargeback by starting with showback. Give teams a clear, trustworthy monthly view of what they spend and the trend, and a lot of optimization happens voluntarily — engineers do not like being on the expensive list. Reach for chargeback only when showback has stopped changing behavior and you need the harder incentive. Rolling out chargeback on top of tags nobody trusts just produces a quarter of disputes about whose EC2 instance that really was.

Anomaly detection catches what dashboards miss

A dashboard tells you about the spike after you go look at it. AWS Cost Anomaly Detection tells you about it while it is happening. It is a free, ML-based service that learns your normal spend patterns per service, account, cost-allocation tag, or cost category, and alerts through SNS or email when actual spend deviates. It is the safety net for exactly the failure modes that don't page anyone: a debug log left on in a hot path quietly ingesting terabytes, a forgotten GPU instance, a CloudTrail data-event configuration that just tripled, a runaway retry loop hammering a paid API.

Configure monitors along the same dimensions you allocate cost, so an alert names a team and a service instead of just "your bill went up." An anomaly you learn about on day two costs a fraction of the same anomaly you discover on the month-end invoice.

The culture piece is the whole point

Here is the part no tool sells you. The single most effective cost control is engineers who can see the cost of their own code, because visibility changes behavior in a way no central FinOps team can. When a developer can look at a feature and see cost-per-request next to latency and error rate — in the same dashboard, in the same review — cost becomes a design constraint they optimize naturally, the way they already optimize p99. When cost lives only in a finance spreadsheet the engineers never open, it stays someone else's problem until it becomes everyone's emergency.

This is why FinOps is cross-functional by definition: engineering, finance, and product in the same loop. Finance brings the unit models and the forecasting; product decides which units are worth their cost; engineering builds with the price visible. The FinOps team's job is to run that loop — inform, optimize, operate — not to be the sole owner of thrift.

Where the real money is

Now the opinionated part. "Turn off idle stuff" — shut down dev environments overnight, delete unattached EBS volumes and stale snapshots, release idle Elastic IPs and NAT gateways, kill zombie load balancers — is genuine hygiene, and you should do it. But it is where you start, not where the money is. It is the low, visible fruit that makes for a satisfying first-week win and rarely moves the annual number more than a few percent.

The real money is architectural and financial, and it is boring in comparison:

  • Committed-use discounts. Compute Savings Plans and Reserved Instances routinely take 20 to 40% off steady-state compute for near-zero engineering effort. Coverage and utilization of those commitments is often the single largest lever on the whole bill, and it is a spreadsheet exercise, not a code change.
  • Instance and architecture choices. Moving to Graviton, right-sizing families to the actual workload, and choosing the correct storage tier compound quietly across a fleet.
  • Data transfer and egress design. Cross-AZ and internet egress is a line item that architecture, not thrift, controls — and one most idle-resource cleanups never touch.
  • Unit-cost-driven engineering. The changes that come from engineers seeing cost-per-request and redesigning the expensive path.

A dashboard will show you all of this and act on none of it. The practice is the acting: the denominators, the tag governance, the showback that becomes behavior, the anomaly alerts that reach the right team, and the culture where the person who wrote the expensive line is the person who sees the price. Buy the dashboard if you want. Then do the actual work it can only measure.