.png)
Self-service workflows remove the initial friction of environment creation, but they do not address ownership, lifecycle, cost, or security over time. Without real environment management, environments drift, sprawl, and eventually recreate the same bottlenecks teams tried to eliminate. Scaling DevOps requires treating environments as managed systems, not one-time workflow outputs.
Self-service has become the default answer in platform engineering.
Need a new service? Click a button. Need infrastructure? Run a workflow. Need an environment? Fill out a form. Internal Developer Portals (IDPs) promise a simple trade: fewer tickets, faster teams, happier developers. And for a while, it works.
Developers get what they need without waiting. Platform teams see ticket volume drop. Everyone feels like they’re moving faster.
But then something strange happens. A few months later, teams are still clicking buttons, yet platform engineers are back to answering questions. Environments are piling up. Costs are creeping up. Security reviews take longer. And developers start opening tickets again.
Not because self-service is bad, but because self-service workflows were asked to solve a bigger problem than they were designed for.
Here’s the uncomfortable truth many teams run into: self-service workflows are not the same thing as environment management.
The rise of self-service actions
Most IDPs now come with actions or workflows. They let developers trigger something real: run a script, kick off a pipeline, provision a cluster, or create an environment. For platform teams, this is a big improvement over the old model where every request becomes a ticket.
Self-service actions are helpful because they remove the first bottleneck: the wait. Instead of asking “Can someone please set up my environment,” a developer can request it directly and get an answer right away. This is why so many organizations start their environment journey with workflows. And for Day 1, it feels like the problem is solved.
Day 1 feels great. Day 2 is where reality shows up
Day 1 is the moment an environment is created. Day 2 is everything that happens after.
In the first few weeks, everything feels under control. Environments are created only when someone needs them, and people still remember why each one exists. Costs stay within expectations, and security teams don’t have much reason to pay attention. From the outside, it looks like the platform team delivered exactly what the business wanted.
But environments don’t stop being work after they’re created. They get used, tweaked, shared, copied, and forgotten. Requirements change, teams change, and the environment that was “temporary” turns into something that lives for months.
That’s when Day 2 arrives. It doesn’t arrive like a deadline, it arrives like a question:
- “Can we scale this up for testing?”
- “Is it safe to change this config?”
- “Who owns this environment?”
- “Can I delete it?”
- “Why is this still running?”
These are not creation problems, but they are lifecycle problems.
The hidden blind spot: workflows don’t remember
A workflow is good at doing a task. It runs, it finishes, and it moves on. If you ask it to create an environment, it will do exactly that.
What it usually won’t do is keep the environment understandable over time.
Once the workflow finishes, most systems lose the thread. The environment exists, but the platform no longer has clear answers to basic questions like: Who is responsible for it? What services are supposed to be running there? What rules should apply to it? How long should it live? What does “healthy” even mean?
To the workflow, the environment is output. To the company, it’s a living thing that needs ownership and guardrails.
That gap doesn’t feel dangerous at first, but it becomes dangerous when people start making changes.
Environments quietly become tickets again
Most teams don’t wake up one morning and decide to bring tickets back, but tickets come back slowly.
- First it’s a Slack message: “Hey, can you take a look at this environment?”
- Then it’s a “quick question” in a thread that never ends.
- Next it’s a meeting to figure out what’s safe.
- Then it’s a ticket, because nobody wants to be the person who breaks something important.
Self-service workflows reduced the first wave of tickets: “Please create this.” But if the system doesn’t manage the lifecycle, you get a second wave of tickets: “Please fix this,” “Please change this,” “Please clean this up,” and “Please tell me what this even is.”
The workflow solved the request, but it didn’t solve the lifecycle.
Ownership gets blurry, and blurry ownership creates slow teams
In ticket-based models, ownership is obvious: the platform team owns environments because they create them and maintain them, and self-service changes that. The developer clicks the button, but that does not automatically create real ownership.
Does the developer now own patching? Security updates? Cost controls? Deleting unused infrastructure? If they leave the company, who owns the environment then? If another team depends on that environment, who approves changes?
When ownership is unclear, most teams do the safest thing: they stop making changes unless someone “official” approves it. That “official” person is usually the platform team. That’s how the platform team becomes the bottleneck again, even though self-service still exists.
Drift: the problem that starts as “just this once”
Once an environment is running, small changes start happening. Someone adjusts a setting to debug a flaky test, or changes the replica count because a load test is failing. Someone adds a new dependency because the service now needs a queue or a bucket.
Each change might be reasonable at the moment, but the trouble is that the changes are often made in different places by different people, and they aren’t always captured back into the source of truth.
Over time, environments that started from the same template begin to behave differently. They look similar, but they aren’t identical. Test results become harder to trust, release confidence drops, and developers start saying the phrase every platform team hates: “It worked in my environment.”
This isn’t a people problem. It’s what happens when environments exist without a managed lifecycle.
Cost and security fail quietly
When environments drift and ownership is unclear, cost and security issues usually show up as slow-moving problems.
Costs creep up because environments live longer than planned, or because nobody knows which ones are safe to shut down. Security risk increases because exceptions become normal, and normal changes happen outside the guardrails.
Eventually, finance asks why cloud spend is rising. Security asks what controls apply to ephemeral environments. Auditors ask who approved access, what was created, and why it still exists.
If environments were created by one-off actions, answering these questions turns into archaeology. Platform teams dig through pipeline runs, logs, and institutional knowledge to reconstruct history.
That work is exhausting, and it doesn’t scale.
Why platform engineers feel it first
Platform teams usually experience this as a painful pattern:
- Self-service reduces tickets for creation.
- Environment sprawl and exceptions increase.
- Teams lose clarity on ownership and rules.
- Tickets come back, but now about changes, cleanup, and risk.
The platform team ends up doing more “cleanup” work than “platform” work. Instead of building paved roads, they become the group that unblocks everyone when the road is unclear.
This is why so many teams get frustrated with “self-service” as a long-term strategy. The idea is right, but the scope is too small.
The missing shift: creation is a moment, management is a system
Here’s the simple reframing: creating an environment is a moment; managing an environment is a system.
Self-service workflows are built for moments. They trigger actions, they complete tasks, and they help you start.
Environment management is built for systems. It keeps environments understandable, safe, and governed over time. That requires a few things workflows usually don’t provide on their own:
- A clear model of what an environment is (not just “resources that exist”)
- Ownership and identity tied to teams and services
- Guardrails that apply after creation, not just before
- A lifecycle that includes update, pause, resume, and teardown, without creating a brand-new bespoke workflow for every case
- Visibility that makes it easy to answer “what is this?” without digging
If self-service is the “button,” environment management is the “rules of the building.” It decides who can press the button, what happens when they do, what’s allowed to change later, and when the system should shut things down safely.
Why adding “more workflows” doesn’t fix it
When teams notice Day 2 problems, their first instinct is to add more workflows.
- A workflow to update config.
- A workflow to resize infra.
- A workflow to clean up old environments.
- A workflow to enforce approvals.
This can help in the short term, but it usually creates a new problem: a growing pile of scripts and pipelines that are hard to maintain and easy to misuse. You end up with automation that is powerful but fragile, because the system still doesn’t understand environments as living entities with lifecycle rules.
You can’t workflow your way out of missing context.
The question IDP evaluators should ask
If you’re evaluating an IDP, the key question isn’t “Can developers create environments with self-service?” Most tools can.
The real question is: What happens after the environment exists?
- Can you manage change without creating chaos?
- Can you shut things down safely without fear?
- Can you prove who owns what?
- Can you keep costs and security under control without becoming a ticket machine again?
If the answer is “we’ll build another workflow for that,” you’re looking at self-service actions, not environment management.
What “self-service” should mean
Self-service isn’t the problem, because it’s part of the solution. Platform teams should absolutely make it easy for developers to get environments quickly. But speed on its own doesn’t scale. Without ownership, lifecycle, and guardrails, fast creation just creates future work.
Self-service workflows help teams start environments. Environment management helps teams live with them.
And once environments exist, another question quickly follows: how do you deliver to them safely and repeatedly?
That’s where most teams turn to their CD pipelines, and where the limits of pipeline-only thinking start to show. In the next post, we’ll look at how CD evolved from running pipelines to powering platforms, and why modern delivery depends on environment management to work at scale.
