I need to share something that’s been weighing on me, and I know I’m not alone in this. Six months ago, we launched an internal developer platform at my company. $400K invested, eight months of development, a team of six infrastructure engineers pouring their hearts into it. We were so proud of what we built.
Today, our adoption rate sits at 14%. Developers are still using their old workflows, spinning up shadow infrastructure, and frankly… avoiding our platform like it’s on fire.
This is the post-mortem nobody wants to write, but I think we owe it to each other to be honest about these failures.
The Vision We Had
We wanted to build the future of developer self-service at our company. The goal was beautiful in its simplicity:
- Reduce deployment lead times from days to hours
- Give teams the autonomy to ship without waiting on ops tickets
- Standardize our infrastructure chaos across 12 product teams
- Make our developers’ lives genuinely better
The technical specs were impressive. Auto-scaling Kubernetes clusters, GitOps workflows, integrated observability, the works. Our infrastructure team was excited. Leadership was excited. We had executive sponsorship and a clear mandate.
The Reality Check
Three months post-launch, the data was brutal:
- <15% voluntary adoption across engineering teams
- Developers still using the old deploy process
- Shadow AWS accounts proliferating faster than before
- Support tickets about platform confusion piling up
- Exit interviews mentioning the platform as a source of frustration
We had built something technically sophisticated that developers actively didn’t want to use.
What We Got Wrong — The Hard Lessons
Looking back with painful clarity, I can see exactly where we failed:
1. We treated it as an infrastructure project, not a product
We staffed the platform team entirely with infrastructure engineers. Brilliant people who understood Kubernetes, Terraform, and cloud architecture deeply. But not one person on the team had product management experience. We never thought to ask: “Who are our users? What do they actually need?”
2. We built what we thought developers needed, not what they wanted
We assumed the problems. “Developers need auto-scaling,” we said. “They need standardized CI/CD pipelines.” Did we interview developers first? No. Did we shadow them doing their actual work? No. Did we validate these assumptions with any kind of user research? Absolutely not.
We built features we found technically interesting, not features that solved actual developer pain points.
3. We made it mandatory instead of making it valuable
When adoption was low after the first month, our response was to double down on the mandate. “All new services must use the platform by Q3.” That’s when the shadow infrastructure really took off. Developers found workarounds because the platform was slower and more complex than their existing solutions.
You can mandate compliance, but you cannot mandate enthusiasm.
4. The complexity barrier was real
Our platform required learning a custom DSL, understanding our specific GitOps conventions, and navigating documentation that assumed deep Kubernetes knowledge. For a senior developer joining the company, it took 3-4 days to successfully deploy their first service.
The old way? Thirty minutes with an ops ticket.
5. We ignored the human side entirely
No beta testing with real teams. No champions embedded in product teams to gather feedback. No user testing sessions. The big-bang launch felt like something done TO developers, not FOR developers.
We broke their trust, and trust is harder to rebuild than infrastructure.
The Data Told the Story We Didn’t Want to Hear
When we finally started measuring what mattered:
- Average time from “I want to deploy” to “service is live”: 4.5 hours (old way: 6 hours including ops ticket wait)
- Developer satisfaction with platform: 3.2/10
- Number of platform support requests per week: 47
- Percentage of developers who tried platform and reverted: 64%
We weren’t saving time. We weren’t reducing friction. We were adding cognitive load to already-stretched engineering teams.
What We’re Doing Now — The Pivot
The Board wanted to know if we should “just mandate migration and fix issues as we go.” I had to be honest: That path leads to developer exodus and cultural damage that takes years to repair.
Here’s our recovery plan:
-
We hired a platform product manager — Someone who knows how to do user research, prioritization, and adoption strategy. They report to me with a dotted line to our Head of Product.
-
We hit pause on new features — Instead, our platform PM is conducting 30+ developer interviews. What are the actual pain points? What workflows take the most time? What would make them WANT to switch?
-
We’re starting over with 3 pilot teams — Deep partnership, co-design, embedded support. Build ONE workflow that’s demonstrably better than the old way. Let value spread organically.
-
We’re changing our success metrics — Not “percentage migrated by date X,” but “developer Net Promoter Score” and “time saved per developer per week.”
-
We’re treating this like a product launch — Internal marketing, lunch-and-learns, showcase sessions where pilot teams demonstrate wins. We’re earning adoption, not demanding it.
The hard truth? This will take another 6-12 months. But I’d rather have 80% enthusiastic adoption in a year than 100% resentful compliance in a quarter.
The Lesson That Hurts Most
Platforms need product thinking from day one. You cannot build developer tools in a vacuum and expect adoption. Developers are users. They deserve the same customer obsession we give our external customers.
If I could go back, I would:
- Hire a platform PM before hiring the sixth infrastructure engineer
- Spend the first month just doing user research
- Launch with ONE killer feature that solves ONE painful problem really well
- Measure developer happiness, not technical capabilities
- Never, ever mandate adoption without proving value first
The $400K wasn’t wasted — it’s expensive market research about what NOT to do. But I wish we’d learned these lessons with $100K in smart iteration rather than $400K in failed big-bang delivery.
To This Community
I’m sharing this because I suspect we’re not alone. The platform engineering movement is real and valuable, but I worry that teams are repeating our mistakes. Treating platforms as infrastructure projects rather than products. Measuring the wrong things. Ignoring the human factors.
Has anyone else been through this? What did you learn? What worked in your platform adoption journey? And for those just starting: What questions should we be answering before writing a single line of Terraform?
I’d love to hear from this community. The vulnerability is uncomfortable, but the learning is worth it.