skip to content

When would you deliberately choose NOT to containerize and orchestrate a microservice under something like Kubernetes, even though the rest of your system uses that model?

level: principalimportance: should knowfreq 40%

answer

  1. orchestrator overhead vs team size
  2. crossover point, not day-one default
  3. specialized hardware / kernel access
  4. latency-sensitive scheduler placement
  5. legacy stateful host assumptions

basics

~20 s

When the overhead of running an orchestrator (people, tooling, complexity) costs more than what you get from it — e.g., a tiny team, very few services, or a workload that doesn't fit the container/orchestrator model well.

solid answer

~40 s

Containers and an orchestrator earn their keep once you have enough independently-scaling, independently-deployed services that manual management becomes the bottleneck — but that crossover isn't at service #1. A two-person team running three services is usually better served by a simpler platform (a managed container-app service, or a couple of VMs with a deploy script) than by taking on a full cluster's operational surface: upgrades, RBAC, networking, ingress, autoscaling policy, and on-call expertise. Certain workloads also fit poorly: services needing specialized hardware or kernel-level access, ultra-low-latency workloads sensitive to scheduler placement, or stateful legacy systems assuming a fixed, persistent host that would need a rewrite to be container-friendly. In these cases you'd keep that one service on dedicated infrastructure while the rest of the system stays orchestrated.

go deeper

for a junior

Should be able to say 'not every service needs Kubernetes' with at least one concrete reason.

for a middle

Should mention team size/operational overhead as a factor, even if reasoning is high-level.

for a senior

Should give at least two concrete scenarios (small scale, specialized workload) with the actual cost being avoided.

for a principal

Should reason about this as an evolving architectural decision — the right boundary shifts as the system grows, and forcing premature uniformity is itself a cost worth naming.

## The orchestrator's fixed cost Adopting a container orchestrator like Kubernetes is itself an architectural decision with a real, ongoing cost, and treating it as the automatic default for every microservice — rather than a tool that earns its place once certain conditions are met — is a common and expensive mistake. The orchestrator's job is to solve problems that only exist at a certain scale and shape: - **scheduling many containers across many nodes efficiently**, - **handling node failures** by rescheduling affected pods elsewhere, - **running rolling updates and rollbacks safely**, - **providing per-service autoscaling and service discovery**. All of that machinery — cluster provisioning, version upgrades, RBAC and network policy configuration, ingress and load-balancer setup, monitoring the control plane itself — has to be built and operated by someone, and that operational surface is roughly constant whether you're running three services or three hundred. That means the fixed cost is paid in full even for a small system, while the benefit scales with the number of services and the frequency of independent releases, so there's a real **crossover point** below which the orchestrator's cost exceeds what it returns. ## The small-team case A small team is the clearest case. A two- or three-person team running three or four services doesn't need automated rescheduling across a multi-node cluster, a service mesh, or fine-grained per-service autoscaling policy — it needs its handful of services to run reliably and deploy without drama. For that, a managed container-app platform (a serverless container runtime, or a simpler PaaS that runs a container per service without exposing a full orchestrator's configuration surface) delivers most of containerization's actual benefit — isolated dependencies, an immutable versioned artifact, straightforward rollback — without the team having to learn or staff for cluster operations. The team can always migrate to a full orchestrator later, once enough services and enough independent-release frequency exist that manual or platform-abstracted management becomes the actual bottleneck; adopting Kubernetes on day one for three services front-loads a cost that won't pay for itself for a long time, if ever. ## Workloads that fit badly Certain workloads are also a poor structural fit regardless of team size. 1. **Specialized hardware and kernel access.** Services needing direct access to specialized hardware, particular kernel modules, or hardware-level device access that the orchestrator's abstraction layer doesn't cleanly expose are often easier to run on dedicated infrastructure than to fight the container/orchestrator model for. 2. **Extremely latency-sensitive workloads** are a related case: a general-purpose scheduler optimizes for efficient bin-packing of many workloads across a cluster, not for guaranteeing one specific service's node placement, network path, or CPU cache locality, so tail-latency-critical services sometimes get more predictable performance on dedicated, hand-tuned hosts than they would sharing a cluster's scheduler with everything else. 3. **Legacy stateful systems** built around assumptions of a fixed, persistent host — local disk state the application expects to survive indefinitely, manual operational runbooks tied to a specific machine — often require substantial re-architecture to become container-friendly (externalizing state, making the process safely restartable anywhere), and that rework can cost more than the uniformity gained by having 'everything in the cluster.' ## The cost of staying off the orchestrator The trade-off runs both directions, and it's worth naming the cost of staying off the orchestrator too: a service left outside the cluster doesn't get the orchestrator's automatic rescheduling on node failure, its integrated service discovery, or its uniform deployment tooling, so someone has to maintain that machinery manually or via separate tooling for that one service indefinitely, and it becomes an exception every new engineer has to learn about. The failure mode of getting this decision wrong shows up in both directions: - adopting Kubernetes **too early** leaves a small team spending a disproportionate fraction of its capacity on cluster operations instead of product work, - while **refusing to containerize** a service that has genuinely outgrown manual management leaves that service as a recurring source of deploy friction and inconsistent operational practice as the rest of the system moves on without it. ## How the decision actually gets made A concrete real-world pattern many companies actually followed: a startup runs its first handful of services on a simple platform (a few VMs, or a managed container-app service) through its early growth, and only migrates to Kubernetes once it's running enough services, with high enough deploy frequency and scaling variance, that the platform's abstractions started constraining what the team needed to do — the decision to adopt full orchestration was made in response to demonstrated need, not made speculatively on day one because 'that's what microservices use.'

  • If a team has only three services, what's a reasonable middle ground between raw VMs and full Kubernetes?
    A managed container platform (like a serverless container runtime or a simpler PaaS) gives most of the packaging/isolation benefits of containers with far less operational surface than running and upgrading a Kubernetes cluster. It defers the decision to adopt full orchestration until the number of services or the scaling/deployment needs actually justify it.
  • Why might an extremely latency-sensitive service be a poor fit for a general-purpose orchestrator, even one running containers well for everything else?
    General schedulers optimize for bin-packing and resource utilization across the whole cluster, not for guaranteeing a specific service's placement, network path, or CPU cache locality, so tail latency can be harder to control than on dedicated, hand-tuned hardware. Some teams pull just that one service out onto dedicated infrastructure while leaving everything else orchestrated normally.
  • Is 'we already use Kubernetes for everything else' a good reason to containerize a new stateful legacy component too?
    Not by itself — consistency has value, but if the legacy component assumes a fixed host identity, local disk state, or manual operational procedures, forcing it into the orchestrator can cost more in rework and risk than it saves in uniformity. It's reasonable to leave it out and integrate it at the network boundary instead.

Like not renting a large shipping fleet and freight-yard just to move a few boxes across town — the coordination machinery only pays for itself once you have enough boxes moving often enough that manual handling becomes the actual bottleneck.

saying these in an interview costs you the question

  • Treats Kubernetes as a mandatory default for any microservice
  • Can't name any workload or team-size scenario where orchestration overhead isn't worth it
  • Assumes all legacy/stateful services trivially containerize
  • No mention of the operational cost (cluster ops, RBAC, upgrades) as a real trade-off

context