In platform engineering, the goal is not just deployment — it’s delivery at scale. With a Platform-as-a-Product mindset, engineering teams move beyond infrastructure scripts and start crafting developer experiences.
This Platform Engineering example series brings that idea to life. Over three hands-on tutorials, we transformed the world’s most recognized PHP app — WordPress — into a platform-engineered workload that runs across:
score-compose
score-k8s
More than just a migration, this project reveals how Score enables:
Many teams begin with docker-compose.yaml
, Helm charts, or handwritten Kubernetes manifests. These work — until they don’t.
Common friction points:
Over time, onboarding slows, environments drift, and handoffs multiply. The root issue? A lack of abstraction between app needs and infra implementation.
Score solves this problem by defining a developer-focused workload spec — not a deployment engine.
Developers use Score to describe:
mysql
, dns
, route
)Platform engineers then map those resource requests to provisioners or infrastructure definitions — tailored to each runtime.
Example:
mysql
resource maps to a local container in Docker, a StatefulSet in Kubernetes, or an RDS instance via HumanitecThis is the contract. Developers declare intent. The platform fulfills it.
This series turns that model into practice by deploying the same score.yaml
across three targets — showing how workload portability and platform maturity evolve together.
Run WordPress locally with zero docker-compose.yaml
. Provision MySQL and dynamic localhost
DNS using Score and score-compose
.
Platform takeaway: Show developers how to spin up realistic dev environments — fast, safe, and repeatable.
Use score-k8s
to deploy the same workload spec into Kubernetes — without Helm, kustomize, or YAML handrolls.
Platform takeaway: Codify how services bind, route, and scale in Kubernetes — without burdening application developers.
Deploy to a full-blown IDP powered by Humanitec. Use resource definitions and classes to provision MySQL dynamically. Expose routes. Inject secrets. All with humctl score deploy
.
Platform takeaway: Deliver self-service infra with policy-driven guardrails. No YAML, no kubectl
, no ops bottlenecks.
Each layer of this series adds value — not just to the platform, but to the developer experience.
Part | Target Runtime | Developer Outcome | Platform Outcome |
---|---|---|---|
1 | Docker Compose | Fast, local-first dev | Clean provisioning for inner loop environments |
2 | Kubernetes | Seamless staging rollout | Declarative runtime behavior, reusable patches |
3 | Humanitec | Self-service app delivery | Policy-driven infra, zero handoffs |
This is what platform evolution looks like — starting small, scaling smart.
This pattern enforces clean boundaries. No more leaking Kubernetes concerns into app code. No more bespoke docker-compose.yaml
files. Score becomes the source of truth, while platform logic stays isolated.
It’s the blueprint for building golden paths. Each provisioner or resource definition becomes an internal product — with a defined interface, clear defaults, and environment-aware behavior.
This model supports autonomy without chaos. Developers ship faster, while platform teams codify and control infrastructure evolution — at scale.
WordPress was just the starting point. This approach works across:
Score defines what the app needs. The platform decides how it’s delivered.
By combining Score with runtime tools like score-compose
, score-k8s
, and Humanitec, teams achieve:
It’s not just about YAML replacement — it’s a new operating model for platform-first organizations.
This article series is part of the Awesome Score Spec Examples project.
If you’ve learned something here — or if you want to share how your team runs Score in production:
Let’s make platform engineering practical — and portable — for every team.
Join me as I talk shop about internal developer platforms, products, tools, tips and everything in between—new episodes every week!