What We Learned Building an Open-Source Kubernetes Platform

Seven hard-won lessons from building Devtron, an open-source Kubernetes platform, on trust, composability, and unifying fragmented tooling.

Table of contents

Kubernetes solved a real problem and created a dozen new ones. Scheduling, scaling, and self-healing came for free. Configuring RBAC across clusters, wiring up GitOps, standardizing CI/CD, and giving developers a streamlined way to ship code without learning YAML archaeology did not.

That gap is why Devtron exists today. Since 2019, we've been building an open-source, Kubernetes-native platform that brings CI/CD, GitOps, observability, security, and now integrated with AI together to simplify how teams operate Kubernetes. Along the way, we've made almost every mistake an infrastructure team can make  and this is the story of the problems we ran into, what we tried first, and what we built and what’s actually stuck.

1. Developers don't trust features. They trust predictability.

One of the earliest things we learned was that a platform can work perfectly in a demo and still fail to earn trust in production.

The problem: We assumed adoption was a feature race to cover more use cases, ship more integrations, and win more users.

What we tried: We shipped fast, prioritizing breadth of capability over consistency of behavior.

Where it broke: A deployment that worked cleanly in staging behaved differently the moment it hit production, same manifest, same pipeline, different outcome, no obvious reason why. Around the same time, an RBAC policy that had been configured for one team quietly blocked a second team performing what looked like an identical action. Neither issue was a bug in the strict sense. Both were platforms doing something technically correct that no one could predict in advance which, to the person hitting it, is indistinguishable from a bug. Debugging either meant leaving the platform's UI entirely and going straight to logs and kubectl to reconstruct what had actually happened.

What we built:  We built a platform that brings consistency, visibility, and guardrails into everyday Kubernetes workflows, so teams can manage deployments, permissions, and changes with greater confidence.

Figure 1 : Why features feel inconsistent and how Devtron fixed it

Teams can now identify configuration drift, trace changes, and troubleshoot deployment or access issues without relying on fragmented tooling and manual investigation. The needed path has  to be understandable, consistent, and predictable when someone was trying to troubleshoot it months later

That became one of the principles we carried forward: build features that people can rely on, not just features that work.

2. Don't rebuild what the ecosystem already got right

The problem: Kubernetes' gravity pulls every infra team toward rebuilding GitOps sync, or a scheduler, or a metrics pipeline, because it feels more "ours."

What we tried: Early architecture discussions genuinely considered building our own deployment engine and our own metrics pipeline from scratch.

Where it broke:  Building our own would have meant years of catching up to feature parity on problems that were already solved well.

What we built: Devtron doesn't reinvent GitOps,  it orchestrates it. It doesn't reinvent autoscaling, it works with the Horizontal Pod Autoscaler you already have. We built Devtron as the coordination layer on top of the CNCF ecosystem: the thing that makes GitOps, autoscaling, and security scanning usable together instead of five separate tabs and five separate mental models. Concretely, that meant a deliberate architectural choice: standalone ArgoCD is pull-based by design, which is excellent for a single cluster but starts to strain once an organization is running many clusters and many microservices, because each ArgoCD instance is its own island of sync state, RBAC, and configuration to maintain. Devtron layers a push-based orchestration model on top of ArgoCD instead of replacing it.

Figure 2: Devtron as an orchestration layer over existing tools

The question shifted from "how do we build this" to "what's still painful even after all these good tools exist." That question is why Devtron looks the way it does  most of what it does is connective tissue, not reinvention.

The lesson generalizes past us: in an ecosystem as dense as cloud-native, differentiation rarely comes from the primitives. It comes from how well you compose them.

3. Hiding complexity is good until it leaks during a failure

The problem: No-code and low-code workflows sound like an unambiguous win for developer experience. They aren't, if the abstraction leaks the moment something breaks.

What we tried: Early workflow builders made the happy path effortless clicking through a deployment, watching it go green.

Where it broke: A resource changed. Something broke. The developer opened the platform, saw the resource was unhealthy, and then had to leave the platform entirely and drop into kubectl to reconstruct what had actually changed and why. The abstraction that made the happy path easy made the failure path opaque.

What we built: We realized showing the current state wasn't enough  the platform needed to explain the transition. That thinking eventually led to Resource Watcher  a way to detect a change, see exactly what changed via a before/after manifest diff, and trigger an action, without forcing someone to reconstruct the incident by hand.

Figure 3: Manual troubleshooting vs. automated Resource Watcher

The same "don't make someone reconstruct it by hand" principle shows up in the Resource Browser and various other features rather than sending a developer to raw kubectl logs and kubectl exec, Devtron surfaces logs, events, manifests, and container shell access from inside the same dashboard where the failure was first noticed.

Lesson learned: An abstraction is only as good as its failure path. If hiding complexity means someone has to leave the platform to understand why something broke, you haven't simplified the problem, you've just moved the hard part somewhere less visible.

4. Open source is a trust mechanism before it's a distribution mechanism

The problem: We open-sourced Devtron partly for the obvious reasons  visibility, community contribution, lower adoption friction.

What we tried: Treating open source primarily as a go-to-market and distribution strategy, the way many companies do.

What we built: A default toward designing in public. Code visible before it's polished. RBAC logic is auditable, not just trusted. Design decisions discussed in issues instead of decided quietly and announced. This mattered more than usual for access control specifically  RBAC that spans namespaces, clusters, and external identity providers (LDAP, SAML, cloud IAM) has a lot of surface area for a subtle design mistake to become a real security gap, and an audience of people running it in production on day one is a faster way to catch that than any internal review process.

Lesson learned: Open source isn't primarily a distribution channel, it's a forcing function for rigor. When any design decision can be publicly questioned before it ships, "we'll document that later" stops being a viable shortcut, and the product gets better because of it, not despite it.

5. Open core only works if the free tier is genuinely complete

The problem: There's a tempting failure mode in open-core businesses: make the open-source version just capable enough to be a trial, and reserve real utility for the paid tier.

What we tried: We had to explicitly decide, feature by feature, what belonged in the open-source core  and the easy version of that decision is "what can we monetize."

Where it broke: That framing is the wrong question. The right one was: would removing this capability make the platform less useful for the people we actually want building with it? Several capabilities that would have been easy revenue as paid features  full CI/CD, GitOps, multi-cluster management, and security scanning  failed that test. Gating them would have made the free tier a demo, not a platform.

Lesson : There's a tempting failure mode in open-core businesses: make the open-source version just capable enough to be a trial, and reserve real utility for the paid tier. We think this quietly kills community trust, even when it grows short-term revenue.

Devtron's open-source core includes full CI/CD, GitOps, multi-cluster management, and security scanning not a stripped demo. The commercial tiers add things enterprises specifically need (advanced RBAC, SSO, compliance tooling), not things a solo developer or small team is missing to do real work. This is slower revenue growth, probably. It's also the only version of open-core we think survives contact with a skeptical platform engineering audience.

Explore more here : Devtron github 

6. The roadmap belongs to the people hitting the problem, not the people designing the platform

The problem: We kept seeing teams solve the same underlying problem in completely different, ad hoc ways.

What we tried: Supporting these as one-off use cases, a config option here, a webhook there.

Where it broke: One team had a custom operator watching for a specific resource change. Another had a cron job polling for the same category of problem. A third had a script running outside the cluster entirely, duct-taped to their alerting. Three teams, one underlying need, three fragile solutions. We'd seen the same shape before with ephemeral environments: teams were manually scripting namespace creation, autoscaling with KEDA, and teardown for every short-lived test environment, because Kubernetes gives you the primitives (namespaces, autoscaling) but not the workflow that ties them together.

What we built: At some point we stopped asking "how do we support this specific use case" and started asking "is this a pattern that deserves to be a first-class capability." Policies and Filter Conditions both came from this shift and neither started as a roadmap line item. Both started as the same workaround showing up in different teams' hands.

Figure 4: How a workaround becomes a Devtron feature

7. A unified control plane beats a better point solution eventually

The problem: Any individual piece of Devtron, the CI/CD engine, the GitOps orchestration, the security scanning  will lose a head-to-head feature comparison against a best-in-class point solution built only for that one job.

What we tried: Initially competing on individual feature depth against specialized tools in each category.

Where it broke: A single deployment touches code in GitHub, a build system, a separate deployment tool, security scanning, and Kubernetes itself has five systems, five owners. When something breaks, the first job isn't fixing it, it's figuring out which system owns the problem. Pipeline-orchestration platforms like Harness make this worse at scale: they treat Kubernetes as one runtime among several, with cluster onboarding handled per-pipeline , fine at small scale, but a compounding tax at 10, 50, or 100+ clusters. That's the exact tax Devtron avoids by treating Kubernetes primitives as the primary abstraction layer, not an add-on.

What we built: One control plane, one auth model, one mental model across CI, CD, GitOps, and security deliberately trading some best-in-class depth in any single category for not needing five different tools to answer one question about one deployment.

Figure 5: Devtron's unified control plane vs. scattered tools

Teams don't switch to a unified platform because one feature wins a bake-off. They switch when the operational tax of stitching tools together finally outweighs the convenience of each tool being individually excellent. That's the problem we wanted Devtron to solve  and it's the line that connects back to where this post started.

Where this leaves us

Every lesson above is really the same decision, made eight different times: build less, but make what you build compose well with everything around it.

  • Predictability over feature breadth inconsistently feels broken, even when it isn't.
  • Coordinate the ecosystem, don't rebuild it.
  • Complexity hidden badly during failure is worse than not hidden at all.
  • Open source works when decisions can be questioned before they ship.
  • Documentation should answer problems, not describe features.
  • A free tier that isn't genuinely usable isn't really open source.
  • Build what users keep rebuilding by hand, not what's on the roadmap.
  • One control plane beats five stitched-together tools

None of this is Devtron-specific wisdom, really it's what we think most teams building open-source infrastructure eventually learn, usually the hard way. Kubernetes rewards teams that compose the ecosystem well and punishes teams that try to out-build it. Trust compounds slower than features, but lasts longer. 

If you're building on Kubernetes and have hit any of the problems above, the Devtron GitHub repo and Discord community are open. We'd genuinely like to know what you're stitching together by hand that shouldn't have to be.

Related articles