← Back to list

The Hidden Platform Inside Every System

Why the future of software depends on treating execution as governance, not just code.

Enrico Piovesan in Mastering Software Architecture for the AI Era · 2025-09-10 22:16 · 1 claps · 13.1 min read
#smart-contracts #contract-driven #ai-driven-development #telemetry #governance
Open on Medium ↗
Wiki topics: AI · AI · General CRY · Crypto & Web3

The Hidden Platform Inside Every System

Why the future of software depends on treating execution as governance, not just code.

Mastering Software Architecture for the AI Era* Part 15*

Inside one of the first air traffic control towers, operators guide early biplanes across crowded skies, a reminder that runtimes, like aviation, evolve from raw execution to governed platforms built on contracts and oversight.

Inside one of the first air traffic control towers, operators guide early biplanes across crowded skies, a reminder that runtimes, like aviation, evolve from raw execution to governed platforms built on contracts and oversight.

By the early 1920s, the skies above American and European cities were growing crowded with aircraft. Despite its infancy, aviation was already sharing the airspace once dominated by a small group of fearless pilots. Air mail carriers, barnstormers, and the first commercial flights were all taking to the skies, but there were no clear paths, no standardized maps, and few agreed-upon rules. Pilots relied on a simple approach called “see and avoid.” If another plane appeared in front of you, you were supposed to spot it in time and steer clear. For a while, this system worked. The number of planes was still small, and the skies were still vast enough that luck and instinct kept most people safe. However, as more flights took off, accidents began to rise. Mid-air collisions, once unheard of, became a growing threat. The margin for error was shrinking.

By mid-decade, radio had revolutionized the game. Wooden towers sprang up near airfields, staffed by operators who sat with bulky headsets and hand-written logs, listening to pilots report their positions or request weather updates. These early efforts were makeshift and inconsistent, often relying on a single operator's skill. Yet they marked a profound shift. Flying was no longer just about individual judgment in the cockpit. For the first time, there was an external system, a platform of oversight and communication that all pilots could tap into. In its rough beginnings, air traffic control was born.

Change didn't happen overnight. Many pilots were hesitant, opting for independence over regulation. Radios often failed, and towers were insufficient. But as flights increasingly shared the same airspace, the need for structure took priority over the desire for freedom. New procedures emerged: standard reporting intervals, shared terminology, and assigned altitudes. What had once been a patchwork of individual practices slowly evolved into a system with built-in coordination, trust, and safety. Pilots didn't lose their autonomy; they gained the confidence that came from flying in an environment where intentions were clear and conflicts were managed on a larger scale.

Throughout my software career, I've experienced a similar tension. Requirements almost never come in as clear as we'd like. Instead, they pop up across the company in bits and pieces: a Jira ticket here, a wiki page there, a Slack message, or an email that never reaches the team working on the feature. Sometimes, they stay in a single person's head, passed down as insider knowledge that no system or document records. As projects progress, requirements change, and the cost of making those changes increases. Teams disagree on what's in scope, what's part of the contract, and what was just a casual agreement. When this happens, the system has no memory. Key intent is invisible, and once it's invisible, it's also out of reach for AI tools.

When using large language models to generate code, refactor, or write tests, this gap becomes painfully clear. The model can produce outstanding work when requirements are clear and precise, but without a clear intent, it's forced to guess. The results can be plausible or even elegant, but not always accurate. Just as early pilots relied on their eyesight and luck, developers today risk relying on improvisation when the real foundation is scattered knowledge.

That's why runtimes need to evolve. Just as aviation relied on towers, radios, and standardized procedures to shift from haphazard improvisation to coordinated management, software requires runtimes that serve as control planes. They can't stay passive engines of execution. Instead, they must enforce contracts, gather telemetry, and automate tasks in real time. Only then can intent be captured, shared, and scaled without being lost to chance or limited to individual knowledge.

From Execution to Governance

For most of software’s history, the runtime was a behind-the-scenes engine. It took code and made it run, with little thought given to it. Teams only considered it when performance slowed or a mysterious error popped up from deep in the stack. The JVM, Node.js event loop, and iOS runtime were mainly built to serve as execution environments, translating instructions into machine behavior as efficiently as possible.

Execution alone is no longer sufficient. Modern systems are distributed, fast-paced, and influenced by many contributors across an organization. What moves through them includes not just code, but contracts, policies, and telemetry. These are runtime realities that must be enforced continuously. In a microservices environment, a single bad payload can spread across dozens of services. In AI-enhanced applications, a model can act on incomplete or noncompliant data if the runtime does not validate first.

Our goal isn't just to have faster runtimes; it's to have smarter ones. A runtime that checks inputs against contracts, collects telemetry, and blocks requests that break policy is doing more than just executing instructions. It's governing the system in real-time. In practice, this turns the runtime from a neutral machine into an active platform. It orchestrates, enforces, and learns. It's not just sitting at the center as a compute engine, but as the layer where safety and scale become practical.

Here's a simple illustration of that shift. On the left, code flows directly to execution. On the right, the same flow goes through validation, telemetry capture, and policy before execution. The second approach not only ensures safety but also enables scalability without relying on chance.

Diagram: Left, a classic execution engine. Right, a platform runtime that governs by validating contracts, capturing telemetry, and enforcing policy before execution.

Diagram: Left, a classic execution engine. Right, a platform runtime that governs by validating contracts, capturing telemetry, and enforcing policy before execution.

Think of it this way: the left side is about "see and avoid," while the right side is air traffic control. What sets them apart isn't red tape, but rather coordinated safety that can scale.

Contracts in Motion

For a long time, specs like OpenAPI, JSON Schema, AsyncAPI, GraphQL, and Protocol Buffers were viewed as documentation or tools to generate code. They outlined the surface of systems but didn't enforce anything once software was up and running. That thinking is shifting. In today's distributed systems, these contracts have moved from the background to the forefront, serving as active runtime tools and governance mechanisms.

An OpenAPI file today does more than just document an endpoint. In Google Apigee, for example, it can be used directly on gateways to reject requests that don’t match the contract. The gateway checks paths, verbs, headers, payloads, and even custom annotations before the request reaches application logic. What used to be “nice to have” documentation now becomes an active policy that protects the system.

JSON Schema follows a similar trajectory. Once dismissed as boilerplate, it is now the backbone of many data quality pipelines. Gateways like Oracle’s validate JSON payloads against schemas, rejecting malformed messages before they spread across services. Instead of leaving integrity to developers, the schema becomes the runtime contract, enforced at scale.

Event-driven systems make this even more crucial. AsyncAPI enables teams to precisely define events, topics, and message structures, and its runtime expressions ensure correlation IDs and message bindings meet expectations. This is important because asynchronous systems are prone to hidden errors. Without runtime enforcement, a single malformed message can quietly ripple through a queue and only be detected hours later as corrupted data. AsyncAPI shifts governance from informal practice to a machine-verified process.

Protocol Buffers and GraphQL also show the same trajectory. Protobuf with protoc-gen-validate generates Validate() methods directly in code, embedding runtime checks for ranges, formats, and enumerations. GraphQL validates every query against its schema before execution, making contracts unavoidable. With schema contracts, GraphQL can even tailor access for different consumers, turning a single graph into multiple curated views of the same underlying system.

A brief example illustrates how standard specifications develop into runtime enforcement. Here is a JSON Schema for ensuring that a product price is a positive number.

{
  "type": "object",
  "properties": {
    "productId": { "type": "string" },
    "price": { "type": "number", "minimum": 0 }
  },
  "required": ["productId", "price"]
}

Implemented at runtime in API Gateway, this schema guarantees that no negative prices are passed downstream. It's an active governance contract, not a passive one.

The implications are clear: contracts are no longer just footnotes in documentation. They now establish the rules of engagement within the runtime itself. Like the early towers of air traffic control, they represent the first step toward transforming execution environments into governed platforms.

Telemetry as the Nervous System

Think of contracts as the rules of engagement, and telemetry as how the runtime understands what's happening within those rules. For a long time, telemetry was considered an afterthought. We'd capture logs, traces, and metrics, aggregate them, and send them to dashboards for humans to analyze. It was useful, but always one step removed from the system itself. As a result, decisions had to be made manually, often too late to prevent failure.

That approach falls short when scaled up. Today's systems change rapidly and handle huge volumes of traffic, making it impossible to rely on after-the-fact analysis. The runtime needs to view telemetry as an integral part of its system, providing real-time signals to the same loops that enforce contracts and policies. When requests start timing out, when payloads drift toward invalid states, or when a new release silently alters behavior, telemetry has to do more than just observe. It must prompt action.

One effective approach is shadow deployment. A new version of a service can run alongside the old one in “shadow mode.” Actual traffic is mirrored to both versions, and telemetry tracks differences in latency, error rates, or contract compliance. If the new service misbehaves, nothing disrupts the end users, but the system learns from it. That telemetry can also inform confidence scores, which serve as gates: only when the new version consistently demonstrates reliability does the system promote it into full production.

A simplified flow looks like this:

Diagram: Shadow traffic flows to a new service. Telemetry compares outputs, feeding a policy engine and a decision gate before promotion.

Diagram: Shadow traffic flows to a new service. Telemetry compares outputs, feeding a policy engine and a decision gate before promotion.

It's no longer just about monitoring. We're talking about building feedback loops into the system's runtime, so it can learn and adapt continuously. Telemetry provides the sensory input, contracts serve as the underlying structure, and the control plane brings everything together. The outcome is a system that not only runs code but also evolves safely while it's running.

The Control Plane Emerges

As contracts move into enforcement and telemetry feeds back into live decisions, the runtime stops acting as a neutral executor and starts behaving like a platform. This shift is best understood through the concept of a control plane. In networking, the control plane determines how packets should flow, while the data plane handles their movement. The same distinction now applies to software runtimes. The data plane executes requests, but the control plane oversees the rules, policies, and learning loops that make execution safe and adaptable.

This shift is no longer just a theory. Service meshes like Istio have already put this model into practice. Sidecars handle the data plane, while a centralized control plane handles routing rules, authentication policies, and circuit breakers. Kubernetes works in a similar way: worker nodes run workloads, but the control plane enforces desired state, scaling, and admission policies. These systems demonstrate the benefits of separating execution from orchestration, showing how runtime governance can become a foundation rather than an afterthought.

Put simply, this means the runtime is now where contracts, telemetry, and automation come together. Contracts outline what's allowed, telemetry tracks what's happening, and the control plane ensures the system adapts as needed. Developers can no longer just write code and expect downstream services to behave. The runtime enforces rules for them, guaranteeing the entire system runs with shared safety and intent.

A high-level view of this looks like the following:

Diagram: The data plane executes code, while the control plane integrates contracts and telemetry to enforce policies.

Diagram: The data plane executes code, while the control plane integrates contracts and telemetry to enforce policies.

Think of air traffic control again. Pilots are still in charge of the plane, but towers and procedures are what keep the skies running smoothly. It's the same with developers - they still write code, but the runtime platform is what ensures it all works safely. That's what makes a runtime an ecosystem, not just an engine.

AI in the Loop

Once AI is integrated into the workflow, the significance of contracts and control planes increases dramatically. Large language models are incredibly skilled at generating, refactoring, or testing code, but they lack awareness beyond what's explicitly provided. If a requirement is vague, spread across Slack threads, or hidden in unwritten tribal knowledge, the model will fill in the gaps with guesses. Sometimes those guesses are clever, but other times they stray far from the actual intent. Without contracts, the runtime has no way to prevent these mistakes from spreading.

Runtime governance is crucial at this point. When contracts are enforced in real-time, the AI’s output is checked against the same rules that apply to human-written code. Any missing fields, invalid payloads, or non-compliant events won't sneak into production unnoticed. Instead, they're caught at the boundary by schemas, validation policies, or shadow deployments. In this way, the runtime acts as an environment where both human and machine contributions are held to the same standards.

A simple example demonstrates how this works. Imagine an AI is asked to create a new service that uses a Product API. If the Product API is defined by an OpenAPI contract, the system can automatically enforce compliance. The AI might initially generate a handler like this:

app.post("/order", (req, res) => {
  const { productId, price } = req.body;
  // Missing validation, assumes input is correct
  createOrder(productId, price);
  res.send({ status: "ok" });
});

On its own, this looks fine, but without validation, it can accept negative prices or malformed payloads. With a schema-driven gateway, those requests are rejected before the code runs because the contract specifies that it must be a non-negative number. The AI’s omission does not turn into a production bug; the runtime enforces the boundary.

The effect is that the runtime becomes the teaching platform for AI. Each failed validation, each rejected call, provides deterministic feedback. The model can correct its output in response, just as human developers do. Instead of free-form guessing, AI development begins to resemble test-driven development guided by contracts. In this way, contracts serve not only as safety nets but also as learning scaffolds, ensuring that human and machine efforts remain aligned with the intent.

This dual role is what makes AI in the loop transformative. It is not just about generating more code; it's about creating code within an environment where contracts and telemetry manage behavior. The runtime as a control plane ensures that AI does not lower the quality standard but raises the ceiling of what teams can try.

Architectural Implications

Treating the runtime as a platform has significant impacts on how systems are designed and run. It shifts responsibility boundaries, alters workflow structures, and affects the daily experience of developers.

One key takeaway is a move from code-focused integration to contract-driven design. Rather than manually wiring services together and hoping they stay compatible, teams publish contracts to registries where they're versioned, discoverable, and enforced. Integration becomes less about relying on tribal knowledge and more about matching against machine-readable facts. This makes changes less fragile. When a contract evolves, compatibility checks and semantic versioning ensure safe rollouts, rather than leaving it to guesswork.

Another key implication is how CI/CD pipelines develop. Contracts are no longer just static attachments to pull requests; they're active checkpoints. If an OpenAPI spec doesn't match the updated code, if an AsyncAPI message is missing required fields, or if telemetry shows a regression in shadow mode, pipelines fail. In this setup, “nothing gets deployed without being validated." The runtime takes charge of enforcement, so teams don't have to rely solely on self-discipline or manual review.

Another key implication is the shift in developer experience. Developers don't lose their autonomy, but the runtime changes their focus. Rather than spending time on defensive coding and boilerplate validation, they focus on designing contracts and rely on the platform to enforce them. This elevates the work, as developers concentrate on the intent, while the runtime ensures safety and consistency. The outcome is similar to how air traffic controllers freed pilots from constantly scanning the horizon. The result wasn't less flying, but safer and more ambitious routes.

Ultimately, architecture becomes more flexible. By enforcing contracts and using telemetry, teams can swap out components with less risk. They can test a new recommendation service in a shadow environment before replacing the old one. They can validate an AI-assisted workflow against contracts before promoting it. The runtime makes modularity a reality, as it's where rules and feedback are actively coordinated.

Put simply, architects need to begin treating the runtime as a primary design surface. It's not just the underlying layer supporting applications; it's the platform that brings contracts, telemetry, and policies to life. Designing modern systems without considering the runtime as a control plane is like building aircraft without thinking about air traffic control. The plane might take off, but the entire aviation system won't scale safely.

Takeaways

The runtime's role has shifted. It's no longer just a behind-the-scenes executor; it's become the foundation where contracts, telemetry, and automation come together to form a control plane for modern systems.

  • From execution to governance: Runtimes must enforce rules, not just run code.
  • Contracts as living policies: OpenAPI, AsyncAPI, JSON Schema, and GraphQL cease to be documentation and become runtime enforcement.
  • Telemetry as feedback: Data is no longer only for dashboards; it powers learning loops like shadow deployments and decision gates.
  • AI as a catalyst: With AI in the loop, strict runtime contracts prevent guesswork from spreading and turn validation into training signals.
  • Architecture redefined: The runtime is now a design surface. Architects and developers must treat it as the ecosystem where safety, adaptability, and scale are coordinated.

Take a cue from air traffic control. Pilots still fly planes, but the aviation system only became sustainable when shared rules and live oversight took over the skies. Similarly, developers still write code, but the future of software relies on runtimes that act as control planes. Without them, we're stuck in the fragile "see and avoid" era. With them, we can build systems that scale, learn, and adapt with confidence.

Coming Next

Now that contracts and telemetry are making runtimes smarter, the next step is to figure out how this affects the developer’s daily workflow. When the runtime becomes a control plane, developers don't control the wiring directly anymore. Instead, they design contracts, publish schemas, and let the platform enforce them. This change brings up new questions:

  • How do you create clarity for developers when much of the enforcement happens at runtime?
  • What new skills matter most when teams work in contract-first environments?
  • How does developer experience evolve when AI agents are also part of the loop?

Next week’s post will dive into these questions. It'll explore how runtime governance changes developer workflows, what that means for speed and innovation, and how to build platforms that developers really love using.

[embed]If You’re Still Writing Glue Code, You’re Already Behind The future belongs to developers who curate contracts, shape intent, and let runtimes do the wiring.medium.com

🧠 Found this valuable? If this post sparked new thinking or gave you something useful to take back to your team, consider hitting the 👏 button. It also helps others discover the series.

🚀 Following along? This article is part of the ongoing series: Mastering Software Architecture for the AI Era: Designing & Building with AI-Driven Architecture Principles

[embed]Mastering Software Architecture for the AI Era This series explores how AI is transforming software architecture, offering practical insights into modular design…medium.com

Each post examines how AI is transforming the way we design, scale, and reason about software systems.


메타데이터
post_id
923402ffee4e
slug
the-hidden-platform-inside-every-system-923402ffee4e
url
https://medium.com/software-architecture-in-the-age-of-ai/the-hidden-platform-inside-every-system-923402ffee4e
canonical_url
https://medium.com/software-architecture-in-the-age-of-ai/the-hidden-platform-inside-every-system-923402ffee4e
author_url
https://medium.com/@enricopiovesan
status
ok
fetched_at
2026-08-09 11:48:27