The New Cloud Is Not a Place, It Is a Habit of Thought
Hatched by Kelvin
Jul 26, 2026
9 min read
3 views
86%
What if your app already contains its infrastructure?
Most people still think of cloud architecture as a separate layer, something you describe in YAML, provision through a console, and then hope matches the code you wrote. That mental model is so familiar that it barely feels like a model anymore. But what if the real breakthrough is not faster deployment or cheaper hosting, but a deeper collapse of the boundary between application logic and infrastructure logic?
That is the provocative shift here: the cloud stops being a destination and becomes an executable property of the program itself. Instead of saying, “Here is my app, and here is the environment it should run in,” you write code that already knows how to become a service, how to expose itself publicly or privately, and how to connect to persistence. The infrastructure does not disappear. It becomes a library call.
This changes more than tooling. It changes the unit of thinking. A service is no longer something you build and then deploy. It is something you declare inside the same language and runtime that define business behavior. That unification sounds small until you realize how many engineering problems are really coordination problems between code and configuration.
The hidden cost of separation
Traditional cloud setups impose a split brain. Application code lives in one world, infrastructure definitions in another, and the human operator becomes the translator. You write Flask handlers in Python, API wiring in YAML, container rules in a Dockerfile, service discovery somewhere else, Redis configuration somewhere else again. Each layer is sensible on its own, but together they create a recurring tax: every change must be kept consistent across multiple representations of the same system.
That tax shows up everywhere:
- Local development behaves differently from production.
- New services require duplicate setup logic.
- Internal networking is hard to test because it exists only after deployment.
- State management drifts from code, because the data plane and the app plane are treated as separate worlds.
The painful irony is that the more microservices you adopt, the more you need a model that reduces cognitive fragmentation. Otherwise every small service becomes a miniature integration project. You are not just building software, you are continuously reconciling how software, networking, storage, and deployment are supposed to fit together.
The real complexity of cloud systems is often not in scale, but in translation.
The interesting idea here is to remove some of that translation by making cloud behavior a first class part of the application itself. A service is declared where the route handlers live. An internal service is declared where its request logic lives. Redis is accessed where the code needs it, not through a detached provision-and-wire ceremony.
That sounds like convenience. In practice, it is a new architecture for thought.
A useful mental model: the cloud as a programmable fabric
The most revealing way to understand this approach is to stop thinking in terms of infrastructure and start thinking in terms of capabilities. A capability is a thing the application can ask for at runtime, such as public exposure, internal routing, or persistent key value storage. Once you frame cloud features as capabilities, the architecture becomes a composition problem rather than a deployment puzzle.
Here is the important distinction:
- In the old model, infrastructure is declared outside the app and attached later.
- In the new model, infrastructure is invoked from inside the app and bound by the runtime.
That difference is subtle but profound. It means the application is no longer a passive artifact waiting to be interpreted by external configuration. It is an active participant in shaping its own operational environment. The code does not merely describe logic, it describes topology.
Think of it like this: older cloud systems are like filling out a shipping label for a package you have already wrapped. The package contents and the logistics are separate concerns. This model is more like embedding navigation instructions directly into the object itself. The object knows whether it should be delivered publicly, kept internal, or stored until later. That is not just cleaner, it makes the system more legible to the person reading the code.
This is especially powerful because it turns local development into a rehearsal for deployment, not a simulation that may or may not match reality. If the same application code can run locally and in the cloud without changing its shape, then the gap between your laptop and production shrinks dramatically. That is a genuine operational advantage, but it is also an epistemic one: you can trust what you learned locally more than you usually can.
Why internal services change the game
The real test of any cloud model is not whether it can host a hello world endpoint. It is whether it can express the internal structure of a real system without forcing you into a maze of extra files and special cases. That is where internal services matter.
A public service is easy to understand. It listens for external traffic. The harder problem is the service that should exist, should be reachable, and should remain invisible to the outside world. That kind of service is essential in real systems because not every component deserves public exposure. User lookup, billing logic, recommendation engines, admin functions, and caching layers often need network accessibility without public access.
When internal services become a first class primitive, the architecture gets cleaner in a surprising way. The service boundary is no longer just about code separation, it is about exposure policy. That means you can model a system the way you actually want it to behave:
- A public Python service receives traffic.
- It forwards a subset of requests to a private Go service.
- The Go service reads from Redis.
- The response flows back without exposing the internal machinery to the internet.
That is a real systems pattern, not a toy example. And notice what happened: the system became more modular without becoming more ceremonious. You did not need a separate orchestration language to explain that one service is front facing and the other is internal. The code itself expresses the trust boundary.
This is where the deeper tension emerges. Microservices promised modularity, but often delivered sprawl. The missing ingredient was not smaller services. It was a better way to represent service relationships. A cloud platform that lets application code declare both public and private roles does something important: it makes modularity operational instead of aspirational.
Good architecture is not just about splitting systems apart. It is about making the seams visible, enforceable, and easy to reason about.
State is the real boundary, not deployment
The most interesting part of this model is not the services. It is the storage layer. Once Redis enters the picture, the conversation moves from routing to memory, and that is where many cloud abstractions become either genuinely useful or merely decorative.
State is where local and cloud environments tend to diverge most painfully. You can make request handling portable. You can make containers portable. But data is where hidden coupling lives. If you need a local database with one set of credentials, a cloud database with another set, and several config files to switch between them, your architecture is still pretending that deployment context is separate from application logic.
By making persistence available as a capability inside the same program, the system stops treating state as an external ceremony. The application asks for a Redis instance by name. The runtime supplies the connection details. The code that reads a user record does not care whether it is running locally or in the cloud. That means your real problem becomes data shape and data ownership, not connection plumbing.
There is also a second, often overlooked effect: data can be managed through the same operational path as code. If you can tunnel into cloud Redis from your local environment, you reduce the distance between development and operational truth. You are no longer guessing whether the cloud state is set up correctly. You can inspect it, mutate it, and verify behavior against the same application code that will serve users.
This is a powerful reframing. In many systems, state is the source of truth but not the source of understanding. Here, the runtime makes state visible enough to keep understanding close to truth.
A synthesis: the best cloud platforms reduce translation, not just toil
The deeper lesson is not “YAML bad, SDK good.” That would be too shallow. The real issue is translation. Every time you force developers to express the same system in multiple dialects, you introduce drift, duplication, and uncertainty. A cloud platform becomes compelling when it reduces the number of places where the same idea has to be restated.
You can see this through three kinds of translation that disappear:
- Application to infrastructure: service exposure is declared in code.
- Public to private topology: internal versus external access is encoded in the same API.
- Local to cloud environment: the same runtime model follows the app across contexts.
This is why the combination of language-specific SDKs, internal services, and managed Redis matters more than any single feature. Together they create a system where the app is not surrounded by an ecosystem of configuration. It is embedded in one.
That embedding has a second-order effect on team behavior. Teams stop asking, “What file do I edit to make this work in production?” and start asking, “What capability does this component need?” That is a much better architectural question. It pushes the team toward intent, which is where good systems are designed.
There is a practical benefit too: smaller cognitive load. When a developer can read one service file and understand how it is exposed, what it calls, and what data it depends on, the system becomes easier to change safely. Safety is not only about testing. It is also about how directly the code communicates its own operating assumptions.
Key Takeaways
- Treat infrastructure as a capability, not a separate project. Ask what the application needs, then express that need where the application lives.
- Use internal services to model trust boundaries explicitly. If a component should be reachable only inside the system, make that part of its definition, not an external convention.
- Optimize for one source of operational truth. The less your local and cloud environments diverge, the more reliable your testing becomes.
- Manage state through the same mental model as code. Persistent data should feel like a first class runtime dependency, not a special deployment concern.
- Measure cloud maturity by translation reduction. The best platform is not the one with the most features, but the one that forces you to explain your system in fewer languages.
The cloud as a discipline of compression
The strongest idea tying all of this together is that modern cloud architecture is becoming a form of compression. It compresses the distance between code and deployment, between public and private components, between local rehearsal and production reality, and between application logic and infrastructure logic.
That compression is not about hiding complexity. It is about relocating complexity to the most meaningful layer. Instead of scattering it across YAML, consoles, networking rules, and deployment scripts, you keep it near the business logic that actually depends on it. The system becomes easier to read because it is more honest about what it needs.
And that may be the most important shift of all. The cloud is often described as a place to run software. But the more powerful view is that the cloud is a way of writing software so that deployment, exposure, and persistence are no longer afterthoughts. They are part of the program’s meaning.
Once you see that, the question changes. The goal is no longer merely to move code into the cloud. The goal is to write code that already knows how to inhabit it.
Sources
Hatch New Ideas with Glasp AI 🐣
Glasp AI allows you to hatch new ideas based on your curated content. Let's curate and create with Glasp AI :)
Start Hatching 🐣