- Features
- Pricing
- English
- français
- Deutsche
- Contact us
- Docs
- Login

Terraform and Kubernetes are powerful tools. They are also two of the most common sources of friction between application teams and the infrastructure they depend on.
When delivery slows down or incidents happen, it is tempting to frame the problem as a skills gap: developers do not understand infrastructure well enough. In practice, that framing misses the point.
The real issue is not a lack of ability. It is a mismatch between who these tools are designed for and who is often expected to use them. This gap between what developers are hired to do and what they are asked to manage creates a cognitive tax. It slows delivery, increases risk, and drains energy.
Why infrastructure tools drain developer time
Most application developers don’t want to worry about infrastructure. From a developer’s perspective, infrastructure should simply be: predictable, available, and consistent across environments. When it fades into the background, teams move faster. When it demands attention, it pulls focus away from product work, which then affects your customer’s experience.
Yet ask most developers where their time actually goes, and you'll hear the same answers:
None of these ships product value. Yet it demands focus, context switching, and constant re-learning.
Terraform and Kubernetes make this worse by requiring developers to think explicitly about infrastructure behavior. They expose concepts like resource lifecycles, dependency graphs, networking, permissions, and failure domains. None of these are inherently bad, but they assume a mental model that most application developers don't operate in day to day.
The difficulty isn't syntax. It's causality. Understanding what a configuration change does is not the same as understanding when it applies, where it propagates, or what else it might affect. Small changes can have non-obvious side effects, especially when the state is shared across environments or teams.
For someone whose primary mental model is application logic, requests, data flow, and business rules, this kind of reasoning is expensive. It requires context switching into an entirely different domain, often under time pressure.
Application developers rarely get time or training to build that depth. So they operate with partial understanding. That partial understanding leads to predictable outcomes:
Most outages caused this way are not due to carelessness. They come from tools that require infrastructure expertise but are used by people hired for application work.
For a deeper look at how Kubernetes complexity accumulates, see The hidden cost of “just using Kubernetes".
When application developers are pushed to work at the level of infrastructure primitives, a few predictable things happen.
Teams slow down, not because the work is harder, but because every change requires extra validation and second-guessing. Developers become cautious. Reviews focus on configuration risk instead of product intent. Small changes feel heavier than they should.
Over time, infrastructure knowledge concentrates in a few people. Others avoid touching it. Bus factors grow. Delivery becomes uneven.
Many real-world system outages don't come from reckless changes. Most often, they result from limited knowledge.
A developer makes a reasonable change based on local context. The configuration validates. The deployment succeeds. And yet, something downstream behaves unexpectedly — a permission boundary is crossed, a service is rescheduled, a resource is recreated instead of updated.
When developers are asked to manage infrastructure primitives, these failure patterns appear constantly:
From the outside, this can look like carelessness. From the inside, it's usually the result of subtle abstractions that leak.
The deeper problem is that developers are forced to think about too many things at once. Feature logic, infrastructure logic, deployment logic, and environment differences all compete for attention. Cognitive overload increases error rates. That is human, not technical.
This is why teams often respond to incidents by adding more rules, more reviews, or more process rather than addressing the underlying mismatch.
Some infrastructure concerns now feel outdated for application teams:
These tasks persist mostly out of habit. Modern platforms can handle them automatically, with guardrails instead of choices. A "boring" workflow is a good one: predictable, repeatable, and uneventful.
Removing the infrastructure burden doesn't mean ignoring infrastructure. It means shifting ownership.
Developers should own:
The platform should own:
When infrastructure noise is reduced, planning changes. Teams estimate features instead of deployment risk. Releases become smaller and more frequent.
Upsun eliminates the infrastructure burden for application developers. Instead of managing Terraform state and Kubernetes manifests, developers define their application using Upsun configuration files stored alongside their code.
Every Git branch automatically becomes a complete, isolated environment: a full clone of the application and its services, including configuration and data. Here is how Upsun addresses the specific pain points developers face:
The Upsun CLI fits directly into existing workflows. Commands like upsun push and upsun branch create environments and deploy changes in seconds. GitHub and GitLab integrations automatically spin up environments for pull requests and merge requests. When a branch is created, an environment is created; when the branch is merged, the environment is removed.
Perhaps most importantly, Upsun configuration stays stable over time. No syntax changes between versions that force rewrites or learning curve resets. Your infrastructure knowledge compounds rather than depreciates.
That shift, from managing primitives to building products, is what platforms like Upsun make possible.
Join our monthly newsletter
Compliant and validated