By Fatskills Exam Guides Team — the exam nerds behind 28,500+ quizzes and 2.1M practice questions across 500+ global exams.
As a Forward Deployed Engineer (FDE), you’ll often need to build, deploy, and iterate on dashboards and data products under tight deadlines—whether for a military ops center, a disaster response team, or an enterprise customer with strict security constraints. These tools turn raw data into actionable insights, but the real challenge isn’t just making a pretty chart—it’s deploying it securely, ensuring it works in constrained environments, and adapting it to real-world chaos (e.g., air-gapped networks, last-minute customer pivots, or data that’s messy, incomplete, or classified).
Field Example:You’re deployed to a classified military base where analysts need real-time visibility into drone footage metadata. The customer insists on a Tableau dashboard, but their network is air-gapped, their data is stored in a proprietary format, and their IT team won’t allow Docker. You have 48 hours to deliver something usable. You: 1. Reverse-engineer their data schema (no docs exist).2. Write a Python script to clean and transform the data into a SQLite DB (since they won’t let you install PostgreSQL).3. Build a lightweight React dashboard (since Tableau Desktop won’t run without internet for activation).4. Burn it to a DVD (their only approved transfer method) and train the team in person.
This guide covers how to do this efficiently, securely, and repeatably—whether you’re using Superset, Tableau, or a custom React app.
Goal: Avoid building the wrong thing.Actions:- Ask the 5 Whys (e.g., "Why do you need a dashboard?" → "To track drone footage." → "Why?" → "To find anomalies." → "Why?" → "Because we’re missing threats.").- Map the data flow: - Where does the data live? (SQL DB? CSV files? A proprietary system?) - Who owns it? (IT? A contractor? A classified team?) - What’s the refresh rate? (Real-time? Daily? Ad-hoc?) - Check constraints: - Network: Air-gapped? Firewall rules? VPN required? - Security: ATO/ACO needed? Can you use Docker? Are there approved software lists? - User skills: Will they use Tableau, or do they need a click-and-forget React app?
Field Command:
# Quick data profiling (if you have SSH access) ssh user@bastion -L 5432:db.internal:5432 # Port-forward to DB python -c "import pandas as pd; df = pd.read_sql('SELECT * FROM logs LIMIT 1000', 'postgresql://user:pass@localhost:5432/db'); print(df.describe())"
Goal: Pick the fastest, most deployable solution.Options:| Tool | Best For | Field Notes | |---------------|-----------------------------------|-----------------------------------------------------------------------------| | Superset | Quick, offline, Docker-friendly | Default for FDEs. Works air-gapped, supports SQL, Python, and REST APIs. | | Tableau | Enterprise, polished dashboards | Avoid if air-gapped (requires internet for activation). Heavy license costs. | | Metabase | Simple, open-source, lightweight | Good for non-technical users, but limited customization. | | React + D3| Custom, embedded, high-performance| Use when BI tools are too rigid. Requires more dev time but scales. |
Decision Tree:- Need it in 24 hours? → Superset (Docker + SQLite).- Customer insists on Tableau? → Push back (or use Tableau Public + export to PDF).- Data is messy/real-time? → React + Plotly (more control).- Air-gapped? → Superset or React (Tableau won’t work).
Goal: Get something usable in front of the customer ASAP.Actions:- For Superset: bash # Quick Superset setup (Docker, air-gapped) docker run -d -p 8080:8088 --name superset apache/superset docker exec -it superset superset fab create-admin --username admin --firstname Superset --lastname Admin --email [email protected] --password admin docker exec -it superset superset db upgrade docker exec -it superset superset init - Connect to data: Use SQLite (for air-gapped) or PostgreSQL (if allowed). - Build a dashboard: Start with 1-2 key charts (e.g., time-series, bar chart). - Export as JSON (for backup) or PDF (for offline sharing).
bash # Quick Superset setup (Docker, air-gapped) docker run -d -p 8080:8088 --name superset apache/superset docker exec -it superset superset fab create-admin --username admin --firstname Superset --lastname Admin --email [email protected] --password admin docker exec -it superset superset db upgrade docker exec -it superset superset init
bash # Quick React setup (offline) npx create-react-app dashboard --template typescript cd dashboard npm install plotly.js react-plotly.js
Deploy: Build static files (npm run build) and burn to DVD/USB.
npm run build
For Tableau (if forced):
Goal: Get the dashboard running in the customer’s environment without breaking security.Actions:- For air-gapped: - Package dependencies offline: bash # For Python (Superset) pip download -d ./deps pandas sqlalchemy # Download wheels # For React npm install --production # Then zip node_modules - Transfer via approved media (DVD, USB, sneakernet). - Test in a staging environment that mirrors the customer’s setup (same OS, firewall rules, etc.).
bash # For Python (Superset) pip download -d ./deps pandas sqlalchemy # Download wheels # For React npm install --production # Then zip node_modules
bash ssh -L 8080:localhost:8080 user@bastion # Forward Superset port
Check firewall rules (e.g., iptables -L or netsh advfirewall show allprofiles).
iptables -L
netsh advfirewall show allprofiles
For embedded dashboards (React):
Goal: Ensure the customer can use and maintain the dashboard.Actions:- Write a 1-pager (no fluff): - How to access (URL, credentials). - How to refresh data (e.g., "Run python update_data.py"). - Who to call (your contact info + backup).- Record a 2-minute Loom video (screen recording) showing: - How to filter data. - How to export results.- Set up a "war room" Slack channel for the first 48 hours (expect questions).
python update_data.py
Goal: Adapt to new requirements, data changes, or security issues.Actions:- Monitor usage: - Superset: Check the query logs (SELECT * FROM logs WHERE action = 'query'). - React: Add Google Analytics (if allowed) or log to a file.- Plan for hotfixes: - Bad data? Write a Python script to clean it. - Broken chart? Roll back to a known-good version (use Git tags).- Document everything (even if it’s just a Google Doc). Future you (or the next FDE) will thank you.
SELECT * FROM logs WHERE action = 'query'
df.describe()
df.isnull().sum()
How to Respond:- Acknowledge: "I understand this is important to you." - Clarify: "Can you help me understand the mission impact? What problem does this solve?" - Propose: "Here’s a lightweight alternative that fits within our constraints. Can we test it first?" - Escalate: If they insist, document the request and get written approval (CYA).
Why? Customers will change scope mid-mission. Your job is to protect the timeline while keeping them happy.
How to Debug:1. Reproduce the issue in a staging environment that mirrors prod.2. Check logs (docker logs superset, journalctl -u nginx).3. Test connectivity (telnet db.internal 5432, curl http://api.internal).4. Isolate the problem (is it the data, the network, or the code?).5. Write a hotfix (e.g., a Python script to clean bad data).
docker logs superset
journalctl -u nginx
telnet db.internal 5432
curl http://api.internal
Why? In the field, dev != prod. Always test in the exact customer environment.
How to Execute:- Use Superset + SQLite (no internet, no complex setup).- Burn the dashboard to a DVD (approved transfer method).- Train the team in person (no remote access).- Document everything (even if it’s just a text file on the DVD).
Why? Classified environments don’t allow remote access. You’ll physically deploy the solution.
Answer: Download the Superset source code and dependencies offline (e.g., pip download -d ./deps superset), then transfer via USB/DVD and install manually.Why? Air-gapped means no internet, so you can’t pull Docker images or PyPI packages.
pip download -d ./deps superset
Answer: Write a Python script to parse the binary file (using struct or a library like construct), convert it to CSV/SQLite, then load it into Superset/React.Why? You can’t assume standard formats in the field. Reverse-engineer the data first.
struct
construct
node_modules
Answer: Build the React app into static files (npm run build), then serve them via Nginx/Apache (no Node.js runtime needed).Why? Static files don’t require a backend, so they’re easier to approve.
8088
8080:8088
./build
sqlite3 data.db
.mode csv
.import data.csv table
ssh -L 5432:db.internal:5432 user@bastion
ufw status
python -c "import pandas as pd; print(pd.read_csv('data.csv').describe())"
Join 4M+ learners. Unlock unlimited quizzes, wrong-answer tracking, flashcards + reminders, study guides, and 1-on-1 challenges.