Case study: cross-platform analysis saved a 3-cloud portfolio ~30% per month
One real audit. Three clouds. The same workloads priced three different ways — and one clear winner per service.
All dollar figures use Cost Doctor's simulation model. They are estimates for planning, not invoices. Confirm with each platform's billing page before acting.
TL;DR
| Before (as deployed) | After (optimised placement) | Delta | |
|---|---|---|---|
| Railway bill | $62.51 / mo | $43.50 / mo | −$19.01 |
| Render bill | $7.00 / mo | $7.00 / mo | $0.00 |
| Vercel bill | $20.00 / mo (Pro seat) | $20.00 / mo | $0.00 |
| Combined monthly | $89.51 / mo | $70.50 / mo | −$19.01 / mo |
| Annualised | $1,074 / yr | $846 / yr | −$228 / yr |
The lever: Cost Doctor's cross-platform simulator identified that several Railway services would cost significantly less (or nothing extra) on Vercel Pro, because Vercel's generous included allowances (1 TB bandwidth, 1,000 GB-hours) absorb workloads that Railway charges per-GB.
The setup: one team, three clouds, no visibility across them
| Platform | What's deployed | Monthly bill | Pricing model |
|---|---|---|---|
| Railway | 71 services across 15 projects (APIs, frontends, workers, databases) | ~$62.51 | Usage-based: $10/GB RAM, $20/vCPU, $0.05/GB egress |
| Render | 5 services (1 paid chatbot backend, 4 free-tier) | ~$7.00 | Plan-tiered: pick a plan per service |
| Vercel | 6 projects + Postgres store (all within Pro allowance) | ~$20.00 | Allowance-based: $20/seat includes 1 TB bandwidth, 1,000 GB-hours |
The problem is obvious in hindsight: each platform charges differently for the same compute primitives, but without a cross-platform view there's no reason to question the placement.
What the cross-platform analysis found
Opportunity #1: Move bandwidth-heavy frontend to Vercel Pro
| Railway (current) | Vercel Pro (simulated) | |
|---|---|---|
| Service | 4schools (public Next.js app) | Same workload |
| Monthly egress | ~315 GB | ~315 GB |
| Egress cost | $15.78 ($0.05/GB) | $0.00 (fits in 1 TB included) |
| Compute cost | $0.59 (RAM + CPU) | $0.00 (serverless, within GB-hours) |
| Total | $16.37 / mo | $0.00 extra |
| Saving | — | $16.37 / mo |
Why it works: Vercel Pro includes 1 TB of bandwidth per month. This app uses 315 GB — well within the allowance the team is already paying for ($20/seat). The move is effectively free.
Portability: Easy. It's a Next.js app — Vercel's native framework. No persistent disk, no cron, no vendor-specific APIs.
Opportunity #2: Stop paying for idle/abandoned services
| Service | Current cost | Status | Action |
|---|---|---|---|
| berta-pai-backend | $5.31 / mo | No deploy in 66 days, 0.2% CPU | Pause on Railway |
| github-manager | $1.59 / mo | No deploy in 95 days, 0% CPU | Pause on Railway |
| Staging environment (NVE) | $0.72 / mo | Staging, 0% CPU | Auto-sleep or stop |
These don't need a platform move — they need to stop running. Combined saving: $7.62 / mo.
Opportunity #3: Right-size remaining Railway services
After removing the idle services and the bandwidth-heavy frontend, the remaining Railway portfolio drops from $62.51 to ~$38.52/mo, and most of it is legitimate production compute (databases, APIs with steady traffic).
Combined savings waterfall
| Step | Action | Monthly saving | New total |
|---|---|---|---|
| 0 | Starting point (all three clouds) | — | $89.51 |
| 1 | Move 4schools to Vercel (fits in existing Pro allowance) | −$16.37 | $73.14 |
| 2 | Pause 2 abandoned Railway services | −$6.90 | $66.24 |
| 3 | Stop staging environment running 24/7 | −$0.72 | $65.52 |
| 4 | R2 offload for any remaining egress-heavy services | −$2–5 (est.) | ~$61–63 |
| Total estimated savings | ~$26–28 / mo | ~$61–63 / mo |
Payback on the Pro subscription (£15/mo ≈ $19/mo): the savings exceed the subscription cost in month one.
At 10× scale — a typical mid-size SaaS team
The percentages and rules above hold. The absolute numbers scale linearly.
| Real audit (this case) | Mid-size team (×10) | |
|---|---|---|
| Combined 3-cloud bill | $89.51 / mo | $895 / mo |
| Cross-platform savings identified | ~$19–28 / mo | ~$190–280 / mo |
| Annualised saving | ~$228–336 / yr | ~$2,280–3,360 / yr |
| Idle/abandoned waste reclaimed | $7.62 / mo | ~$76 / mo |
| Bandwidth arbitrage (Vercel allowance) | $16.37 / mo | ~$164 / mo |
At this scale:
- A Done-for-you Cross-Platform Audit (£199) pays for itself in under 2 weeks
- A Guided Migration (£349–£749/service) pays for itself in 1–2 months
- The Pro subscription (£15/mo) pays for itself every single month
At 50× scale — a funded startup with serious cloud spend
| 50× scale | |
|---|---|
| Combined 3-cloud bill | ~$4,475 / mo |
| Cross-platform savings identified | ~$950–1,400 / mo |
| Annualised saving | ~$11,400–16,800 / yr |
At this scale, even the Full Portfolio Optimisation service (£2,499) pays for itself in under 3 months.
Why this analysis is a premium feature
Cross-platform simulation requires:
- Live API access to every cloud — tokens for Railway, Render, and Vercel, each with different auth models
- Unified cost model — normalising usage-based, plan-tiered, and allowance-based pricing into comparable $/month figures
- Team-capacity-aware allocation — e.g. knowing your Vercel Pro team has 685 GB of unused bandwidth allowance before recommending a move
- Portability assessment — not every service can move (databases, workers with vendor-specific APIs, persistent disks)
- Migration guidance — per-service risk assessment, step-by-step checklist, rollback plan
This is substantially more work than a single-platform audit. It belongs in the paid tiers.
How this maps to Cost Doctor tiers
| Capability | Community CLI | Pro (£15/mo) | Team (£79/mo) | Governance (£500+/mo) |
|---|---|---|---|---|
| Single-platform audit | Yes | Yes | Yes | Yes |
| Cross-platform simulation | — | Yes (--cross-platform) |
Yes | Yes |
| Scheduled cross-platform audits | — | — | Yes | Yes |
| Cross-platform trend tracking | — | — | Yes | Yes |
| Board-grade migration reports | — | — | — | Yes |
Berta.One done-for-you services
For teams who want results without running the tool themselves.
Analysis services
| Service | Price | What you get | Typical payback |
|---|---|---|---|
| Cross-Platform Audit Report | £199 one-time | Full 3-cloud analysis, quantified savings table, migration risk matrix, prioritised action plan (delivered as PDF + Markdown) | 2–8 weeks at mid-size scale |
| Quarterly FinOps Review | £149 / quarter | Re-run analysis + trend comparison + executive summary. Includes a 30-min call to discuss findings | Ongoing — catches drift and new waste |
Implementation services (per service migrated)
| Complexity | Price | Scope | Examples |
|---|---|---|---|
| Simple | £349 | Static site, frontend, or JAMstack app. No persistent state, no custom domains requiring DNS cutover | Next.js to Vercel, static site between platforms |
| Standard | £749 | API backend or worker. May have environment variables, outbound integrations, custom domain with DNS swap | Node.js API from Railway to Render, Express app to Vercel Functions |
| Complex | £1,499 | Stateful service with persistent disk, database migration, or vendor-specific runtime features. Includes data migration plan + validation | Database moves, services with volumes, cron jobs with platform-specific schedulers |
| Full Portfolio | £2,499–£4,999 | End-to-end optimisation of 10–50+ services across all connected clouds. Includes analysis, migration execution, 30-day post-migration monitoring, and re-audit | Entire cloud portfolio restructuring |
Why these prices work
| Scenario | Cloud bill | Annual saving (est.) | Service cost | Payback |
|---|---|---|---|---|
| Small indie (this case) | $90 / mo | ~$228 / yr | £199 audit | ~10 months |
| Mid-size SaaS (10×) | $900 / mo | ~$2,280 / yr | £199 audit + £749 migration | ~5 months |
| Funded startup (50×) | $4,500 / mo | ~$11,400 / yr | £2,499 full portfolio | ~3 months |
The rule of thumb: if the annual saving exceeds 2× the service fee, the engagement is a clear win. At 10× scale and above, it almost always is.
How to run this analysis yourself
# Install and configure
npm install
cp .env.example .env
# Add RAILWAY_API_TOKEN, RENDER_API_KEY, VERCEL_API_TOKEN, VERCEL_TEAM_ID
# Run the cross-platform audit
npm run audit:cross-platform
# Reports land in ./reports/
# Look for "Cross-platform optimisation" in cost-audit-*.md
Or contact Berta.One for a done-for-you analysis.
Figures are estimates for planning and communication, not tax or contractual advice. Real outcomes depend on traffic patterns, platform pricing changes, and migration scope. Always confirm with each platform's billing page before making financial decisions.