DevOps asked every team to own production. Platform engineering answers with golden paths and self-service. What changed for backend teams on AWS and GCP, and how infrastructure from code shrinks the custom platform surface.
DevOps told product engineers to own what they ship, including how it runs in production, and that ownership is still the right idea, but in practice it meant every backend team learning Terraform modules, IAM policies, CI deploy jobs and observability defaults on top of the feature work.
Platform engineering is the response most orgs land on once that cost repeats across teams: a small group builds golden paths and self-service so shipping a service stops being a private infrastructure project. For backends on AWS or GCP, the largest custom surface is usually application infrastructure, and that is where infrastructure from code changes the staffing math.
SRE sits beside both: reliability, error budgets and toil reduction. Platform teams often absorb SRE-style work for the platform itself. The defining output of platform engineering remains a product other engineers use, which is why CNCF and industry surveys treat it as a product discipline rather than a rebrand of ops tickets.
DevOps collapsed the handoff between "write the code" and "run the code." For a single service that was liberating. For a backend estate with Postgres, queues, object storage, cron, secrets and several environments, the same ownership model meant every team maintained its own path to production.
The pain is concrete: duplicate Terraform roots per service, deploy credentials scattered through CI, inconsistent security defaults, and slow onboarding when a developer joins a team that provisioned differently. DevOps did not invent that sprawl. It removed the ops gate without always replacing it with a shared path.
A platform team treats the path to production as a product. Product engineers are the users. The usual building blocks are self-service provisioning, standard pipelines, environment management, and golden paths for standing up a service, adding a database, or shipping to production.
Golden paths are paved rather than mandatory: teams follow the supported route by default and step off when they have a reason. The platform team measures adoption, gathers feedback and prioritizes like a product team, because a platform nobody uses is a failed product. For a deeper definition of the artifact, see what is an internal developer platform and how to build an internal developer platform.
Even with strong defaults, org-wide work remains: shared networking, identity, compliance controls, multi-team service catalogs, cost policy and the odd non-standard path. Platform engineering does not disappear because application infrastructure gets easier. The staffing question is how much of the first-year platform roadmap is repeated scaffolding for databases, queues, cron and deploy plumbing that every backend needs the same way.
Encore provisions and deploys infrastructure from code into your own AWS or GCP account. For backend teams, that is the application-infrastructure golden path: declare the resources next to the handlers, and Encore provisions them with rolling deploys behind load balancer health checks on AWS, as described in the AWS infrastructure docs.

Run in your terminal to get started locally.
A service that needs Postgres and an hourly sync declares both in TypeScript:
// inventory/inventory.ts
import { api } from "encore.dev/api";
import { CronJob } from "encore.dev/cron";
import { SQLDatabase } from "encore.dev/storage/sqldb";
const db = new SQLDatabase("inventory", { migrations: "./migrations" });
export const stock = api(
{ expose: true, method: "GET", path: "/stock/:sku" },
async ({ sku }: { sku: string }): Promise<{ sku: string; quantity: number }> => {
const row = await db.queryRow<{ quantity: number }>`
SELECT quantity FROM stock WHERE sku = ${sku}
`;
return { sku, quantity: row?.quantity ?? 0 };
},
);
export const syncSuppliers = api({}, async (): Promise<void> => {
// Pull supplier levels and update stock.
});
const _ = new CronJob("sync-suppliers", {
title: "Sync supplier stock",
every: "1h",
endpoint: syncSuppliers,
});
encore run starts the service with a local Postgres and applies migrations. Cron jobs run in cloud environments, not locally. On deploy, the database becomes RDS or Cloud SQL, the cron job is scheduled by Encore, and the service runs in your account. Link the app to GitHub and set Branch Push on each environment. An AI coding agent adding a table or a cron job writes it in the same change as the handler, runs it under encore run, and leaves the platform team fewer one-off Terraform modules to review.
Fintech backends such as Pave Bank use Encore this way: application infrastructure stays in the app, and the custom platform work, such as portals and policy, sits above it.
Best fit: Backend teams on AWS or GCP that want DevOps ownership with a paved application-infrastructure path, so a platform team can spend time on org-wide concerns instead of rebuilding service scaffolding.
Stay in a DevOps culture without a dedicated platform team when one or two teams own a small backend estate and can keep shared defaults in a few repos. Staff platform engineering when several teams diverge on provisioning and deploy paths, and measure the platform by adoption. Use Encore when the expensive custom surface is databases, queues, object storage, cron, secrets and environments for TypeScript or Go backends in your own cloud, and keep a broader portal or policy layer for the rest of the org if you need it.
DevOps is a culture and set of practices that ask development and operations to share ownership of software in production. Platform engineering is a discipline that builds an internal developer platform so product teams can ship through golden paths without each team reinventing pipelines, provisioning and cloud defaults.
No. Platform engineering is one way to practice DevOps at scale. The culture still matters; the platform is the product that makes shared ownership workable when several product groups share a deep cloud stack.
When several product teams maintain divergent Terraform roots, CI deploy jobs and IAM patterns, and developers spend meaningful time on provisioning instead of product. Below that scale, paved defaults from tools you already use often cover the same ground without a dedicated platform org.
Declare databases, queues, object storage, cron jobs and secrets in TypeScript or Go. Encore provisions them into your AWS or GCP account, deploys on git push, and gives you environments and preview environments. That covers much of the application-infrastructure golden path so a platform team can focus on org-wide concerns instead of rebuilding the same service scaffolding.
Deploy to your cloud on AWS and Google Cloud
without managing infrastructure
Encore lets developers and agents define application infrastructure directly in code, then automatically provisions it from local development to production in your AWS or GCP account.