Forward Deployed Engineer  /  Deploying in Customer Environments
FDE Track 05~13 min readIntermediate
Where It Actually Runs

Ship it where they
can actually run it.

The single question that reshapes an FDE architecture more than any other isn’t about the model or the UI — it’s “where can this run?”. The answer, on a spectrum from your SaaS to a fully air-gapped datacenter, decides your data flow, your updates, your model hosting, and even your own ability to touch the thing you built.

01

The question that reshapes everything

Most engineers design a system and then think about where to host it. FDEs invert that, because the hosting environment isn’t a detail you bolt on — it’s the constraint that determines the design. A solution that assumes a hosted model API, a managed database, and your own observability dashboards is elegant and fast to build. It also becomes impossible the moment the customer says “our data can’t leave our network.”

So the highest-value question in discovery is deceptively simple: “Where can this run, and who approves that?” The answer lands on a spectrum, and every step along it tightens what you’re allowed to do — while the customer’s security posture, not your preference, decides where you land.

02

The four targets

From the place you control completely to the place you barely control at all.

TargetWho hostsBest whenThe cost
Your SaaSYou, multi-tenantData may leave; speed matters mostBlocked outright when data can’t leave their network
Customer cloud / VPCYou deploy into their accountData stays in their cloud; they’ll grant a scoped roleTheir IAM, their network rules, their approval
On-premTheir datacenter / serversRegulatory or policy reasons keep everything in-houseYou manage installs + updates; no managed services
Air-gappedTheir isolated network, no internetDefense, finance, healthcare; maximum controlEverything ships in by hand; hardest to build + update

Think of it as a dial from convenience to control. Your SaaS is maximum convenience for you and minimum control for them; air-gapped is the reverse. Most enterprise AI deployments land in the middle two — the customer’s cloud/VPC or on-prem — where you get some tooling but live inside their rules. The deployment-targets cheatsheet is the quick decision aid.

03

What changes as you move right

Each step toward air-gapped changes the same set of concerns. Internalize this table and you can predict what a given target will demand before you start.

ConcernSaaS / VPCOn-prem / air-gapped
Data egressData can leave (SaaS) or stays in their cloud (VPC)Nothing leaves the network — ever
UpdatesYou push anytimeScheduled, manual, versioned bundles brought in deliberately
Model hostingHosted LLM API is fineSelf-host an open model (vLLM etc.) — the model runs where the data lives
SecretsYour vault / their KMSTheir vault, their rotation policy — not your .env
ObservabilityYour dashboardsShip logs/metrics to their stack, or run a local one
Your accessFullMaybe a screen-share and someone else’s hands on the keyboard
→ The one that surprises people

Losing your own access. On a locked-down deployment you may never touch the running system — you debug through a customer engineer on a call. That makes logging, health checks, and a good runbook not niceties but survival tools.

04

Package portably

The defense against target uncertainty is portability. If discovery hasn’t nailed down the target yet — or if it might change — build so that moving right is a repackaging job, not a rewrite. In practice that means a small set of habits.

Do

  • Containerize everything (Docker) so it runs the same anywhere.
  • Depend on open, self-hostable components where the target might be on-prem.
  • Externalize config — one image, per-environment settings.
  • Have a plan for self-hosting the model from day one, even if you use an API now.

Avoid

  • Cloud-only managed services with no on-prem equivalent (if on-prem is possible).
  • Hardcoding endpoints, regions, or a single cloud’s identity model.
  • Assuming internet access at runtime.
  • Baking secrets or per-customer values into the image.

Portability isn’t free — it can cost you some of the convenience of a cloud’s managed magic. But paid up front, it turns “we need this on-prem now” from a project-threatening surprise into an afternoon of repackaging.

05

Secrets, identity, least privilege

In the customer’s environment, security stops being your convention and becomes their policy. Secrets live in their vault or KMS with their rotation rules; identity flows through their SSO; and every credential you hold should be scoped to the absolute minimum the job needs. This isn’t bureaucracy for its own sake — it’s exactly what gets a security team to approve you, and approval is often the critical path of the whole deployment.

→ Least privilege is a speed tactic

A small, well-scoped access request gets a fast yes; a broad one triggers a long review. Asking for exactly what you need — and no more — is how you deploy this quarter instead of next. Security and compliance are deep enough to warrant their own quick-reference.

06

The update path

The question new FDEs forget until it bites them: how do you ship v2? On your SaaS it’s a deploy. On-prem it’s a coordinated release. Air-gapped, it might mean handing someone a signed, versioned bundle they carry in on approved media and install during a maintenance window. Decide this before v1, because an architecture that can’t be updated is a liability disguised as a delivery.

Pair the update path with real observability in their world. You may not be able to watch your own dashboards, so wire structured logs, a genuine health check, and alerts into the stack the customer actually uses — and into a channel their team monitors. On a locked-down deployment, knowing the system broke before the customer tells you is often the difference between a quick fix and a lost account. Once it’s deployed and observable, the work turns to hardening and handoff — making the thing durable and then making it theirs.

Deep dive

Prove the network before you build on it

Most deployment failures in a customer environment are not deployment failures. They are network assumptions that fail at runtime, one at a time, over three weeks.

The single question that determines your architecture is: can a machine in this environment reach a public IP address, and if so, through what? Ask it in week one, of an operator rather than an architect. The answer moves you along a spectrum, and each step removes a convenience you have never had to think about before.

what each step costs you

Private VPC

No public ingress, egress usually allowed. Bastion access, endpoints, a VPN conversation. Normal work.

●●

No-egress VPC

Nothing reaches the internet — including your package installs and your model API. A real re-architecture, not a config change.

●●●

Disconnected

Updates arrive through an approved transfer. Your iteration speed is now their change window, and it is fortnightly.

Estimates should be built on their deploy cadence, not on how fast you can write the code.

In a no-egress environment the failures do not appear at provisioning time, which is what makes them expensive. Terraform applies cleanly; the pod schedules; then the image pull times out, the certificate check hangs, and the clock drifts until token validation starts failing in a way that looks like an auth bug. The defence is half an hour of work on day one:

# netcheck — deploy this before you build anything real
# prints a pass/fail table you can hand to their network team

for target in \
  s3.$REGION.amazonaws.com      # gateway endpoint?
  api.ecr.$REGION.amazonaws.com  # image pulls
  sts.$REGION.amazonaws.com     # miss this and IRSA fails cryptically
  secretsmanager.$REGION.amazonaws.com \
  $MODEL_ENDPOINT $INTERNAL_NTP $OCSP_RESPONDER ; do
    timeout 5 nc -z "$target" 443 \
      && echo "PASS $target" || echo "FAIL $target"
done

# keep it in the repo. re-run it after every environment change —
# it is the cheapest diagnostic you will ever write.

Two items on that list are the ones people miss. STS, because workload identity fails with an error message that names none of this. And NTP, because clock drift produces token-validation failures that look exactly like an authentication bug and will cost you a day the first time.

→ Test the artefact with networking physically off

Before any transfer into a disconnected environment, install your package on a machine with networking disabled. It takes an afternoon and catches nearly everything: the base layer pulled at run time, the dependency that compiles from source, the runtime that phones home for a licence check. The alternative is discovering it inside a facility where you cannot download anything and cannot try again until the next window. The full treatment is in air-gapped & regulated deployment.

Frequently asked

Quick answers

What are the deployment options for delivering software to a customer?

Four main targets on a spectrum. Your own SaaS (multi-tenant, you host everything). The customer’s cloud account or VPC (you deploy into their environment). On-prem (their own datacenter or servers). And air-gapped (no internet connection at all). They move from fastest-to-ship-and-update on the left to most-locked-down on the right, and the customer’s security and data-residency rules usually dictate which one you get.

What is an air-gapped deployment?

A deployment in an environment with no connection to the public internet — common in defense, finance, and healthcare. Everything the software needs (container images, dependencies, model weights) has to be brought in deliberately, updates are scheduled and manual, and you often can’t reach the system to debug it directly. It’s the hardest target and reshapes almost every architectural decision toward self-containment.

How do you host an LLM when data can’t leave the customer’s network?

You can’t call a hosted API, so you self-host an open-weight model (e.g. with a serving stack like vLLM) inside the customer’s environment. That trades the convenience of a cloud API for full data control — the model runs where the data lives, and nothing leaves. It adds infrastructure work (GPUs, serving, updates) that a SaaS deployment avoids, so it’s worth confirming the constraint is real before taking it on.

Why does the deployment target affect the whole architecture?

Because everything downstream depends on it: whether data can leave, how you ship updates, where the model runs, how secrets are managed, where logs go, and whether you can even access the running system. A design that assumes a cloud API and your own dashboards falls apart on-prem. That’s why FDEs ask “where can this run?” in discovery — the answer, not the feature list, is the biggest architectural fork.

Deploying in Customer Environments · part of the FDE track · Vibe Engines · 2026
Finished this one? 0 / 208 Handbooks done

Explore the topic

See this alongside everything else on the same subject — handbooks, system designs, challenges and tools, in one place.

More Handbooks