• Formerly Platform.sh
  • Contact us
  • Docs
  • Login
Watch a demoFree trial
Blog
Blog
BlogProductCase studiesNewsInsights
Blog

Why cloud primitives quietly drain developer time

developer workflowplatform engineeringinfrastructure automationpreview environments
12 February 2026
Greg Qualls
Greg Qualls
Director, Product Marketing
Share

Cloud platforms are built to make shipping software easier. Yet, before the first feature is written, many teams lose days, or entire sprints, assembling cloud primitives: CI pipelines, permissions, networking rules, runtime versions, environment wiring, the list goes on. This work is usually framed as “setup,” something to get out of the way before real development begins.

The problem is that it never actually goes away. What starts as a one-time effort quietly becomes a recurring tax on delivery speed, focus, and confidence.

The sprint before the sprint

Before a single line of product code gets written, most teams burn an entire sprint setting up infrastructure. This "Sprint 0", sometimes explicit, sometimes informal, consumes roughly ten days of full-team time on average: Jenkins files, CI/CD pipelines, networking rules, environment provisioning, before any product work can start.

This time rarely shows up in delivery metrics. It's treated as necessary overhead, not something to question or optimize.

What makes it especially costly is that the effort isn't additive. It doesn't make future work meaningfully easier. Instead, it establishes a baseline of configuration that must now be understood, maintained, and adjusted as the application evolves.

From that point on, every sprint carries hidden infrastructure work with it:

  • Fine-tuning configuration files eats hours each sprint
  • Requesting new environments means multiple tickets and 1-2 weeks of waiting for them to be spun up
  • Upgrading runtime versions can stretch into months of planning and work
  • Context switching between code and infrastructure kills productivity

None of these ships features.

Infrastructure work is never “done”

Cloud primitives create a specific kind of toil: work that feels temporary, but becomes permanent.

Build pipelines need tuning. Environment variables drift. A new dependency requires a runtime change. A staging environment behaves differently from production. A hotfix works in one place but not another.

None of these tasks is particularly complex in isolation. But they reappear frequently, often unexpectedly, and usually at the worst possible time: during a release, a demo, or an incident.

This is why infrastructure tasks disproportionately slow feature delivery. The cost isn’t just the time spent doing the work. It’s the interruption. Each task forces developers to context switch, reconstruct mental models, and re-establish confidence before they can return to product logic.

Over time, teams end up maintaining a parallel system of infrastructure knowledge that lives partly in configuration files and partly in people’s heads. That knowledge becomes fragile as teams grow, change, or rotate responsibilities.

The role mismatch problem

Terraform and Kubernetes are powerful tools built for infrastructure engineers, people whose job is to think about state management, declarative resource graphs, and reconciliation loops all day. Application developers have different priorities and different mental models. Kubernetes is a framework, not a platform. Asking developers to build the platform themselves comes at a high cost

The hardest part is not syntax. It is reasoning about impact. To use these tools safely, developers must understand:

  • Cloud provider behavior.
  • Dependency graphs.
  • Failure recovery.
  • State management.
  • Permission boundaries.

Partial understanding is dangerous. Many outages come from “almost right” changes:

  • A role that works in staging but not production.
  • A scaling rule that looks fine until traffic spikes.
  • A config copied from another service without full context.

What application developers actually need

The question is not whether infrastructure matters. It does. The question is who should be responsible for what:

  • Developers should specify: which runtime, which services, which environment variables.
  • Developers shouldn't specify: how those requirements get fulfilled at the cloud provider level.
  • Infrastructure should be: a dependency of the application, declared like any other dependency.

Application developers should not need to manually think about: how many instances to run or which IAM policy allows a simple service call, etc. These are platform concerns. Modern platforms should handle them automatically and transparently, with guardrails instead of choices. Guardrails reduce errors by removing decisions that do not add product value. 

The ideal workflow is almost boring. Write code. Push to Git. Get a working environment that matches production. Not debugging YAML indentation at 4 PM on a Friday.

When infrastructure becomes a constant tax

The common thread across these issues isn’t tooling choice. It’s how environments are constructed.

When environments are assembled from low-level primitives, every change becomes a bespoke decision. Every new service, branch, or configuration tweak adds another variable developers need to think about, reason about, and remember.

Over time, infrastructure stops being a foundation and becomes a constant tax on delivery. Teams spend more time maintaining the conditions for development than actually developing.

The teams that move faster aren’t necessarily using fewer tools or simpler stacks. They’re working with environments that behave predictably, are created the same way every time, and don’t require developers to reason about infrastructure mechanics just to ship code.

When environments are standardized, much of this work doesn’t disappear through automation alone. It disappears because it stops being a decision developers need to make in the first place.

And that’s where real developer time is quietly won back.

How Upsun eliminates the infrastructure burden

Upsun is built around a simple idea: infrastructure should follow your code, not the other way around. Instead of managing Terraform modules, Kubernetes manifests, and cloud provider consoles, you define everything in a single configuration file that lives in your Git repository.

Git-driven environments that remove drift and bottlenecks

Upsun ties infrastructure directly to Git. Every branch becomes a complete, isolated environment: database, services, and configuration are created automatically when you push and removed when you merge or delete.

This simple model eliminates problems that plague traditional setups:

  • No staging bottlenecks. Your branch, your environment. No waiting for someone else to finish testing.
  • No environment gaps. Every environment mirrors production because it's built from the same Git-tracked configuration.
  • No config drift. There's no long-lived state to manage or forget about. Environments are ephemeral by design.

Instant production clones with real data

When you branch an environment, Upsun creates a byte-level clone of everything: databases, files, services, storage, and configuration in minutes. Your preview environment isn't an approximation. It's production with a different URL.

This changes how teams work:

  • Test against real data, not mocked services or seed databases.
  • Reproduce data-dependent bugs instantly.
  • Validate migrations against production-scale data before merging.
  • Automatically sanitize sensitive data for safe testing.

Faster delivery loops with CLI and API workflows

One of the biggest slowdowns in cloud workflows is waiting. Waiting for pipelines, environments, approvals, or simply to see results. CLI and API-driven workflows reduce this friction. Actions that should take seconds often take hours because they depend on manual steps or UI flows.

With Upsun, developers can:

  • Spin up environments per branch from the terminal
  • Deploy from existing CI systems using API tokens
  • Automate environment cleanup and resource management
  • Test production-like setups early in development

Fast feedback changes behavior. Developers ship smaller changes, test more often, and take fewer risks because recovery is simple.

Managed services without the management

In traditional cloud setups, adding a database means configuring IAM roles, setting up security groups, creating VPC endpoints, and managing connection credentials. Every service multiplies the complexity.

Upsun makes  services declarative. Add PostgreSQL, MariaDB, Redis, Elasticsearch, MongoDB, RabbitMQ, Kafka, or any supported service to your configuration file, and Upsun provisions it automatically. No IAM policies. No networking rules. No connection strings to copy and paste: credentials are injected as environment variables at runtime.

Flexible scaling without the guesswork

Traffic doesn't arrive on schedule. Manual scaling requires predicting patterns and adjusting resources ahead of time, often leading to over-provisioning during quiet periods or scrambling during spikes.

Upsun scaling handles this automatically:

  • Horizontal autoscaling adds or removes app instances based on CPU and memory thresholds
  • Vertical scaling lets you adjust CPU, RAM, and disk per environment
  • Per-environment resources mean production can scale differently from development

Define your thresholds, and Upsun handles the rest.

Configuration stability

Terraform and Kubernetes configs require constant upkeep. Version upgrades break syntax. Deprecations force rewrites. Teams spend days updating infrastructure code that already works. Upsun takes a different approach: configuration stability is a design principle, not an afterthought.

Configuration files written years ago still deploy today. Platform upgrades don't introduce breaking changes. The YAML you write now will work the same way next year and the year after.

Migrating without rewriting everything

Migration fear is normal. Teams picture months of refactoring, rewritten pipelines, and broken deployments. The reality is simpler than it looks.

With Upsun, your application code stays the same. Your language, framework, and dependencies don't change. Your CI tools keep working. What changes are where infrastructure is defined, a single configuration file replacing scattered Terraform modules, and cloud console settings.

What to do next

If cloud primitives are already part of your daily workflow, the next step isn’t learning more tools. It’s noticing where time quietly leaks out of delivery: waiting on environments, re-tuning pipelines, second-guessing configuration, or avoiding changes that feel risky.

Teams that reduce this friction don’t eliminate infrastructure. They standardize how environments behave, so developers can focus on shipping code instead of managing conditions.

If you’re exploring how standardized, predictable environments fit into your workflow, start by looking at how your environments are created, reviewed, and reused today and where they force developers to make decisions they shouldn’t have to make anymore.

Stay updated

Subscribe to our monthly newsletter for the latest updates and news.

Your greatest work
is just on the horizon

Free trial
UpsunFormerly Platform.sh

Join our monthly newsletter

Compliant and validated

ISO/IEC 27001SOC 2 Type 2PCI L1HIPAATX-RAMP
© 2026 Upsun. All rights reserved.