Forward Deployed Engineer  /  Rapid Prototyping
FDE Track 04~12 min readIntermediate
Speed Is the Strategy

Build the smallest thing
that makes them believe.

An FDE’s superpower isn’t writing the best code — it’s getting a working, convincing thing in front of a customer while the problem is still fresh. That means prototyping like the code is disposable, faking everything that isn’t the point, and building relentlessly toward one demo moment.

01

Throwaway-first

The most useful mental shift in prototyping is to treat the code as disposable from the start. Not because it’s bad, but because its job is to buy information, not to last. A prototype answers questions — is this valuable? is it feasible? did I understand the problem? — and once it has, its value is spent. Engineers who forget this fall into the sunk-cost trap: they lovingly build a prototype into a fragile pseudo-product, then can’t bring themselves to rebuild it properly.

Naming the code “throwaway” up front is liberating. You skip the abstractions, hardcode the edge cases, and use the ugliest thing that works — because you know it’s scaffolding. Speed of learning is the only metric that matters, and every hour spent making a prototype “clean” is an hour not spent learning whether it should exist at all.

→ The reframe

A prototype isn’t a small product. It’s an experiment with a UI. Judge it by what it taught you and whether it convinced the customer — not by its code quality.

02

The smallest demoable slice

Discovery told you the one workflow that proves value. Prototyping builds a thin vertical slice through it — and fakes everything to the side.

The enemy of a fast prototype is horizontal building — polishing every layer across the whole feature set. The move is vertical: pick the single path from input to valuable output, and build just that path end to end, on one real example. A narrow slice that actually works is a hundred times more convincing than a broad mock-up that doesn’t.

Vertical slice — build the dark cells, fake the rest

Build for real (the slice)

  • One input → the core transformation → one valuable output.
  • On a single real record the customer will recognize.
  • The one capability you’re there to prove.

Fake for now (everything else)

  • Auth, settings, multi-user, the second and third workflows.
  • Scale, error handling, the admin UI.
  • Anything not required to make them say “oh, that’s it”.

This is why the scoping work matters so much: it hands you the exact slice to build. Without it, you’ll build horizontally and run out of time before anything works end to end.

03

Choose a boring, fast stack

A prototype is the wrong place for adventurous engineering. Reach for the most boring, fastest tools you know cold: a language you’re fluent in, managed services for anything stateful, and hosted model APIs rather than self-hosting. Every novel technology you introduce is a tax on iteration speed paid at the worst possible time.

Instead of…Reach for… (in a POC)Because
Self-hosting a modelA hosted LLM APIZero infra; swap for self-hosted only if the deployment target forces it
A production database + migrationsSQLite / a managed Postgres / a fileYou’re proving value, not durability
KubernetesA single container or a scriptOrchestration is a scale problem you don’t have yet
A custom UI frameworkA notebook, a script, or a tiny web appThe output matters; the chrome doesn’t

There’s a caveat: if discovery revealed the deployment target will be on-prem or air-gapped, let that shape even the prototype (e.g. don’t build the demo on a cloud-only service you can’t use later). Boring-and-fast still wins — just pick the boring tools that will survive the move.

04

Fake it — honestly

The art of the fast prototype is doing by sleight-of-hand everything that isn’t the point, while keeping the point real.

Faking is not cheating — it’s prioritization made concrete. Three techniques recur:

HardcodeThe config, the customer name, the one account — anything variable that isn’t what you’re proving. Parameterize later, if ever.
StubA service you can’t reach yet returns a canned response. You prove the flow while integration catches up.
Wizard-of-OzA human (you) does a step manually behind the curtain, so the demo looks automated before the automation exists.

The one hard rule is honesty about the capability. It’s fine to hardcode the account, stub the CRM, and manually kick off the job — as long as the thing you’re claiming (“the model extracts these fields accurately from your documents”) is genuinely real and running. Faking the plumbing is prototyping; faking the actual capability is lying, and it destroys trust the moment production reality arrives.

→ The test

Before a demo, ask: “If they asked me to run this on a second real example right now, would the core still work?” If yes, your fakes are fine. If no, you faked the point.

05

Demo-driven development

The most productive way to aim a prototype is to build backwards from the demo. Picture the exact moment you want the customer to react — the “so what” — and build only what’s needed to reach it convincingly. Everything on the path gets real; everything off it gets faked or cut.

This has a wonderful side effect: it keeps you honest about value. If you can’t picture a demo moment that would make the customer lean in, you don’t yet understand the value — and no amount of code will fix that. Demo-driven development turns “what should I build?” into the far sharper “what’s the single moment that would make them believe, and what’s the least I need to reach it?”.

Set a demo date early and treat it as immovable. A deadline is the best scope-cutter in existence: it converts an open-ended build into a series of decisions about what to leave out. When to run the demo, and how to run it, is its own craft — covered in scoping and, in depth, the demo playbook.

06

Throw away, or harden

A prototype’s life ends in one of two ways, and confusing them is a classic FDE mistake. Either it did its job and gets discarded (the value question is answered; its shortcuts would fight you in production), or its core is genuinely sound and you deliberately harden it into a real system.

Default to disposable. The shortcuts that made the prototype fast — hardcoded config, no error handling, a hand-run step — are exactly what make it dangerous in production, and untangling them is often slower than a clean rebuild informed by everything you learned. When you do decide to harden, treat it as a separate project with its own bar: reliability, observability, security, and a handoff plan. That fork — POC to production — is important enough to have its own checklist, because the gap between “it demoed” and “people depend on it” is where a lot of otherwise-successful deployments quietly fail.

Deep dive

The throwaway decision, made in advance and in writing

The prototype that becomes production without anyone deciding is the most expensive artefact in forward deployed engineering.

Speed is the point of a prototype, and speed is bought by skipping things: error handling, tests, auth, the second data source, anything that is not the question being answered. That is correct engineering. It becomes negligence at exactly one moment — when the demo goes well and someone says “can we just start using it?” — and the way to survive that moment is to have decided beforehand.

state the exit before you write the first line
?

The question

“Can a model separate these six queues at better than the 72% two clerks agree at?” One question, answerable, with a number in it.

The budget

Five days. Stated to the sponsor. A prototype without a stated end date does not have one.

The exit

Answered → delete it and scope the real build. Not answered → say so. Either way the artefact does not survive.

The prototype is an experiment, and an experiment that ships is a different object with different obligations.

What makes the exit enforceable is making the prototype visibly unfit for production rather than quietly unfit. Structural loudness beats a warning in a README, because the README is not what someone reads before wiring it into a scheduled job:

# prototype.py — designed so it CANNOT quietly become production
PROTOTYPE = True
EXPIRES = "2026-08-15"  # the date agreed with the sponsor

if PROTOTYPE:
    banner("PROTOTYPE — results are not audited, do not act on these")
    if today() > EXPIRES:
        raise SystemExit("prototype window closed — scope the build or extend deliberately")
    assert not writes_to_production(), "a prototype does not write to their systems"

# the three things a prototype is allowed to skip, stated out loud:
# no auth · no retries · one data source · no persistence
# the one thing it is NOT allowed to skip:
# it never writes to a customer system. read-only, always.

The read-only rule is the one worth being inflexible about. A prototype that only reads can be deleted on a Friday with no consequences; a prototype that has written 4,000 rows into their claims system is now a migration, an audit conversation and a apology, and it got there without anyone approving it.

→ When “can we just start using it?” arrives

The answer is not no. It is: “yes — here is what it would take to make that safe, and here is what it does today that you should not rely on.” Then the hardening gate is a scoped piece of work with a date rather than a thing that silently did not happen.

Frequently asked

Quick answers

How fast should an FDE prototype be?

Fast enough to get something real in front of the customer within the first week or two of a deployment, while the problem and the relationship are still fresh. The goal isn’t a finished product — it’s a convincing demonstration that the value is achievable. Days, not months.

Is it okay to fake parts of a prototype?

Yes — faking the parts that aren’t the point (hardcoding a value, stubbing a service, doing a step by hand behind the scenes) is a core prototyping skill, as long as the thing you’re proving is genuinely real. The line is honesty: never fake the actual capability you’re claiming to demonstrate. Fake the plumbing, prove the value.

What stack should you use for a POC?

The most boring, fastest one you know well. Managed services, a familiar language, and hosted model APIs beat clever architecture during a prototype — you’re optimizing for speed of iteration, not scale or elegance. Save architectural decisions for when you know the solution is right and the deployment target is settled.

When do you throw a prototype away versus keep it?

Throw it away when it did its job — proved (or disproved) the value — and its shortcuts would fight you in production. Keep and harden it only when the core is genuinely sound and rebuilding would waste real work. Most FDE prototypes should be treated as disposable by default; hardening is a deliberate, separate decision.

Rapid Prototyping for FDEs · 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