You build pipelines to deploy your team’s applications to cloud VMs. Soon other teams adopt the same pattern and ask you to help.
But Black Friday happens and your applications struggle to handle the increased traffic. So you migrate from cloud VMs to Kubernetes to autoscale and have your pipelines deploy to Kubernetes.
But as your company grows, these pipelines become hard to maintain and the direct connections from pipelines to Kubernetes grow the attack surface. So you install Argo CD; teams now declare their Kubernetes manifests in Git and Argo CD automatically syncs them to Kubernetes.
But Kubernetes is complex and most software engineers become frustrated with needing to maintain large YAML manifests filled with boilerplate. So you abstract the complexity by providing generic golden-path Helm charts, letting software engineers focus on their application logic rather than Kubernetes complexity.
But alongside the applications come cloud resources such as databases, caches, buckets, etc. Your team becomes the bottleneck for creating and modifying these resources with Terraform. So you install Crossplane and publish guardrailed composite resources that teams declare alongside their application manifests.
But you have only one test environment, and engineers working on the same code bases simultaneously find it hard to test their work in isolation before submitting it for review. So you use Argo CD ApplicationSets to spin up ephemeral sandboxes for pull requests.
But when something breaks in production, teams have no visibility and come to you to dig through logs. So you give every application dashboards, logs and alerts out of the box.
Teams now deploy, run and monitor their applications autonomously and at scale. Congratulations, you’ve built an internal developer platform. You are now a platform engineer.