All articles
Forward Deployed

The Tools an FDE Ships With: Data Pipelines, Integrations, Demos, and Scaffolding

FDE Coach EditorialJuly 26, 202611 min read

The Forward Deployed Engineer's toolbox isn't a static list of npm packages or a pristine home-lab setup. It's a set of composable primitives you assemble under fire—in a customer's conference room, on a war-room call, or during a make-or-break proof-of-concept week. You are not building a product for a million users. You are building a working integration, a live data pipeline, or a functional demo for one customer that must work by Friday.

This playbook walks through the actual tools and patterns FDEs use across five layers: data ingress, transform logic, data egress, demo UX, and infrastructure scaffolding. No hype. Just what ships.

Layer 1: The Ingress Pipeline (Data In)

Every FDE engagement starts with a data problem. The customer has data trapped in a legacy system, a SaaS tool with a slow API, or a CSV dump that "should be easy to connect." Your job is to ingest it reliably, handle schema drift, and get it into a shape you can work with.

The Core Toolkit

  • Python (3.11+) with httpx and tenacity: For any HTTP API that lacks a mature SDK. httpx gives you async support and a requests-like API. tenacity handles retries with exponential backoff—non-negotiable when hitting rate-limited customer APIs.
  • DuckDB: The FDE's secret weapon. It's an in-process analytical database that eats CSV, Parquet, and JSON files directly. No server to install. You can run SQL against a 10 GB CSV on a customer's locked-down laptop. Use it for ad-hoc exploration, shaping data before loading into a proper warehouse, or even as the engine behind a demo dashboard.
  • n8n (self-hosted): When you need to wire up webhooks, poll an SFTP server, or chain API calls without writing a bespoke orchestrator. n8n is low-code enough to show a customer's IT team but powerful enough to handle real logic with custom code nodes. Run it in Docker on a small EC2 instance or the customer's own infra.
  • csvkit and xsv: Command-line tools for quick CSV inspection, slicing, and stats. csvstat gives you a 30-second data profile. xsv is blazing fast for large files.
  • jq: Still the best tool for poking at JSON API responses and building quick filters before you write Python.

A Common Flow

A Python script pulls data via httpx, lands it as Parquet in a local staging directory, DuckDB runs a validation query (row count, null checks, schema diff against a known baseline), and if it passes, an n8n webhook triggers the downstream transform layer.

Layer 2: The Thinking Layer (Transforms and Logic)

Raw data is rarely useful. You need to clean, join, enrich, and sometimes run inference. This layer is where business logic lives and where you prove you understand the customer's domain.

The Core Toolkit

  • Pandas (or Polars): Pandas is still ubiquitous and understood by customer data teams. Polars is faster and has a more expressive API—use it when you're processing >1M rows on a single machine and need speed. Know both.
  • SQL (DuckDB dialect): Often faster than Pandas for joins and aggregations, especially on disk-backed data. Write CTEs, not spaghetti scripts.
  • Pydantic: Define the target schema as Pydantic models. Validate every output row. When the customer's upstream schema drifts (and it will), you get a clear error message, not a silent data corruption.
  • LiteLLM or direct OpenAI/Anthropic SDK calls: When you need to classify text, extract entities, or summarize documents as part of the pipeline. A common pattern: a Python function that takes a batch of rows, formats a prompt, calls a fast model (Gemini 1.5 Flash, GPT-4o-mini), and returns structured output via function calling. For a concrete example of wiring an LLM into a data extraction pipeline, see our guide on building an invoice extractor that turns PDF receipts into structured JSON with a free vision LLM.
  • Ray or Dask (occasionally): Only when you genuinely need distributed compute. Most FDE workloads fit on a single beefy machine. Don't over-engineer.

Pattern: The Enrichment Step

from pydantic import BaseModel, Field
from typing import Optional
import polars as pl

class EnrichedRecord(BaseModel):
    id: str
    raw_text: str
    category: Optional[str] = None
    confidence: float = Field(ge=0.0, le=1.0)

def classify_batch(records: list[dict], llm_client) -> list[EnrichedRecord]:
    # Format prompt, call LLM, parse structured output
    # Validate with Pydantic before returning
    ...
    return [EnrichedRecord(**r) for r in parsed_results]

Keep transforms testable. A pure function that takes a DataFrame and returns a DataFrame is easy to validate with sample data. A rat's nest of API calls and global state is not.

Layer 3: The Egress Layer (Data Out and APIs)

You've cleaned and enriched the data. Now the customer needs it somewhere useful: their data warehouse, a BI tool, an operational system, or a custom API you're building.

The Core Toolkit

  • SQLAlchemy + database-specific drivers: For pushing data to Postgres, MySQL, or SQL Server. Use to_sql with method='multi' for bulk inserts, or better, write to Parquet and use COPY for Postgres.
  • BigQuery / Snowflake / Redshift connectors: The customer almost certainly uses one. Know their Python SDKs and their idiosyncrasies (BigQuery's streaming buffer, Snowflake's PUT command for staged files).
  • FastAPI: When the deliverable is an API endpoint. FastAPI is fast to write, auto-generates OpenAPI docs that customers love, and integrates with Pydantic for request/response validation. Deploy it behind a simple Docker container or on a cloud function.
  • Apache Arrow Flight (advanced): For high-throughput columnar data transfer to systems that support it. Rarely needed for a POC, but impressive when you're moving 100M rows.

Pattern: The Write-Back Adapter

Write a single DataSink abstract class with concrete implementations for each destination. The orchestration layer (n8n or a simple script) calls sink.write(df). This makes it trivial to swap destinations when the customer changes their mind on day 3.

from abc import ABC, abstractmethod
import polars as pl

class DataSink(ABC):
    @abstractmethod
    def write(self, df: pl.DataFrame, table_name: str) -> int:
        """Returns rows written."""
        ...

class PostgresSink(DataSink):
    def write(self, df, table_name):
        # Use COPY or multi-row insert
        ...

class BigQuerySink(DataSink):
    def write(self, df, table_name):
        # Use load_table_from_dataframe or Parquet staging
        ...

Layer 4: The Demo Layer (Frontend and UX)

An FDE is not a full-stack engineer in the traditional sense, but you must be able to build a credible, interactive demo without a frontend team. The demo proves the data pipeline is real and lets the customer touch the output.

The Core Toolkit

  • Streamlit or Gradio: Streamlit for data-heavy dashboards and quick UIs. Gradio for ML-focused demos with file uploads and model outputs. Both let you build a functional UI in Python in under an hour. Streamlit's st.dataframe and st.plotly_chart cover 80% of demo needs.
  • Next.js (App Router) + shadcn/ui: When you need a more polished, custom UI that feels like a real product. shadcn/ui gives you accessible, copy-paste components. Use Next.js API routes as a thin proxy to your FastAPI backend or DuckDB queries. This is the stack for a demo that the customer's VP of Product will see.
  • Observable Framework: For data storytelling and interactive reports. Build static sites from data files with JavaScript reactivity. Excellent for a final deliverable that the customer's analysts can extend.
  • Plotly or ECharts: For charts inside any of the above. Plotly's Python bindings work in Streamlit; ECharts works well in React.

When to Use What

ScenarioTool
Internal tool, quick iterationStreamlit
Customer-facing demo, needs polishNext.js + shadcn/ui
Data report, analyst audienceObservable Framework
ML model demo with file I/OGradio

Layer 5: The Scaffolding Layer (Infra and Config)

You are deploying into the customer's environment—their AWS account, their VPC, their on-prem server. You need infrastructure that is reproducible, auditable, and easy for their team to maintain after you leave.

The Core Toolkit

  • Docker and Docker Compose: The universal packaging format. Every service you build should ship as a container. docker-compose.yml is your single-command demo launcher.
  • Terraform (or OpenTofu): When you need to provision cloud resources (RDS instances, S3 buckets, IAM roles) in the customer's account. Write modules that are small and obvious. The customer's cloud team will review your code.
  • GitHub Actions or GitLab CI: For CI/CD. Even a simple pipeline that runs pytest and builds a Docker image on push signals professionalism.
  • Nix (optional, high-signal): For reproducible development environments. If the customer's engineers use Nix, shipping a flake.nix that builds your entire toolchain is a power move.
  • Justfile or Makefile: A single just deploy or just demo-up command that runs the whole stack. Reduces the "it doesn't work on my machine" friction to zero.

The One-Command Demo

Your justfile should look something like:

demo-up:
    docker compose -f docker-compose.demo.yml up -d
    @echo "Demo running at http://localhost:8501"

ingest-sample:
    python -m pipeline.ingest --source sample_data/ --target duckdb://staging.db

validate:
    pytest tests/ -v

When you hand this to a customer engineer, they should be able to run the entire pipeline from scratch with one command. This is a trust-building mechanism.

The Integration Engineer's Survival Kit

Beyond the layered stack, there are tools you reach for in every engagement, regardless of the specific problem:

  • mitmproxy or Proxyman: For debugging API calls. When the customer's "REST API" returns XML with a 200 status code on errors, you need to see the raw traffic.
  • pgcli and litecli: Better REPLs for Postgres and SQLite/DuckDB. Syntax highlighting and autocomplete save brain cycles.
  • ngrok or Cloudflare Tunnel: Expose your local demo to the customer without deploying. Critical for showing progress on a daily standup call.
  • ffmpeg and ImageMagick: When the data includes media files. Convert, resize, extract frames—these are the Swiss Army knives.
  • VS Code with Remote SSH / Dev Containers: You'll be SSHing into customer jump boxes. Dev Containers ensure your environment is consistent.

The FDE Mindset: Tools Are Transient, Patterns Are Permanent

The specific tools will change. DuckDB might be replaced by something faster. Streamlit might lose to a new framework. What stays constant is the pattern: ingest, validate, transform, serve, and scaffold—all in a way that the customer can own after you leave.

If you're coming from a backend or frontend background and want to build this skillset systematically, read our roadmap for transitioning into FDE roles. For a sense of what the day-to-day actually looks like when you're wielding these tools under pressure, check out what an FDE actually does in a week.

FAQ

What is FDE at Palantir?

Forward Deployed Engineer is a role pioneered by Palantir Technologies. FDEs at Palantir are engineers who embed with customer organizations—government agencies, defense, healthcare, finance—to deploy and configure Palantir's platforms (Foundry, Gotham, AIP) against real, messy customer data. They write data pipelines, build operational workflows, and sometimes frontend applications, all while working directly with end-users and decision-makers. The role blends software engineering, data engineering, and consulting.

What is the FDE model?

The FDE model is a go-to-market and delivery approach where engineers, not just salespeople or consultants, are deployed directly into customer environments. They scope problems, build working solutions, and iterate based on immediate user feedback. The model shortens the feedback loop between product usage and engineering decisions. It's distinct from pure professional services because FDEs often contribute back to the core product based on patterns they see across deployments.

What is AI FDE in Palantir?

With the launch of Palantir's Artificial Intelligence Platform (AIP), the AI FDE role emerged. These engineers focus on deploying large language models, computer vision systems, and other AI capabilities into customer workflows. They might build a retrieval-augmented generation (RAG) pipeline over classified documents, fine-tune a model for a specific defense use case, or wire an LLM into an existing operational decision loop. The tools shift toward vector databases, embedding pipelines, and LLM orchestration, but the core FDE pattern—embed, build, ship, iterate—remains identical.

How to become an FDE?

The most reliable path is to build a T-shaped skillset: deep in backend or data engineering, with working proficiency across the full stack (infra, data, frontend). You need to demonstrate you can work directly with customers and ship under ambiguity. The FDE compensation bands and negotiation playbook covers what to expect when you get the offer. For hands-on practice, start building projects that mirror FDE work: pull data from a messy API, transform it, and present it in a simple UI. Document the process. The artifacts you create—a working pipeline, a clear README, a one-command demo—are your portfolio.

#tools#data-engineering#integrations#demos#developer-toolkit

Want to build like a Forward Deployed Engineer?

FDE Coach is a cohort-based program in frontend, backend, AWS, and AI. Build real products and get referred to 200+ hiring partners.

Explore the program

More forward deployed

August 15 · 0d left
Enroll Now