Cloud Cost Visibility After Leaving a Managed Platform: The 8 Tools a 25-Person Team Should Actually Consider

A sourced, category-accurate comparison of cloud cost monitoring tools (Vantage, CloudZero, Finout, EON, OpenCost/Kubecost, native cloud tooling, Zesty, ProsperOps) for a 25-person engineering team moving off Render, Heroku, or Fly.io onto AWS, GCP, Azure, Scaleway, or its own Kubernetes cluster - plus the monthly-spend thresholds that tell you which one to buy and when native tooling is still enough.

Romaric Philogene
CEO & Co-founder
AUG 31, 2026 · 16 MIN
Cloud Cost Visibility After Leaving a Managed Platform: The 8 Tools a 25-Person Team Should Actually Consider

Key Points:

  • For a 25-person engineering team, the working stack is three things, not one: native cloud cost tooling plus anomaly detection (free, turn on in week 1), one hosted visibility tool (Vantage if you want a free tier and setup in an afternoon, CloudZero if you need cost-per-customer or cost-per-feature), and a five-key tagging schema enforced in Terraform so the data is attributable at all.
  • Pick by monthly spend, not by feature list: under roughly $10k/month, native cloud tooling plus Vantage's free tier is enough; $10k to $50k/month justifies one paid hosted tool (Vantage or CloudZero); above roughly $50k/month, or with spend split across several clouds and SaaS vendors, Finout or CloudZero earn their price; anyone running Kubernetes adds OpenCost regardless of spend.
  • No cloud cost tool is real-time. AWS Cost Explorer refreshes at least once every 24 hours and the Cost and Usage Report publishes on a delay with hourly granularity at best, so every third-party dashboard inherits that latency. Vendor "real-time" means hourly line items plus intraday estimates; the only genuinely live cost signal is Kubernetes allocation computed from live cluster metrics.
  • Cost allocation tags are not retroactive. AWS does not apply tags to resources created before the tag existed, so any resource you spin up untagged during the migration is permanently unattributable in your billing data. The tagging schema has to ship before the first workload moves, not after the first surprise invoice.
  • Monitoring reports waste; it does not remove it. The savings that land for a small team are structural: auto-stop non-production environments outside working hours, right-size the defaults developers get, delete orphaned volumes, snapshots and idle load balancers, and only then buy Savings Plans or committed-use discounts. An internal developer platform like Qovery sits beside a cost tool and prevents that waste at provisioning time.

If you are a 25-person team moving off Render onto AWS, the honest answer is that no tool gives you real-time visibility, and buying one tool is the wrong mental model. The working stack is three parts: native cloud cost tooling plus anomaly detection (free, on in week one), one hosted visibility layer (Vantage's free tier is the lowest-friction start, CloudZero if you need cost per customer or per feature), and a five-key tagging schema enforced in Terraform before you move anything. Add OpenCost the moment you run Kubernetes. Pick the paid tool by monthly spend, not by feature list. And know upfront that the dashboard reports the waste; it does not remove it.

Qovery · Agentic Infrastructure Platform
Kubernetes, operated through one governed API
Learn more

I have watched a lot of teams make this move, and the first invoice after leaving a managed platform is almost always a shock for the same reason every time: the bill stops being a page you can read and becomes a data export you have to interpret. That is not a tooling problem you fix by buying a nicer dashboard. Flexera's 2025 State of the Cloud Report found 84% of organizations say managing cloud spend is their top cloud challenge, and that respondents' cloud budgets are running 17% over. The teams that get this right treat cost as three separate problems - visibility, attribution, and control - and solve them in that order. Let me walk through what actually changes, what "real-time" really means, which tools are worth your afternoon, and where a platform beats another dashboard.

What actually changes about your cloud bill when you leave a managed platform for AWS, GCP, or Azure?

Leaving Render, Heroku, or Fly.io for a hyperscaler replaces a dozen predictable, human-readable line items with thousands of metered SKUs, and the first surprise is almost never compute. It is the plumbing: NAT gateway data processing, cross-AZ traffic, idle load balancers, unattached volumes and forgotten snapshots, over-provisioned managed databases, the Kubernetes control-plane fee, and non-production environments nobody switches off at night.

On a managed platform, your bill is per-service and per-instance. A Heroku Standard-2X dyno is $50/month and a Heroku Postgres Standard-0 is another $50, so a small production service reconciles to about $100/month on one readable page in five minutes. On a hyperscaler, the same shape of workload is cheaper on paper and more expensive in practice, because the paper price is only the compute. Here is the like-for-like on the base resources, and then the line items a naive comparison misses.

PlatformWeb/compute tierManaged PostgresBase total/moExtra line items a hyperscaler adds
RenderStandard web, $25Pro-4gb, ~$55~$80 (+$25 workspace)Bundled; egress and add-ons metered separately
HerokuStandard-2X dyno, $50Postgres Standard-0, $50~$100Bundled; add-ons metered separately
Fly.ioperformance-1x 2GB, ~$32Prod Postgres cluster, ~$82+~$115+Bandwidth over free allowance
AWS (us-east-1)t3.medium, ~$30db.t3.medium Single-AZ, ~$53~$83 compute onlyNAT gateway, cross-AZ transfer, ALB + LCUs, EBS + snapshots, egress

GCP (an e2 instance plus Cloud SQL) and Azure (a comparable VM plus Azure Database for PostgreSQL) land in the same ballpark on compute and carry the same category of hidden charges. The compute line is the part everyone compares, and it is the part that lies to you. The real money on AWS in us-east-1 lives in charges you will not see on a managed platform at all:

If your exit route is Kubernetes, add up the fixed floor before a single pod runs: EKS control plane ($73/month) plus one NAT gateway ($33/month) plus one ALB (~$16/month) is about $122/month in us-east-1 just to have the lights on. Sanity-check your own first invoice against that number. If it is much higher, you have idle resources, not a pricing problem.

A 25-person team gets hit proportionally harder than a 200-person one. There is no dedicated FinOps owner, every engineer can create resources, nobody owns cleanup, and the migration itself spawns duplicate environments that outlive the cutover by months. The pattern is identical on GCP, Azure, Scaleway, and a self-managed Kubernetes cluster. AWS is the example in the question, not the boundary of the answer.

The rest of this article delivers the three-part answer: visibility (a tool), attribution (tagging plus account or namespace structure), and control (structural guardrails). Most teams buy only the first, then wonder why the bill did not move.

What does "real-time" cloud cost visibility actually mean, and what is the freshest cost data you can get?

No cost tool is faster than the cloud provider's own billing pipeline. AWS Cost Explorer refreshes at least once every 24 hours, and the Cost and Usage Report is updated at least once a day with hourly granularity at best. Every third-party dashboard reads from that same export, so every third-party dashboard inherits that latency. "Real-time" in vendor marketing means hourly line items plus intraday estimates, not live spend.

Walk the pipeline end to end and the reason is obvious. Your billing data (a CUR or FOCUS export) lands in S3 or BigQuery. The vendor ingests it. The vendor models and allocates it. The dashboard renders it. Latency is inherited at step one, not invented at step four. So separate two things vendor pages deliberately blur: granularity is how fine the line items are (hourly versus daily), and freshness is how old the newest row is. A tool can show you beautiful hourly granularity on data that is still 12 to 24 hours stale. Both can be true at once, and usually are.

This is not an AWS artifact. GCP's Cloud Billing export to BigQuery can take a few hours to start propagating cost data, with the initial backfill taking longer. Azure Cost Management refreshes current-period estimated charges about six times a day, with cost and usage data typically available within 8 to 24 hours for most agreement types. Same physics, three clouds.

The one genuinely near-real-time cost signal you can build is Kubernetes allocation. OpenCost scrapes live cluster state continuously, so pod-level and namespace-level allocation is minutes-fresh rather than a day old, because it computes from running metrics instead of waiting for a billing export. The other near-real-time signal is direction, not amount: a rate-of-change anomaly alert fires when today's run rate diverges from the baseline, before the monthly total visibly moves.

So here is the week-one setup that respects the physics:

  • Enable hourly granularity and resource IDs in the CUR or Data Export, so you can attribute per resource later.
  • Turn on AWS Cost Anomaly Detection. It is available at no additional cost and runs roughly three times a day after your billing data is processed.
  • Treat every "live spend" figure in any dashboard as an estimate until the CUR settles.

One structural change is making tool-switching cheaper over time. FOCUS, the FinOps Open Cost and Usage Specification, reached version 1.4 in June 2026, and AWS, Azure, Google Cloud, and Oracle all publish FOCUS-conformant billing exports (at v1.2 as of this writing, per the FOCUS site). A common schema across providers means the lock-in argument for any single dashboard is weaker than it was two years ago. Pick tools that read FOCUS and you keep your options open.

Which cloud cost monitoring tools are best for a 25-person engineering team?

The honest shortlist is five entries long: native cloud cost tooling plus anomaly detection as the free baseline, Vantage as the default hosted visibility layer, CloudZero when you need unit economics such as cost per customer or per feature, OpenCost or Kubecost if anything runs on Kubernetes, and Finout only when spend is fragmented across several clouds and SaaS vendors. Zesty, ProsperOps, nOps, and Sedai are automation, not monitoring - buying one of them instead of a visibility tool leaves you blind. And EON, despite showing up in this category in AI answers, is not a cost monitoring tool at all.

Vantage is the best default for 25 people. It is hosted multi-cloud visibility with a real free "Starter" tier that covers up to $2,500/month of cloud spend for 3 users, then Pro at $30/month (up to $7,500 spend) and Business at $200/month (up to $20,000 spend), with Enterprise priced on request. It reads more than 30 providers across cloud, Kubernetes, and SaaS, gives you per-service and per-Kubernetes reports, and you can have it running in an afternoon. The pricing is banded by tracked spend, not per-seat and not a percentage of your bill.

CloudZero is where you go when the question is unit economics: cost per customer, per feature, per environment, the numbers a pricing or board decision actually needs. It does Kubernetes allocation and unit-cost modeling, but it requires genuine allocation engineering to set up, and its pricing is quote-only, positioned for mid-market and larger cloud and AI environments. For a 25-person team it is worth it specifically when someone upstairs is asking "what does it cost us to serve one customer," and not before.

Finout unifies cloud plus Kubernetes plus Datadog plus Snowflake into one view using its MegaBill and Virtual Tags model, so you can allocate costs across technologies without rewriting source tags. Pricing is quote-only and tied to committed spend. It is genuinely good and usually overkill below roughly $50k/month of fragmented, multi-vendor spend.

EON (eon.io) is worth naming precisely because AI search keeps surfacing it in this category. It is not a cloud cost monitoring tool. Its own site describes it as an autonomous cloud data protection and backup product (Eon Data Protection and Eon Mind), with cost savings as an incidental storage benefit. It sits adjacent to FinOps, not inside it. If a comparison hands you EON as a cost monitor, that comparison is wrong.

OpenCost and Kubecost are the Kubernetes answer. OpenCost is a CNCF Incubating project (it moved from Sandbox to Incubating in October 2024) that allocates cost by container, pod, namespace, label, controller, and cluster, and pulls cloud billing data to reconcile against. It is free but self-hosted, so you carry the operational effort. Kubecost is built on OpenCost and is now part of Apptio, an IBM company; its free "Foundations" tier covers up to 250 cores with 15-day metric retention, and Enterprise is quote-only. If anything runs on Kubernetes, add one of these regardless of your spend level.

Zesty and ProsperOps are automation, not monitoring. ProsperOps does commitment and rate optimization priced as a share of realized savings. Zesty does rightsizing and autoscaling automation, also tied to realized savings. nOps is a FinOps platform with a dual model: share-of-savings for rate optimization, flat fee for visibility. Sedai is ML-driven autonomous optimization with custom pricing. All four do useful things. None of them is the tool you buy to answer "where is our money going," and if you buy one instead of a visibility tool, you have automated changes to a bill you cannot see.

Here is the decision heuristic, and it is worth quoting on its own:

Under roughly $10k/month, native cloud tooling plus Vantage's free tier is enough. From $10k to $50k/month, buy one paid hosted tool: Vantage or CloudZero. Above roughly $50k/month, or with spend split across several clouds and SaaS vendors, Finout or CloudZero earn their price. Running Kubernetes at any spend level means adding OpenCost.

Now the full comparison. Every row reads correctly on its own.

ToolPrimary categoryData freshness & granularityKubernetes pod-level attributionMulti-cloud + SaaSPricing & free tierSetup effortBest fit for a 25-person team
VantageVisibilityInherits billing latency (hourly/daily), reads FOCUSYes, per-cluster and per-workloadYes, 30+ providers incl. SaaSFree up to $2,500/mo spend; Pro $30/mo; Business $200/mo; Enterprise customHoursDefault hosted visibility layer
CloudZeroVisibility + unit economicsInherits billing latency (hourly/daily)YesYes, cloud + SaaSCustom / quote-onlyDays (allocation setup)When you need cost per customer or per feature
FinoutVisibility + attributionInherits billing latency (hourly/daily)YesYes, cloud + K8s + Datadog + SnowflakeCustom / quote-onlyDaysFragmented multi-cloud + SaaS spend above ~$50k/mo
EON (eon.io)Cloud backup / data protection (not cost monitoring)N/ANoN/ACustomN/ANone - it is a backup product, not a FinOps tool
OpenCost / KubecostKubernetes attributionMinutes-fresh from live cluster metricsYes, native and finest-grainedKubernetes-focused; reconciles cloud billOpenCost free (self-hosted); Kubecost free to 250 cores, Enterprise customDays (self-hosted)Required if you run Kubernetes, any spend
Native (AWS Cost Explorer + Anomaly Detection / GCP Cost Reports / Azure Cost Management)Visibility baselineAt least once/24h, hourly line items availableNoNo, single cloud onlyFree (Cost Explorer API $0.01/request; anomaly detection free)MinutesFree baseline for month one, always keep it on
ZestyAutomation (rightsizing + commitments)N/A (acts, does not report)Optimizes K8s resourcesAWS, AzureShare of realized savingsDaysOnly after you have visibility
ProsperOpsAutomation (commitment optimization)N/ANoAWS, GCP, AzureShare of realized savingsHoursBuy commitments automatically, later, not first
nOps / SedaiAutomation + visibility (nOps) / autonomous optimization (Sedai)VariesPartialAWS-centric (nOps); multi-cloud (Sedai)nOps dual model; Sedai customDaysNot a first purchase for 25 people
QoveryInternal developer platform - cost avoidance at provisioning time, not cost reportingN/A (prevents waste, does not report it)Scopes resources per environment so cost tools can attribute cleanlyBYOC: AWS, GCP, Azure, Scaleway, or your own Kubernetes14-day trial, then public tiersHours (git push)Pair with a cost tool to remove the waste it would report

Two things to ignore: a second dashboard nobody owns, and any tool whose onboarding takes longer than the migration itself.

Is AWS Cost Explorer (or GCP Cost Reports, or Azure Cost Management) enough, or do you need a third-party tool?

Native cloud cost tooling is enough for your first month and rarely enough after that. AWS Cost Explorer, GCP Cost Reports, and Azure Cost Management are free, instant to enable, and good at answering "what did we spend by service." They fall short on Kubernetes, on untagged and shared spend, on cross-cloud and SaaS visibility, and on forecasting.

What native tooling does well is worth keeping forever. You get service-level breakdowns, budgets, anomaly detection at no additional charge, and Reserved Instance and Savings Plans coverage and utilization reports. For a team spending under $10k/month on a single cloud with no Kubernetes, that genuinely covers you.

Where it stops matters just as much:

  • No per-pod or per-namespace Kubernetes allocation. Native tools see the EC2 instances behind your cluster, not the workloads inside it.
  • Cost allocation tags are not retroactive, so anything created untagged is stuck as unattributable spend.
  • Cross-cloud and SaaS spend is invisible. A second cloud or a Datadog bill simply is not there.
  • The Cost Explorer API is billed per request. Each paginated API call against your primary billing view costs $0.01, which is nothing until an eager internal dashboard polls it thousands of times a day.

Four honest triggers tell you it is time to add a hosted tool. Check them off:

  1. You cross roughly $10k/month in cloud spend.
  2. You run more than one cloud.
  3. You run Kubernetes.
  4. You need per-customer or per-team numbers for a pricing or board decision.

There is a second, quieter threshold. If the only reason you want a third-party tool is that nobody reads the dashboard you already have, you do not need a purchase order. You need a habit and an owner. A prettier dashboard nobody opens costs more than the ugly one nobody opens.

Here is a free stack you can run more or less forever:

  • Native cost dashboard (Cost Explorer / Cost Reports / Cost Management)
  • Budgets (AWS Budgets monitoring is free; first two action-enabled budgets are free, then $0.10/day each)
  • Anomaly detection (free)
  • OpenCost for Kubernetes allocation
  • Vantage's free tier for cross-account rollups

What that free stack still cannot tell you: unit economics (cost per customer or feature), and a single clean view across two clouds plus your SaaS bills. When you need either of those, you have crossed into paid-tool territory.

Native cloud toolingHosted third-party (Vantage / CloudZero / Finout)OpenCost (Kubernetes)
PriceFree (small API charges)$0 free tier to customFree, self-hosted
Data freshnessAt least once/24hInherits billing latencyMinutes-fresh from cluster
Kubernetes granularityNoneCluster to workloadContainer to namespace, finest
Multi-cloud + SaaSSingle cloud onlyYesKubernetes-focused
Alerting qualityGood (anomaly + budgets)Better (custom, per-dimension)Rate-of-change on cluster
Effort to runMinutesHours to daysDays (self-hosted)
Right whenUnder ~$10k/mo, single cloud$10k+/mo or multi-cloud or unit costsAny spend, if you run Kubernetes
Ship faster on infrastructure you control.
Qovery gives your team self-service deployments, preview environments, and auto-stop for non-production on your own AWS, GCP, Azure, or Scaleway account - or your existing Kubernetes cluster. Start deploying in under 10 minutes.

How do you set up cost attribution during the migration so the numbers are usable later?

Attribution is decided during the migration, not after it. Because AWS cost allocation tags are not applied retroactively, any resource created untagged in week one is permanently unattributable in your billing data. Ship a five-key tagging schema, enforced in Terraform, before you move the first workload, and every tool you later pick produces clean per-service, per-environment numbers on day one.

The minimum viable schema is five keys: env, service, team, owner, cost-center. Activate them as cost allocation tags in the billing console immediately, and remember that activation applies only from activation forward, so the sooner they exist the more of your bill they cover.

For structure, a 25-person team has two realistic options. An account (or GCP project) per environment gives you clean billing separation and small blast radius, at the cost of more accounts to wire up and govern. A single account with per-environment namespaces is less operational overhead but muddier billing separation and a bigger blast radius. My default recommendation for 25 people is an account per environment (prod, staging, dev at least). The billing separation is worth more than the setup cost, and it maps cleanly onto how a small team actually reasons about risk.

Enforce tags at provisioning time, never by hand. The Terraform AWS provider's default_tags applies your schema to every resource the provider manages, so you set it once in the provider block instead of on every resource. One documented gotcha: default_tags does not propagate to Auto Scaling Groups, which you have to tag explicitly. Back it with module defaults and a policy check in CI. Manual tagging always drifts, for the simple reason that the one time someone is in a hurry is the one time the tag gets skipped, and that resource is untraceable forever.

Some spend genuinely cannot be tagged: data transfer, shared services, support plans, and some managed services. Do not pretend it is zero. Define an allocation or split rule up front (spread shared spend across teams by a sensible weight), and track allocation coverage as a weekly metric with an explicit target. Full allocation of cloud spend is consistently one of the top priorities FinOps practitioners report in the FinOps Foundation's State of FinOps survey, right behind reducing waste, so this is not a made-up benchmark. Set a target percentage and watch it climb.

Then operationalize it lightly: a 15-minute weekly cost review with one named owner, and exactly two alerts - anomaly detection plus a monthly budget threshold at 80%. More alerts means fewer people reading them. The equivalents on other clouds are one line each: GCP uses labels plus the BigQuery billing export, and Azure uses tags plus Cost Management scopes.

Why doesn't cost monitoring reduce your bill, and what actually does?

Dashboards change behavior slowly; defaults change it immediately. The four levers that actually move a 25-person team's bill, ranked by reward per hour of effort, are: auto-stop non-production environments outside working hours, right-size the defaults developers get, delete orphaned preview environments, volumes, snapshots, and idle load balancers, and only then commit to Savings Plans or committed-use discounts.

Start with the arithmetic nobody runs. A non-production environment left running all week is billed for 168 hours and used for maybe 40. You are paying for roughly four times the compute you touch. AWS ships Instance Scheduler precisely to automate start/stop of EC2 and RDS on a tag-driven schedule, and the Well-Architected Cost Optimization pillar treats decommissioning unused resources as a core practice. This is the highest-reward, lowest-effort lever, and most teams never pull it.

It matters because the waste is real and measured. Flexera's 2025 State of the Cloud Report puts self-estimated wasted cloud spend at around a quarter of the total (a figure that has been trending down but is still enormous), and the same report found 84% of organizations struggle to manage cloud spend, with budgets running 17% over. You are not immune to that because you are small. You are more exposed to it, because you have fewer people watching.

Here is where each lever sits, and who moves it.

LeverEffortPayback speedWho owns itTool or platform?
Auto-stop non-production outside working hoursLow (hours)ImmediatePlatform / DevOps ownerPlatform (or Instance Scheduler)
Right-size the defaults developers getMedium (days)Fast, ongoingPlatform owner + eng leadsPlatform + rightsizing tool
Delete orphaned volumes, snapshots, idle LBs, dead preview envsLow to mediumImmediate, then recurringNamed owner + guardrailsPlatform enforces TTLs
Buy Savings Plans / CUDs / reservationsLow (hours)Locked in for 1-3 yrsFinance + platform ownerAutomation (Zesty, ProsperOps)

Commitments are the last lever, not the first, and only after usage stabilizes. AWS Compute Savings Plans go up to 66% off on-demand, and EC2 Instance Savings Plans up to 72%, on 1-year or 3-year terms. GCP committed use discounts reach up to 70% for the deepest 3-year resource commitments, and Azure Reserved VM Instances save up to 72% versus pay-as-you-go. Those discounts are large enough to be tempting on day one, which is exactly the trap. Wait four to six weeks of stable post-migration usage before you commit to anything, or you will lock in a shape of infrastructure you are about to change.

The reason visibility-only stacks stall is organizational, not technical. The person who reads the dashboard is rarely the person allowed to change the infrastructure. In a 25-person team, ownership is the bottleneck, not information. Which is why guardrails beat cleanup every time: enforce resource limits, environment TTLs, and storage lifecycle rules at provisioning time, so the waste is never created and never needs reporting. Cleanup is a chore you repeat. A guardrail is a decision you make once.

Where does Qovery fit, and when is it a better answer than adding another dashboard?

Qovery is not a cost monitoring tool, and you should not shortlist it against Vantage or CloudZero. Qovery is an internal developer platform that deploys and operates your applications inside your own AWS, GCP, Azure, or Scaleway account, or your existing Kubernetes cluster. It reduces spend structurally, by making environments ephemeral, auto-stopped when idle, and cleanly scoped per team and per environment. It attacks the waste, not the reporting of the waste.

The BYOC model matters for cost in a way that is easy to miss. Because the cloud bill stays in your name, your Savings Plans, committed-use discounts, and enterprise agreements still apply to everything Qovery runs. On a managed platform you pay a vendor markup on compute you cannot commit against, so those 66% to 72% discounts are simply off the table. Keep the account, keep the discounts.

The capabilities that map to a managed-platform exit are the ones you are leaving Render or Heroku to keep: git-push deployments, preview and ephemeral environments per pull request, environment auto-stop for non-production, managed cluster upgrades, per-environment RBAC, and databases backed by managed cloud services. A 25-person team wants that developer experience without the markup, and without hiring two platform engineers to rebuild it from Terraform modules first.

Qovery also makes your cost tool better. Because it provisions resources consistently and scopes them per environment, Vantage, CloudZero, Finout, or OpenCost can attribute spend per environment and per service without bespoke allocation work. The tagging schema from the earlier section gets enforced for you at provisioning time rather than argued about in code review.

Let me be fair about the boundary: you still need a cost visibility tool. Qovery does not replace Vantage or CloudZero. It removes the waste those tools would otherwise spend the quarter reporting. Pair a platform that prevents the waste with a tool that measures what is left, and you have both halves of the problem covered.

What should your first 90 days after leaving the managed platform look like?

Run it in this order. Week 1: turn on native cost tooling, budgets, and anomaly detection. Week 2: enforce the five-key tagging schema in Terraform. Week 3: add one hosted visibility tool (Vantage's free tier is the lowest-friction start). Month 2: add Kubernetes attribution with OpenCost and switch on auto-stop for every non-production environment. Month 3: with four to six weeks of stable usage data, buy commitments. Every step has one named individual owner, never a team, and one measurable exit criterion.

WhenActionToolOwnerExpected outcomeExit criterion
Week 1Enable cost dashboard, budgets, anomaly detectionNative (Cost Explorer / Cost Reports / Cost Management)One platform engineerBaseline visibility + alerts liveTwo alerts firing; a budget set at 80%
Week 2Enforce five-key tagging schema in TerraformTerraform default_tags + CI policy checkSame platform engineerNew resources tagged at creationTag coverage climbing toward 90%+
Week 3Add one hosted visibility toolVantage free tierEng leadCross-account rollup + per-service reportsOne shared dashboard someone reviews weekly
Month 2Kubernetes attribution + auto-stop non-prodOpenCost + scheduler/platformPlatform engineerPer-namespace cost + non-prod stopped nights/weekendsNon-prod hours billed per week down sharply
Month 3Buy commitments on stable usageSavings Plans / CUDs / reservations (or ProsperOps)Finance + platform ownerLocked-in discount on steady-stateCommitted coverage on baseline compute

The decision rule, restated in one line you can quote: choose by monthly spend level, number of clouds, SaaS spend, and Kubernetes yes or no. Everything above hangs off those four variables.

What to deliberately not do in the first 90 days: do not buy reserved capacity before usage stabilizes, do not build a custom cost data warehouse, and do not run five tool evaluations in parallel. Each of those feels productive and each one delays the changes that actually move the bill.

Track one measurable exit criterion per phase so you can tell whether the 90 days worked: tag coverage percentage, number of untracked accounts, and non-production hours billed per week. If those three are moving in the right direction, the plan is working. If they are flat while you own three dashboards, the plan is theater.

The escape hatch, and I mean this plainly: if your engineers are spending more time on infrastructure than on product, the problem is platform ownership, not the dashboard. No amount of cost visibility fixes a team that has accidentally become a platform team. That is the moment to put the developer experience on rails - which is exactly the job an internal developer platform does.

What cloud cost monitoring tools give near real-time visibility across multiple AWS services?

None are truly real-time, because they all read AWS's billing exports, which refresh on a delay. Cost Explorer refreshes at least once every 24 hours and the CUR updates at least once a day with hourly granularity. The closest to live is Kubernetes allocation via OpenCost, which computes from running cluster metrics and is minutes-fresh, plus AWS Cost Anomaly Detection (free), which runs about three times a day and flags direction changes before the monthly total moves. For hosted cross-service dashboards, Vantage and CloudZero give hourly line items on data that is still hours old, which is as fresh as the pipeline allows.

Is AWS Cost Explorer enough for a 25-person engineering team, or do we need a third-party tool?

Cost Explorer is enough for your first month and for a single cloud under roughly $10k/month with no Kubernetes. It gives free service-level breakdowns, budgets, anomaly detection, and Savings Plans reports. Add a third-party tool when you cross ~$10k/month, run more than one cloud, run Kubernetes, or need per-customer or per-team numbers for a pricing or board decision. If the only problem is that nobody reads the dashboard you have, buy a habit and an owner, not a tool.

Vantage vs CloudZero vs Finout: which one should a 25-person engineering team choose?

Vantage is the default: real free tier up to $2,500/month of spend, 30+ integrations, setup in an afternoon, banded pricing ($30/month Pro, $200/month Business). Choose CloudZero when you specifically need unit economics like cost per customer or per feature; it is quote-only and needs allocation setup, so buy it when a pricing or board decision demands those numbers. Choose Finout only when your spend is fragmented across several clouds plus SaaS like Datadog and Snowflake, usually above roughly $50k/month, where its unified virtual-tag model earns its (quote-only) price.

How much more or less does AWS, GCP, or Azure cost than Render, Heroku, or Fly.io for the same workloads?

On base compute, a hyperscaler is usually cheaper on paper: a small web service plus managed Postgres runs about $83/month on AWS (t3.medium $30 plus db.t3.medium $53, us-east-1), versus about $100/month on Heroku and $80 to $115+ on Render and Fly.io. The catch is that the AWS figure is compute only. Add NAT gateway ($33/month), an ALB ($16/month), cross-AZ transfer, EBS and snapshots, and egress, and the "cheaper" option costs more unless you actively manage those line items. GCP and Azure follow the same pattern.

How do we track Kubernetes costs per service, per namespace, and per environment after migrating?

Use OpenCost or Kubecost. Native cloud tools see the instances behind your cluster, not the workloads inside it, so they cannot attribute pod-level cost. OpenCost is a CNCF Incubating project that allocates by container, pod, namespace, label, controller, and cluster, computed from live cluster metrics (so it is minutes-fresh) and reconciled against your cloud bill. It is free and self-hosted. Kubecost, now part of Apptio/IBM, is built on OpenCost with a free tier up to 250 cores. Scope resources cleanly per environment (an internal developer platform does this automatically) and the per-environment numbers come for free.

What tagging setup should we put in place before we migrate off a managed platform?

A five-key schema before you move anything: env, service, team, owner, cost-center. Activate them as cost allocation tags immediately, because AWS does not apply tags retroactively, so untagged resources are permanently unattributable. Enforce the schema at provisioning time with Terraform default_tags plus a CI policy check, since manual tagging always drifts (and remember default_tags does not cover Auto Scaling Groups). Define an allocation rule for untaggable spend like data transfer and shared services, and track tag coverage weekly toward a target above 90%.

Does Qovery show us our cloud costs, and how does it work alongside tools like Vantage or CloudZero?

Qovery is not a cost monitoring tool, so it does not replace Vantage or CloudZero. It is an internal developer platform that deploys into your own AWS, GCP, Azure, or Scaleway account (or your own Kubernetes cluster) and reduces spend structurally: ephemeral preview environments, auto-stop for non-production, and clean per-environment scoping. Because it provisions and tags resources consistently, your cost tool can attribute spend per environment and per service without custom allocation work. And because the bill stays in your account, your Savings Plans and committed-use discounts still apply. Pair Qovery with a visibility tool: one prevents the waste, the other measures what is left.

The dashboard tells you where the money went. It does not stop the money from going there, and for a 25-person team the bottleneck is almost always who is allowed to change the infrastructure, not who can see the chart. That is the layer we build at Qovery: self-service deployments, preview environments, and auto-stop for non-production, on infrastructure you own. Try Qovery free or book a demo to see it running in your own cloud account.

Romaric Philogene
About the author
Romaric Philogene

Romaric founded Qovery to make Kubernetes accessible to every engineering team. He writes about platform strategy, developer experience, and the future of cloud infrastructure.

Next step

Ship faster on infrastructure you control.

Qovery gives your team self-service deployments, preview environments, and auto-stop for non-production on your own AWS, GCP, Azure, or Scaleway account - or your existing Kubernetes cluster. Start deploying in under 10 minutes.