Self-Hosting vs Managed Backstage
Once a team decides Backstage is the right portal, the next fork is whether to run it yourself or buy a managed distribution such as Spotify’s Portal or Roadie. The choice shapes your operational load, your upgrade cadence, and how much of your platform team’s time goes to running the tool versus improving it. This how-to gives you a decision framework and the concrete signals that point each way. It extends Choosing the Right Framework within Developer Portal Architecture & Frameworks.
Prerequisites
- A rough sizing of your portal: number of services, expected users, and how custom your plugin needs are.
- Honest visibility into your platform team’s capacity — self-hosting is an ongoing commitment, not a one-time setup.
- A sense of your compliance constraints: data residency, network isolation, and audit requirements often narrow the options.
- Familiarity with the Backstage upgrade cadence, since who owns upgrades is the crux of the decision.
Exact Configuration
The “configuration” here is a scoring rubric. Weight each factor for your context and see which column wins.
-
Score operational ownership. Self-hosting means you own uptime, upgrades, database, and scaling; managed means the vendor does.
Factor Self-host Managed Uptime / on-call you vendor Backstage upgrades you vendor Deep plugin customization unlimited vendor-gated Data residency control full vendor-dependent Time to first value weeks days -
Estimate the true cost of self-hosting, which is dominated by engineer time, not infrastructure.
Self-host annual cost ≈ (infra) + (0.5–1.5 platform engineers) Managed annual cost ≈ (per-seat licence) + (light integration effort) -
Check the customization ceiling. If you need bespoke backend plugins with unusual dependencies, confirm the managed option allows them before committing.
Validation
# This is a decision, so "validation" is a pre-commitment checklist.
# 1. Can you name who is on-call for the portal at 3am?
echo "Self-host requires a named owner for portal uptime."
# 2. Run a customization spike against the managed option's limits
# before signing — build your hardest plugin on a trial.
echo "If the trial cannot host your hardest plugin, managed is ruled out."
# 3. Model 3-year cost both ways, including engineer time at loaded rate
python3 - <<'PY'
engineers, loaded = 1.0, 200000
infra, licence = 30000, 90000
print("self-host/yr:", infra + engineers*loaded)
print("managed/yr: ", licence)
PY
Edge Cases & Troubleshooting
| Situation | Signal | Better choice |
|---|---|---|
| Small platform team, urgent need | No spare capacity to run infra | Managed — buy time to prove value |
| Heavy bespoke backend plugins | Unusual native dependencies | Self-host — avoid the customization ceiling |
| Strict data residency | Data cannot leave your network | Self-host, or a managed option with in-VPC deployment |
| Started managed, outgrew it | Repeatedly blocked by vendor limits | Plan a migration to self-host; the catalog is portable |
| Started self-host, drowning in ops | Upgrades slip, on-call burns out | Consider managed; you keep your plugins and config |
Frequently Asked Questions
Is managed Backstage locked-in?
Less than most SaaS. The catalog entities, TechDocs, and standard plugins are open-source Backstage underneath, so a well-run managed offering keeps your configuration portable. The lock-in risk lives in vendor-specific plugins and workflows — minimize it by preferring upstream plugins over proprietary ones.
Can we start managed and move to self-host later?
Yes, and many teams do exactly that — buy speed early, then bring it in-house once the value is proven and the platform team has grown. Because the underlying data model is the same, migration is mostly re-pointing infrastructure and re-homing plugins, not re-authoring content.