A team creates a service template.
The template includes:
- a Go module
- a Dockerfile
- a health endpoint
- a GitHub Actions workflow
- Kubernetes manifests
- an OpenTelemetry configuration
- a short README
An engineer runs it and receives a repository.
template
│
▼
new repository
This is useful.
It is not yet a platform.
The repository still needs build infrastructure, credentials, deployment authority, DNS, observability, ownership, support and a way to receive future improvements.
The template created files. It did not necessarily create a working relationship between the application team and the systems that will carry the service into production.
A generated repository is also normally a snapshot. Updating the template does not automatically update repositories created last month.
A golden path becomes a platform when the path extends beyond generation.
discover
│
▼
create
│
▼
build
│
▼
deploy
│
▼
observe
│
▼
operate
│
▼
improve
A golden path becomes a platform when it is no longer merely advice about how work should happen. It becomes a supported product through which the work can actually be completed.
That requires more than a template.
It requires a control loop.
From template to supported capability
The template creates the starting state
Backstage Software Templates can load a code skeleton, collect parameters, execute actions, publish the result to source control and register the resulting component in the software catalog. Each execution is represented as a task with its own result and logs.
A simple service template might produce:
catalog-service/
├── cmd/
├── internal/
├── api/
├── deploy/
├── Dockerfile
├── Makefile
├── go.mod
├── catalog-info.yaml
└── .github/
└── workflows/
└── ci.yml
This removes blank-page decisions about structure, naming, builds, tests, documentation, catalog registration and CI.
The standards arrive in the first commit.
But the template mostly answers:
What should exist
when the journey begins?
A platform must also answer:
What happens after that?
The golden path spans the lifecycle
For a bfstore Go service, the path might include:
CREATE
repository
service metadata
documentation skeleton
VERIFY
formatting
unit tests
dependency checks
static analysis
contract checks
PACKAGE
container image
software bill of materials
signed artefact
PROVISION
database
runtime identity
secrets path
DNS
telemetry destination
DEPLOY
development
staging
production
OPERATE
logs
metrics
traces
alerts
runbook
ownership
AWS describes golden paths as end-to-end automated patterns spanning repositories, testing, security, deployment and observability.
The difference is scope.
TEMPLATE
creates a starting artefact
GOLDEN PATH
creates a supported route
through the delivery lifecycle
A template may be one implementation detail inside the path.
It should not be mistaken for the destination.
Self-service turns intent into execution
A document can describe a golden path.
A platform lets an engineer consume it without opening a ticket for every step.
The interface may be:
- a developer portal
- a CLI
- an API
- a Git workflow
- a combination of all four
For bfstore, a developer might supply:
service:
name: returns
language: go
owner: application-team
communication:
synchronous: grpc
asynchronous: kafka
database:
required: true
exposure:
type: internal
The platform can derive the repository, module path, catalog entity, CI workflow, container repository, dashboards, runtime identity, namespace, network policy, documentation and deployment configuration.
The developer supplies intent.
The platform supplies the repeated machinery.
DEVELOPER
what am I building?
PLATFORM
which approved components
turn that intent into a service?
Self-service does not mean every request is automatically approved.
It means supported requests, policy decisions, required approvals, execution status and failure feedback are available through a defined workflow rather than private coordination.
REQUEST
│
▼
POLICY EVALUATION
│
├── automatically approved
├── requires recorded approval
└── rejected with explanation
│
▼
EXECUTION AND FEEDBACK
Durable systems carry the work afterwards
Backstage may provide the visible entrance.
The platform behind that entrance still includes source control, CI, Terrakube, OpenTofu, Crossplane, Kubernetes, artefact registries, secrets systems and observability.
The portal can ask:
Which type of service
would you like to create?
The platform must then make good on the answer.
BACKSTAGE TASK
│
▼
DESIRED STATE
repository, pull request
or control-plane resource
│
▼
DURABLE RECONCILER
GitOps, Terrakube,
Crossplane or equivalent
│
▼
RUNNING CAPABILITY
The portal initiates the request.
It should not become the only record of desired state.
A Backstage task can succeed, fail, be cancelled or be started again. Long-lived infrastructure and workload configuration should therefore be handed to a control plane that can retry, detect drift and report readiness after the portal task has ended.
The hand-off needs idempotent actions, stable resource identifiers, safe retries, partial-failure cleanup, downstream status links and a clear recovery owner.
A portal with buttons whose downstream integrations are unreliable is not a platform.
It is a beautifully organised collection of future support tickets.
The scaffolder is a privileged control surface
Once templates create repositories, identities, DNS records, cloud resources and production deployment paths, the scaffolder is no longer merely a form renderer.
It is part of the platform security boundary.
The platform must control who may start each template, which parameters are allowed, which production actions require approval, which integration identity performs the work, who may view task logs and how executions are audited.
Backstage provides permission controls around template execution, parameters, steps, task visibility and cancellation. Templates can also use secret values rather than ordinary parameters.
The secure path must include the machinery creating the secure path.
Custom actions should be narrowly authorised, tested, retry-safe, explicit about side effects and observable when they fail.
A task log should help diagnose a failure without becoming a place where credentials and private values quietly accumulate.
The path must be operated as a product
Ownership continues after creation
A template can be published once and forgotten.
A platform capability cannot.
Someone must own compatibility, documentation, upgrades, security fixes, deprecations, support, feedback and roadmap decisions.
Suppose the golden path generates Go services using:
Go 1.25
Eventually the Go version changes, GitHub Actions evolve, scanners are replaced, Kubernetes APIs are deprecated and new security controls become mandatory.
A generated repository does not inherit those improvements automatically.
The platform needs an upgrade strategy.
SHARED DEPENDENCY
versioned library or base image
MANAGED CONFIGURATION
centrally reconciled policy or resource
GENERATED FILE
upgrade pull request or codemod
APPLICATION-OWNED FILE
documented migration
The platform team must decide how the path changes, which services are affected, whether automated pull requests are issued, how long the old path remains supported and how adoption is evidenced.
TEMPLATE OWNER
maintains some files
PLATFORM PRODUCT TEAM
maintains a user journey
and its operational outcome
Catalog ownership is not the whole operating model
A Backstage catalog owner helps people discover which group an entity belongs to.
That is valuable metadata, but it does not prove that the group accepts on-call responsibility, can change the system, maintains a runbook or owns product outcomes.
bfstore should distinguish:
CATALOG OWNER
discoverable responsible group
OPERATIONAL OWNER
on-call and incident responsibility
TECHNICAL OWNER
authority to change the system
PRODUCT OWNER
prioritises service outcomes
The platform can make these relationships visible and testable.
A stronger scorecard asks for:
services_with_valid_catalog_owner
services_with_on_call_route
services_with_tested_escalation
services_with_current_runbook
The surrounding operating model must make that catalog ownership real.
Feedback must travel in both directions
A one-way golden path looks like:
platform team
│
▼
template
│
▼
application team
A platform requires a return route.
platform capability
│
▼
developer use
│
▼
delivery outcome
│
▼
friction and evidence
│
▼
platform improvement
Useful feedback includes abandonment, confusing parameters, task failures, time to first deployment, files immediately rewritten, recurring bypasses, repeated support questions and workloads that do not fit.
The platform team should not interpret every deviation as developer disobedience.
Repeated deviations may indicate that the path has become narrower than the road developers actually need.
The platform improves through evidence rather than by repeatedly painting the same path a brighter shade of gold.
Platform capabilities need their own SLOs
A supported path should have service-level objectives of its own.
For example:
platform_capability: create-go-service
availability:
successful_request_rate: 99.5%
latency:
p95_repository_creation: 3m
p95_development_readiness: 15m
reliability:
partial_provisioning_rate: 0.5%
manual_recovery_rate: 0.2%
feedback:
failures_with_actionable_message: 98%
workflows_linking_to_downstream_status: 100%
The platform should measure not only whether a task completed, but whether the developer could understand its state, recover from failure and complete the intended outcome.
Guardrails should be built into the journey
A golden path should make the secure route the easy route.
It can include repository protection, dependency and secret scanning, signed artefacts, approved base images, workload identity, encrypted storage, standard telemetry and deployment approval rules.
The path should not merely say:
Remember to configure
workload identity.
It should create:
- the trust policy
- the workload role
- the Kubernetes service account
- the approved association
- the relevant tests
The generated service starts inside the organisation’s intended security model.
SECURITY DOCUMENT
explains the rule
GOLDEN PATH
implements the ordinary case
GUARDRAIL
prevents prohibited variation
These layers should reinforce one another.
The platform removes repeated security construction.
It should not remove engineers’ understanding of what the controls do.
A platform still needs escape routes
A golden path should be attractive, supported and well maintained.
It should not claim that every workload has the same shape.
bfstore may contain stateless services, Kafka consumers, scheduled jobs, gateways, operators, telemetry collectors, public websites and infrastructure controllers.
One template cannot represent all of them honestly. A useful platform may offer several supported paths for common workload shapes.
A team with a legitimate exception should be able to leave the path through a documented process.
exception:
owner: payments-team
reason: requires specialised PCI runtime
mandatory_controls:
- signed images
- workload identity
- central telemetry
review_date: 2026-12-01
migration_candidate: true
The exception should record why the path does not fit, which guarantees still apply, who supports the alternative, when it will be reviewed and whether repeated demand should create a new supported path.
GOLDEN PATH
supported default
GUARDRAIL
non-negotiable safety boundary
ESCAPE ROUTE
approved alternative
with explicit ownership
A path without exits becomes a cage.
A path nobody chooses becomes scenery.
Documentation is part of the interface
A platform is not self-service when every successful use requires someone from the platform team to sit beside the developer.
The documentation should explain what the path creates, which workload fits it, how identity and deployment work, where telemetry appears, how failures are diagnosed, how upgrades happen and how exceptions are requested.
Backstage TechDocs supports a docs-like-code model in which documentation lives alongside source and can be surfaced through the portal. Software templates can create that documentation path from the beginning.
For bfstore, the generated structure could include:
docs/
├── index.md
├── architecture.md
├── development.md
├── deployment.md
├── observability.md
└── runbook.md
The template provides the structure.
The owning team provides the service-specific truth.
The platform provides the place where that truth can be found.
Documentation is not an appendix to self-service.
It is one of the mechanisms through which self-service becomes possible.
Success is measured after adoption
A platform should not measure success only by counting:
templates created
portal plugins installed
repositories generated
Those are activity measures.
The intended outcomes are shorter time to first deployment, lower lead time, fewer failed deployments, faster recovery, fewer support requests, higher control adoption, clearer ownership and better developer experience.
A bfstore scorecard might contain:
golden_path: go-grpc-service
adoption:
active_services: 12
teams_using_path: 3
delivery:
median_time_to_first_deployment: 18m
median_lead_time: 42m
change_failure_rate: 4.2%
experience:
task_failure_rate: 1.1%
workflow_abandonment_rate: 2.0%
manual_platform_tickets_per_service: 0.4
documentation_helpfulness: 4.3/5
operations:
services_with_standard_telemetry: 100%
services_with_valid_catalog_owner: 100%
services_with_on_call_route: 92%
services_with_tested_runbook: 83%
The numbers should lead to decisions.
Delivery metrics are influenced by more than the platform.
The platform can affect lead time, deployment frequency and recovery, but it does not own every variable affecting them.
Measure association carefully before claiming causation.
Use a pre-adoption baseline, segment results by path and workload type, compare similar adopters and non-adopters, and combine task data with stability, satisfaction and user research.
If first deployment is fast but service upgrades remain manual, the platform has optimised only the first ten minutes of a multi-year lifecycle.
If adoption is high because use is mandatory while satisfaction is poor, the adoption number is wearing borrowed clothes.
The bfstore path from template to platform
The first bfstore golden path could support one deliberately narrow workload:
Go gRPC microservice
with optional Kafka and MySQL
running on Kubernetes
First version
Generate:
- Go service skeleton
- Protobuf contract
- unit-test layout
- Dockerfile
- Make targets
- GitHub Actions
- Helm chart
catalog-info.yaml- TechDocs skeleton
Second version
Integrate:
- repository creation
- branch protection
- container registry
- image scanning
- signed artefacts
- development deployment
- workload identity
- standard telemetry
Third version
Add:
- staging promotion
- policy checks
- database provisioning
- secret references
- SLO template
- runbook checks
- deployment evidence
- upgrade automation
Platform version
Operate the catalog, self-service workflows, reusable APIs, durable reconcilers, upgrades, support, platform SLOs, adoption and failure metrics, user research, roadmap and deprecation process.
SCAFFOLD
│
▼
AUTOMATE
│
▼
INTEGRATE
│
▼
OPERATE
│
▼
LEARN
│
▼
PLATFORM
The platform is not finished at the bottom of that diagram.
The final arrow loops back to the top.
The mental model I am keeping
My earlier model was:
GOLDEN PATH
good repository template
+
developer portal button
The stronger model is:
DEVELOPER NEED
│
▼
GOLDEN PATH
│
┌───────────────┼───────────────┐
│ │ │
▼ ▼ ▼
DISCOVERY SELF-SERVICE GUARDRAILS
│ │ │
└───────────────┼───────────────┘
▼
DESIRED STATE
│
▼
DURABLE RECONCILIATION
│
┌───────────────┼───────────────┐
│ │ │
▼ ▼ ▼
BUILD DEPLOY OPERATE
│ │ │
└───────────────┼───────────────┘
▼
OBSERVATION
│
▼
FEEDBACK
│
▼
PRODUCT IMPROVEMENT
│
└──────────► GOLDEN PATH
The template defines how a component begins.
Self-service turns developer intent into an executable request.
Guardrails keep the ordinary route inside security and compliance boundaries.
Durable reconciliation keeps the desired outcome true after the portal task ends.
Documentation and support make the result operable.
Metrics and feedback show whether the platform improved delivery and what the path should become next.
The escape route handles the cases where the supported default is genuinely not enough.
A template becomes a golden path when it encodes a recommended journey.
A golden path becomes a platform when that journey is:
- discoverable
- self-service
- integrated
- secure
- documented
- supported
- measurable
- maintained
- open to improvement
The platform is not the paved road. It is the organisation that keeps the road connected, signposted, repaired and worth choosing.
Backstage may provide the map and entrance.
Terrakube, Crossplane and OpenTofu may reconcile the ground beneath it.
GitHub Actions may carry changes along it.
Kubernetes may host the resulting workload.
Observability may show whether the journey succeeded.
The platform team owns the experience across those boundaries.
Without that ownership, the golden path is a template with ambitions.
With it, the path becomes a product teams can build upon without first becoming experts in every stone beneath their feet.
References and further reading
-
Backstage Software Templates Describes creating components from templates, executing scaffolder tasks, publishing repositories and exposing task results.
-
Writing Backstage Software Templates Covers parameters, secret values, task steps and template structure.
-
Backstage permission framework Covers permissions that can protect templates, tasks and related platform actions.
-
Backstage Software Catalog Describes catalog entities, ownership metadata and the system model surfaced through Backstage.
-
Backstage TechDocs Covers documentation as code and publishing service documentation through the portal.
-
Principles of building an internal developer platform Covers product thinking, self-service, optional adoption, security-aligned golden paths and onboarding.
-
Preparing to build an internal developer platform Recommends starting with a focused golden path and reducing developer cognitive load.
-
Measuring internal developer-platform success Discusses delivery, reliability, developer experience and application-health outcomes.
-
DORA: Platform engineering Covers platform quality, feedback, developer experience and the relationship between platform adoption and delivery outcomes.
-
Terrakube documentation Official documentation for the Terrakube infrastructure automation platform.