This is the painful story I didn’t want to share in the other thread, but it needs to be said because I see teams making the same mistake we did.
We spent $600K and 14 months building our internal developer portal using self-hosted Backstage. Beautiful service catalog. Sleek UI. Comprehensive API documentation. Automated dependency mapping.
10% adoption after 6 months.
The build-vs-buy decision doesn’t matter if nobody uses what you built.
The Numbers That Hurt
Investment:
- 5 platform engineers × 14 months × $9K/month = $630K
- Infrastructure costs: $2K/month = $28K
- Design contractor (3 months): $45K
- Total: $703K
Return:
- Target: 80% weekly active users (our definition of success)
- Month 1: 8% WAU
- Month 3: 12% WAU
- Month 6: 10% WAU (actually went down as novelty wore off)
ROI: Spectacularly negative.
What Went Wrong: We Built Infrastructure, Not Product
Here’s the brutal truth: We treated the portal like an infrastructure project instead of a product.
Infrastructure mindset:
- “Build it and they will come”
- Success = deployment is stable
- Users = anyone with login access
- Feedback = opened a few Slack threads asking for input
Product mindset:
- Adoption must be earned through value
- Success = users choose your tool over alternatives
- Users = people actively solving problems with your product
- Feedback = continuous user research, interviews, usage analytics
We did infrastructure. We needed product.
The Adoption Killers We Ignored
1. We solved our problems, not developer problems
Platform team wanted centralized service ownership tracking (management problem). Developers wanted faster onboarding docs (their actual pain point). We built the former.
2. Portal competed with muscle memory
Developers already knew how to:
- Find service ownership: Ask in #engineering-help Slack
- Check deployment status: Look at DataDog
- Find API docs: Search GitHub
Our portal required learning a new tool to do things they already knew how to do. Convenience beats comprehensive.
3. We measured deployment, not value delivery
Celebration when portal went live. No measurement of:
- Time-saved per developer per week
- Reduction in “where is X” Slack questions
- Onboarding time for new engineers
- Incident response time improvement
We had zero data proving the portal made developers more productive.
4. No forcing function for adoption
Portal was optional. Every feature was “nice to have.” Compare to:
- GitHub: You must use it to commit code (forced)
- Jira: PM blocks you if tickets aren’t updated (forced)
- CI/CD: Code doesn’t deploy without it (forced)
Portal: “Here’s a tool. Try it out. Let us know what you think.” Optional tools stay optional.
The Backstage Paradox
Spotify reports 99% internal Backstage adoption. External companies average 10-15%.
What’s different?
- Spotify’s portal is their competitive advantage - They have product managers, designers, and continuous user research dedicated to it
- They built for their specific culture - Not trying to be generic framework
- They have forcing functions - Portal is tightly integrated into their development workflow
- Massive investment - 30+ people working on Backstage full-time
Your 3-person platform team self-hosting Backstage is playing a different game.
What We Should Have Done
Looking back with painful clarity:
Option 1: Managed Solution First
- Get to production in 3-4 weeks instead of 14 months
- Validate that portal concept drives adoption
- If adoption is high, then consider self-hosting for customization
- If adoption is low, saved 14 months of wasted engineering
Option 2: Lightest-Weight MVP Possible
- Notion page with service catalog
- 2 days of engineering time
- Measure adoption: Do developers actually use centralized docs?
- Build portal only if lightweight version proves demand
Option 3: Interview Developers First
- “What blocks you from being productive?”
- “How do you currently find service ownership info?”
- “What tool do you wish existed?”
- Build what they actually need, not what we think they need
We did none of the above.
The Question That Haunts Me
How do you force adoption vs earn adoption?
Forcing doesn’t work long-term:
- Mandate usage → resentment + workarounds
- Make it required for deployments → adds friction to critical path
- Remove alternatives → developers find new workarounds
Earning is hard but sustainable:
- Solve genuine developer pain
- Make it 10x better than current solution
- Start with one killer feature that’s obviously valuable
- Expand from there
We never identified the killer feature. Service catalog wasn’t painful enough to justify learning new tool.
For Teams Considering Self-Hosted Backstage
Before you commit:
- Do user research first - Not “we talked to 3 people,” real user interviews
- Identify the killer feature - What’s the one capability that makes portal essential?
- Define adoption metrics upfront - What % usage = success? How will you measure?
- Build forcing function into design - How does portal become necessary, not optional?
- Assign product ownership - Someone owns adoption, not just uptime
Or just use a managed solution where vendor has already figured out adoption patterns across hundreds of companies.
The Real Cost
$600K is painful but recoverable. The real cost:
- Opportunity cost: What could 5 engineers have built for product in 14 months?
- Team morale: Platform team feels like failure after massive investment
- Organizational trust: Leadership now skeptical of future platform initiatives
- Sunk cost trap: Hard to admit failure and switch to managed after that investment
The build-vs-buy decision matters less than the adoption-vs-abandonment decision.
A $200K managed portal with 75% adoption is infinitely better than a $700K self-hosted portal with 10% adoption.
Who else has lived this? What broke your adoption—and how did you fix it (or did you)?