Back to blog
EngineeringDecember 15, 20257 min read

Why We Still Deploy On-Premise

Cloud-first is the default for good reasons, but the industries we are building for often cannot use it. Here is why we designed P3 to run anywhere.

The Cloud Assumption

Our third sales call with a defense customer ended with a simple question: "Can this run on hardware we control, inside our network, with no outbound connections?" If the answer had been no, the conversation would have ended there. AWS, Azure, and GCP offer genuinely impressive infrastructure -- managed databases, global CDNs, auto-scaling compute. We use cloud infrastructure ourselves for development, CI/CD, and our SaaS offering.

But the industries we are building for -- defense, manufacturing, healthcare, government -- often need software that runs on servers in their own data centers, on hardened racks on factory floors, inside hospital networks behind multiple firewalls, or on hardware without a persistent internet connection.

Cloud-first is a fine default for most SaaS products. For enterprise operational platforms in regulated or sensitive industries, it is frequently not an option.

Data Sovereignty Is Not Optional

When a defense ministry tells you their operational data cannot leave the country, they are not being dramatic. They are following law. ITAR in the United States, the Bundesamt regulations in Germany, the NIS2 Directive across the EU — these are not guidelines you can negotiate around with a compliance checkbox. The data stays where it stays.

Healthcare is similar. HIPAA in the US and its equivalents in Europe do allow cloud hosting under specific conditions, but many hospital systems have made the architectural decision to keep patient-adjacent operational data on-premise. When a platform ingests bed sensor data, nurse call events, and pharmacy dispensing records -- and correlates them with patient flows in real time -- getting a hospital CISO to approve an external cloud connection is a hard sell at best.

Government agencies have their own version of this calculus. Public sector procurement processes often mandate on-premise deployment as a hard requirement, not because the cloud is technically inferior, but because the data governance frameworks were designed for a world where you control the physical hardware. Changing those frameworks takes years. Your deployment timeline is months.

Latency Is Physics

A round trip from a factory floor in Stuttgart to an AWS region in Frankfurt takes about 10-15 milliseconds on a good day. That sounds fast. It is not fast enough.

When a SCADA system detects a pressure anomaly on a chemical reactor, the digital twin needs to evaluate the ontology constraints — is this reading within the operating envelope? Does it correlate with a valve state change? Should we trigger an automatic shutdown? — and respond within 50 milliseconds. Adding a 15ms cloud round trip, plus the variance of internet routing, plus the occasional packet loss, turns a deterministic response into a probabilistic one.

On a production line running at 120 units per minute, 50ms is the difference between catching a defective unit and letting it reach the next station. On a chemical plant, it is the difference between a controlled shutdown and an incident report.

You can mitigate this with edge computing — and we do support edge deployments as a hybrid model. But edge computing is just a polite way of saying "on-premise compute that phones home." The decision logic still runs locally. The cloud becomes a sync target, not a decision engine.

Air-Gapped Is a Real Requirement

An air-gapped network has no connection to the public internet. None. No outbound HTTPS. No DNS resolution to external servers. No NTP sync to pool.ntp.org. The machines on the network talk to each other and to nothing else.

This is standard operating procedure for classified defense networks (SIPR, JWICS), critical infrastructure control systems (power grids, water treatment), and certain financial trading environments. If your software requires a license server phone-home, a cloud-hosted analytics backend, or even automatic update checks — it cannot deploy into these environments. Full stop.

We designed P3 to operate fully air-gapped. The ontology runtime, the data layer, the API server, the web UI -- everything can run inside the perimeter. Telemetry is optional and opt-in. License validation is offline-capable. Updates ship as signed container images on approved media. It is not glamorous work, but it is necessary engineering if you want to deploy into these environments at all.

The Cost Surprise

There is a less discussed reason for on-premise deployment: money.

Cloud pricing is designed around elasticity. You pay for what you use, and that model works beautifully for variable workloads — marketing sites, seasonal e-commerce, dev/test environments. But enterprise operational platforms do not have variable workloads. A factory runs three shifts. The hospital never closes. The logistics chain operates 24/7/365. Your baseline compute is your peak compute.

At that point, the math changes. A dedicated on-premise server with 64 cores and 256GB of RAM costs a fixed amount over its 5-year lifecycle. The equivalent cloud instance, running 24/7 with reserved pricing, costs substantially more — and that is before you add data egress charges, managed database fees, and the storage costs of a platform that ingests high-frequency sensor data.

For the kind of always-on operational platforms we are building, the on-premise cost comparison often favors dedicated hardware over equivalent cloud spend. It is not ideological. It is arithmetic.

How P3 Ships Everywhere

Supporting both cloud and on-premise deployment from a single codebase requires architectural discipline from the start. We made this decision early, and it shapes how P3 is built.

The P3 runtime ships as a set of container images. Docker Compose for single-node deployments, Helm charts for Kubernetes clusters. The same images can run on EKS, AKS, GKE, OpenShift, bare-metal K3s, or a single VM with Docker installed.

Infrastructure provisioning is codified in Terraform modules. AWS deployment gets a module for VPC, RDS, EKS, the full stack. On-premise with VMware gets a different module with the same interface variables. The deployment topology varies; the application configuration does not.

Configuration management follows GitOps principles. The desired state of a deployment — which version, which feature flags, which ontology modules are loaded — is declared in a Git repository. ArgoCD or Flux reconciles the running state with the declared state. This works identically whether the Git repository is on GitHub.com or on a GitLab instance running inside the air-gapped network.

The ontology itself is the same everywhere. The same classes, relations, axioms, and rules that run in a cloud staging environment work on a local server in a restricted facility. This is one of the real payoffs of ontology-driven architecture: the domain model is infrastructure-agnostic by definition. A purchase order is a purchase order whether it is stored in PostgreSQL on RDS or PostgreSQL on a local NVMe drive.

Portable by Conviction

The engineering decision behind all of this: enterprise software should be portable as an architectural property, not as a marketing claim. The software should run wherever the customer needs it, and the customer should not have to restructure their infrastructure to accommodate your deployment model.

This means not marrying a cloud provider. No AWS Lambda functions in the critical path. No Azure-specific managed services that lack equivalents elsewhere. No GCP-only APIs. We use cloud services where they add value — managed load balancers, object storage, monitoring — but always behind an abstraction that has an on-premise equivalent.

It is more work. Undeniably. Testing a matrix of deployment targets is harder than testing one. Writing Terraform modules for three clouds and bare metal is harder than writing one CloudFormation template. Supporting air-gapped deployments means rethinking every dependency that assumes internet connectivity.

But the alternative is telling a potential customer -- one with a classified network, a factory floor, or a hospital with legacy infrastructure -- that they cannot use your product. For us, that is not acceptable.

In practice, a given customer might end up on EKS, or on a bare-metal K3s cluster in a restricted facility. The domain logic is identical in both cases. The infrastructure varies; the ontology, runtime, and data model do not.

Ready to build your digital twin?

See how P3 turns ontology into a running system — from data model to production in weeks, not months.

Related articles