Been there. Tried to get budget for a shiny FinOps platform last year. Got laughed out of the room. Then I wasted three months trying to manually track everything in spreadsheets. That's a dead end.
Here's what actually worked for us, with two people and zero tool budget. It's not pretty, but it gets you from zero to "we can see the problem."
**First, you don't need new tools. You need the data you already pay for.**
* **AWS:** Cost & Usage Reports (CUR) + Cost Explorer. CUR is your single source of truth. Dump it into a free tier of a cloud database (like AWS Athena with S3) if you have to. Cost Explorer's API is clunky but scriptable.
* **Azure:** Cost Management exports + Power BI template. The built-in reports are terrible, but the raw data export is key.
* **GCP:** Billing Export to BigQuery. This is the easiest one of the three. Just enable it and start writing SQL.
**Your job for the first 90 days is not to save money. It's to assign blame.** (They call it "accountability" in polite circles.)
1. **Tag Everything. Now.** No tagging, no FinOps. Full stop. Create a mandatory tag policy for `Owner`, `CostCenter`, and `Environment` (prod/dev/test). Use service control policies or IAM to enforce it on new resources. Clean up the old untagged mess later.
2. **Build One Dashboard.** Use the native billing tools or a free Grafana cloud instance. Plot spend daily, grouped by your main tag. The goal is to send a simple, automated screenshot every Monday morning showing each team's spend. Visibility creates pressure.
3. **Hunt the "Easy Wins."** These are your proof-of-concept savings to justify more resources later.
* Orphaned storage (unattached disks, old snapshots)
* Non-production instances running on nights/weekends (schedule them off)
* Over-provisioned resources (rightsizing). Start with the top 10 costliest instances.
**Process over Platforms.** With two people, your leverage is process.
* **Implement a cloud change review.** Any new service over $X/month needs a quick chat. It's not about blocking, it's about awareness.
* **Create a "cost anomaly" alert.** Use native billing alerts for when a team's daily spend spikes 20%+. Makes you reactive, not just passive.
It's manual. It's grunt work. But after three months of this, you'll have the hard data to either demand a proper tool budget or, more likely, you'll have already paid for it with the savings from the low-hanging fruit.
- No fluff.
Absolutely. Tagging is the linchpin, but you need a way to enforce it or you'll be chasing teams forever. In AWS, you can use SCPs to *prevent* the creation of untagged resources, not just report on them. A simple policy that denies RunInstances or CreateVolume without your required tags will get engineering's attention faster than any report.
The "assign blame" part is harsh but real. We called it "cost attribution" and made the reports public by team. The resulting peer pressure did more for optimization than any central policy.
Spot on about SCPs for enforcement. They're a game changer for making tagging mandatory, not just a nice-to-have. I'd add that you need to pair that blocking policy with a clear, simple guide for engineers on how to *fix* it when their deployment fails - maybe a one-line Terraform example or a link to a runbook. Otherwise, you're just creating support tickets and friction.
I love the "cost attribution" angle, though making it public can backfire if the data isn't rock solid. We found a middle ground by first sharing reports directly with team leads for a few cycles, giving them a chance to clean up any tagging mess or contest charges before it went wider. That built trust in the process first.
Stay connected
Your point about the first 90 days being about accountability is the critical shift in mindset. Too many teams get paralyzed trying to build a perfect dashboard before they can even answer "who owns this spend." You can get actionable data faster by forgetting dashboards altogether at the start.
Focus on generating a single, static weekly report from the CUR, grouped by the `Owner` tag. The format is irrelevant. PDF, CSV, Slack post. The goal is to establish a predictable rhythm where cost data flows to responsible parties. This cadence, more than the tooling, creates the operational discipline.
A caveat on Athena as a free tier: while the queries themselves are inexpensive, you must be meticulous about partitioning and compressing the CUR data in S3. Without that, scanning multi-gigabyte JSON files every week will incur non-trivial S3 data transfer charges, which defeats the purpose. Use Parquet or ORC from the outset.
—BJ