Guides · Kubernetes & Delivery · kubernetes · gitops · platform-engineering
Kubernetes and Delivery for Startups: The Complete Guide
· 11 min read
A delivery platform is the supported path your engineers use to get code into production: how a service gets created, how it gets an environment, how it deploys, and how anyone knows it worked. Every company has one. The only question is whether it was designed or whether it accumulated.
This guide covers the version that suits a funded startup with 5-25 engineers — the paved road rather than the enterprise platform. Each section summarises a decision and links the deep-dive that works through it properly.
The short version, if you read nothing else: build in the order below, and don’t buy complexity before you have the pain it solves.
What is a delivery platform, and do you need one?
“Platform engineering” as an industry movement is largely a response to enterprise problems — hundreds of engineers, dozens of teams, and a DevOps function that became a ticket queue. Most of that literature is written for organisations twenty times your size, which is why it reads as overkill.
What survives the translation to a small team is the underlying idea: there should be one well-supported way to ship, and it should be maintained on purpose. Not an internal developer portal, not a self-service catalogue — a handful of repos, pipelines, and documented conventions that work the same way for every service.
The distinction between this and traditional DevOps, and when a startup should care, is the subject of platform engineering vs DevOps. The practical test: if a new engineer cannot deploy a change on their first week without someone walking them through it, you don’t have a paved road yet.
Do you need Kubernetes?
Not at first, and the honest answer for many teams is not yet.
A managed container service or a capable PaaS carries a startup a long way with a fraction of the operational surface. Kubernetes earns its place when you feel specific pain:
- Enough services that consistent networking, secrets, and service discovery become a real problem.
- Workloads a PaaS prices badly — long-running jobs, GPU work, anything bursty.
- Compliance or isolation requirements your PaaS cannot express.
- A need for portability that is genuine rather than theoretical.
If none of those is true, adopting Kubernetes buys you complexity you must operate without the benefit that justifies it. When it is true, the managed offering you pick matters less than most comparisons suggest — the meaningful differences for a small team are in defaults, upgrade cadence, and how much the control plane costs, which EKS vs GKE vs AKS for a 10-person team works through.
Pick the one your cloud already is. Cross-cloud Kubernetes portability is mostly a story teams tell themselves; the networking, IAM, and storage integrations are where the real coupling lives.
Infrastructure as code, first
This is the first thing to build, before the deploy path and long before policy, because everything after it assumes the platform is reproducible.
The rule that matters more than the tool: nothing important is created by hand in a console. A resource that exists only because someone clicked is a resource nobody can recreate during an incident, review in a pull request, or explain to an auditor.
On the tool itself, Terraform and OpenTofu remain compatible enough that the decision is mostly about licensing posture and which ecosystem you want to depend on. OpenTofu vs Terraform covers where they have actually diverged and whether a switch is worth it. For most startups this is a lower-stakes decision than it feels — either choice is defensible, and the cost of writing no IaC at all dwarfs the difference between them.
Two habits worth adopting from the start: keep state remote and locked, and scope credentials so that a plan cannot become an apply by accident. If AI tooling is writing any of your infrastructure code, both matter more — see can AI agents safely run Terraform?.
GitOps: the deployment path
Once infrastructure is code, deployment should be too. GitOps means the desired state of your cluster lives in Git and a controller continuously reconciles reality to match it. The practical benefits for a small team are less abstract than the marketing suggests:
- The cluster’s state is reviewable. What is running is a file someone approved, not a command someone ran.
- Rollback is a revert, which is a thing every engineer already knows how to do.
- Drift gets corrected rather than discovered during an incident.
- Nobody needs cluster credentials to deploy, which removes a whole class of access management.
That last point is the one small teams undervalue. Handing out kubectl access to everyone who needs to ship is a common shortcut that becomes an audit finding later. GitOps makes the pull request the interface.
Argo CD and Flux both do this well and the choice is genuinely close — Argo CD vs Flux covers the differences that actually show up in operation. The short version: Argo CD’s UI is a real advantage for teams where not everyone is deep in Kubernetes.
Environments engineers can actually get
The shared staging server is the most reliably wasteful thing in small-team delivery. One environment, a queue to use it, and a permanent argument about whose change broke it. The cost is not the server — it is the serialisation of everyone’s work behind a shared resource.
Per-pull-request preview environments replace that: every PR gets its own namespace, its own database seed, and a URL, torn down automatically when the PR closes. Reviewers click a link instead of pulling a branch. QA tests the actual change in isolation. Preview environments vs staging covers the pipeline, the database seeding problem, and the TTL cleanup that stops this becoming a cost story.
This is usually the single change with the most visible effect on how a team feels, because it removes a daily source of friction rather than a rare one.
Shipping without downtime
Once deploys are frequent, the deploy itself has to stop being an event. The mechanics that get you there are well understood and mostly about database changes rather than application rollout:
- Expand and contract. Add the new column, backfill, switch reads, then drop the old one — across separate deploys. Never a rename in one step.
- Decouple migrations from application start. A migration that runs on boot means a slow migration is an outage.
- Health probes that tell the truth, so a pod that cannot serve is not sent traffic.
- Metrics that decide canaries, rather than someone watching a dashboard and deciding it looks fine.
Zero-downtime deploys with database migrations is the playbook. The recurring lesson is that zero-downtime is a property of the whole pipeline, not a deployment strategy you switch on.
How do you know it worked?
A delivery platform that can ship but cannot tell you whether the ship worked is half a platform. This is the section teams most often defer, and it is the one that determines how long your incidents last.
Sized for a small team, the useful floor is smaller than the observability industry suggests:
- The four golden signals per service — latency, traffic, errors, saturation. If you have these on one dashboard per service, you can answer “is it broken and since when” without reading code.
- Centralised, searchable logs with enough retention to investigate. Enough is usually 30 days; auditors often want longer, which is worth checking before you set it.
- Alerts that a human should act on, and nothing else. An alert nobody acts on is training your team to ignore alerts. If it fires and the answer is “yeah, that happens”, either fix the cause or delete the alert.
- Deploy markers on your dashboards. Most incidents correlate with a change. Being able to see deploys on the same timeline as errors turns a twenty-minute investigation into a ten-second one.
Tracing is genuinely valuable once you have enough services that “which hop is slow” is a real question, and premature before that. The same applies to SLOs: a written objective is useful when it changes a decision — whether to ship or to stabilise — and decorative when it does not.
The connective tissue matters more than any tool choice here. A metric nobody looks at, a log nobody can search, and an alert nobody acts on are all the same amount of use.
Secrets and access
Two rules carry most of the weight, and both belong in the platform rather than in each service.
Secrets are injected at runtime, never committed. Your cloud’s secret manager or a dedicated store, pulled at start-up or mounted by the platform. The test is whether a leaked repository leaks credentials — if it does, this is not done. When AI coding tools are in the loop this matters more, because agentic tools open arbitrary files; how to keep secrets out of AI coding tools covers the layers.
Humans get access through a reviewable path. GitOps already removes the need for routine cluster credentials. What remains is break-glass access for incidents, which should exist, be scoped, and be logged — not be the same permanent admin role everyone uses daily. This is also the control auditors ask about first, so doing it properly once saves doing it twice.
Policy as code, once you know the rules
This comes late deliberately. Policy engines let you enforce rules across the cluster automatically — no privileged containers, resources must carry an owner label, images must come from your registry, every workload sets limits.
That is genuinely valuable, and it is also the single easiest thing to build too early. Written before you have a working deploy path, policy produces rules nobody can satisfy and a platform team that says no for a living. Written after, it encodes the standards you already agreed.
Kyverno and OPA Gatekeeper take different approaches — Kubernetes-native YAML versus the more general Rego language — and Kyverno vs OPA Gatekeeper covers which suits a startup. For most small teams, start with a handful of rules in audit mode, see what fires, and only then enforce.
Policy is also where compliance work stops being a spreadsheet exercise: a control you can demonstrate as an enforced policy is far easier to evidence than one you assert. If SOC 2 is on your horizon, our SOC 2 infrastructure checklist maps which controls this covers.
Reliability, running alongside all of it
Reliability is not a phase at the end. It runs in parallel, and the ordering matters as much as it does everywhere else: test a restore before you design a failover, spread across availability zones before you consider a second region, and make the application degrade rather than fail before you buy more infrastructure.
The pressure to over-build here is real, particularly in a year when cloud outages have been in the news. Does your startup actually need multi-region? works through what a regional outage really costs you, the cheaper rungs that come first, and the three cases where a second region is genuinely the answer.
The order to build this in
- Infrastructure as code. Nothing important created by hand.
- A deployment path with automated checks and a human gate on production.
- Environments on demand, replacing shared staging.
- Zero-downtime deploy mechanics, once you deploy often enough for it to matter.
- Policy as code, encoding standards you already follow.
- Reliability work throughout, starting with a tested restore.
Kubernetes slots in wherever your workloads justify it — often between steps one and two, sometimes never.
The failure mode to avoid is building this list in reverse: a policy engine and a service catalogue on top of infrastructure that was clicked together in a console. That produces impressive architecture diagrams and a platform nobody can recover.
What it costs, and who runs it
Built properly for a team of this size, the paved road is a few weeks of focused work, not a quarter. The recurring cost is the part teams underestimate: cluster upgrades, dependency bumps, certificate rotations, cost review, and the quarterly check that backups still restore.
That work is real but it is rarely a full-time job at 5-25 engineers — which is why it usually lands on whichever senior engineer is least able to say no, and why it silently stops happening when that person is busy. Most teams cover it with part-time senior ownership until around 25 engineers, when a dedicated hire starts to pay for itself. Our post on when to hire your first DevOps engineer covers the trigger signals.
If you want this built in your accounts rather than described, that is what our Cloud Launch package is: the paved road above, in your repos, in two to three weeks, with the handover written down. If you already have a platform and want to know which parts of this list are missing, the two-minute health check is the fastest way to find out, and our infrastructure audit is the thorough version.
Common questions
Does a startup need Kubernetes?
Not at first. A managed container service or a good PaaS carries most teams a long way, and the right time to move is when you feel specific pain - many services needing consistent networking and secrets, workloads a PaaS prices badly, or compliance requirements a platform cannot express. Adopting Kubernetes before that pain arrives buys complexity you have to operate without the benefit that justifies it.
What order should a startup build its delivery platform in?
Infrastructure as code first, so the platform is reproducible. Then a deployment path with automated checks. Then environments engineers can get on demand. Then policy as code, once you know which rules matter. Reliability work runs alongside throughout. Building policy before you have a deployment path produces rules nobody can satisfy.
What is a paved road in platform engineering?
A supported default path for shipping software - a way to create a service, get an environment, deploy, and observe it that the platform team maintains. Teams may leave the road, but the road is well kept, so most choose it. For a small startup the paved road is a handful of well-documented repos and pipelines, not an internal developer portal.
Who runs the platform at a 10-person startup?
Usually nobody full-time, which is the honest problem. The work is real but rarely 40 hours a week at that size: IaC, the deploy path, cluster upgrades, cost review, and the quarterly check that backups still restore. Most teams cover it with a senior engineer part-time or fractional help until roughly 25 engineers, when a dedicated hire starts to pay for itself.
Newsletter
One practical DevOps guide a week
Real numbers, honest trade-offs, no vendor fog — same as everything here. Unsubscribe anytime.