Container Wars: What Five Years of Platform Engineering Taught Me

The Great Kubernetes Migration That Almost Broke Us

Three years ago, our engineering team faced a choice that would define our infrastructure future. We were drowning in the complexity of managing containerized applications across multiple environments. The statistics were pretty telling: 84 percent of organizations running containers had already moved to Kubernetes orchestration. We were part of the remaining 16 percent, and honestly, it showed.

Container Wars: What Five Years of Platform Engineering Taught Me
Container Wars: What Five Years of Platform Engineering Taught Me

Our homegrown container orchestration was failing spectacularly. Deployments took hours instead of minutes. Scaling required manual intervention that often happened too late. The breaking point came during a Black Friday incident when our payment service crashed, and we spent four hours manually restarting containers across seventeen servers. That night was rough. We knew we had to join the Kubernetes revolution, ready or not.

The migration wasn’t smooth. Even with comprehensive Kubernetes documentation, the learning curve was brutal. Our developers spent weeks wrestling with YAML configurations that seemed to multiply overnight. Our operations team struggled with networking concepts that felt completely alien. But six months later, we had our first successful automated deployment. I’ll admit it felt pretty good. Today, we can’t imagine running containers any other way.

Illustration for Container Wars: What Five Years of Platform Engineering Taught Me
Illustration for Container Wars: What Five Years of Platform Engineering Taught Me

Docker’s Licensing Storm and the Unexpected Resilience

When Docker announced licensing changes for Docker Desktop in 2021, panic spread through our industry. Slack channels exploded with migration plans. Conference talks picked apart alternatives. Yet here we are, three years later, and Docker Desktop usage is remarkably steady across enterprise environments.

Why did the great Docker exodus never happen? The answer comes down to switching costs and ecosystem lock-in that many people underestimated. Our team spent weeks evaluating alternatives like Podman and Rancher Desktop. We tested workflows and measured performance. The conclusion was pretty sobering: migration would cost more than just paying for compliance, especially for teams already deep in Docker-centric toolchains.

This taught us something important about technology decisions. Market disruption often creates way more noise than actual change. The tools that survive aren’t always the most innovative or cost-effective. Sometimes, they’re just the most entrenched. Docker’s resilience shows how powerful developer experience can be when it goes head-to-head with pricing optimization.

Platform Engineering: The New DevOps Evolution

The biggest shift I’ve witnessed is the rise of dedicated platform engineering teams. What started as a response to infrastructure complexity has become a fundamental reorganization of how we build and deploy software. These teams work as translators between raw infrastructure capabilities and what developers actually need to get their jobs done.

Our platform team started with three engineers tasked with “making Kubernetes easier.” Today, they manage self-service portals, standardized deployment pipelines, and automated compliance checks. Developers don’t write raw Kubernetes manifests anymore. They don’t configure ingress controllers or debug pod networking issues. Instead, they focus on business logic while the platform handles all the underlying complexity.

This abstraction comes with real trade-offs. Developers gain speed but lose low-level control. Operations teams achieve standardization but give up flexibility. The trick is finding the right balance for your organization’s maturity level and risk tolerance. Not every team needs the same level of abstraction, and platform engineering definitely isn’t a one-size-fits-all solution.

The Observable Revolution: eBPF and WebAssembly

Two technologies have completely changed how we approach system observability and workload portability. Extended Berkeley Packet Filter (eBPF) now gives us unprecedented visibility into kernel-level operations without requiring any code changes. This breakthrough eliminates the traditional overhead that came with comprehensive monitoring.

Before eBPF, adding observability meant modifying application code, injecting agents, or accepting performance penalties. Today, we can trace network flows, monitor system calls, and profile CPU usage with almost no overhead. The CNCF landscape shows dozens of eBPF-powered tools that simply weren’t viable five years ago.

WebAssembly represents another major shift, moving beyond browser constraints to enable server-side workloads. We’ve started experimenting with WebAssembly for edge functions and microservices that need extreme portability. The performance characteristics are impressive, especially for CPU-intensive tasks that benefit from near-native execution speeds.

These technologies share something important: they remove traditional constraints that forced architectural compromises. eBPF eliminates the observability tax. WebAssembly removes platform dependencies. Both enable new possibilities that seemed impossible just a few years ago.

GitOps: From Experiment to Standard Practice

GitOps has moved from an interesting concept to standard practice at organizations with mature DevOps cultures. The declarative approach to infrastructure management now feels as natural as version controlling application code. But the journey to GitOps maturity revealed some unexpected challenges.

Our initial GitOps implementation focused on deployment automation. Git commits triggered pipeline executions that updated cluster state. Simple in concept, complex in practice. We struggled with secret management, environment promotion workflows, and rollback procedures. The tooling felt immature, and debugging was absolutely frustrating.

Today, our GitOps workflows handle everything from infrastructure provisioning to security policy updates. ArgoCD manages application deployments while Flux synchronizes cluster configurations. The debugging experience has improved dramatically, and the operational benefits are undeniable. Configuration drift is nearly impossible. Audit trails are comprehensive. Recovery procedures work predictably.

The transformation required more than just tool adoption. It demanded organizational changes around code review practices, access controls, and incident response procedures. GitOps isn’t just a deployment strategy. It’s a fundamental shift toward infrastructure as code that touches every aspect of operations.

These trends represent more than just technological evolution. They signal a maturation of cloud-native practices and the emergence of new operational approaches. The next five years will likely bring even bigger changes as these technologies converge and new challenges pop up. What trends are shaping your infrastructure decisions? I’d love to hear about your experiences in the comments below.