Echo → Delta → Product

FDE in MRRC
FT‑710

Forward Deployed Engineering across 12 cycles: from initial baseline (V1.0) to multi-client TX ownership fix (V2.1) — every step evidenced, counts in the VLSC ledger reusable assets.

FDE = Echo + Delta + Product

Demand discovery → rapid prototyping → abstraction & generalization. Each cycle turns one field lesson into permanent leverage.

FDE = Echo + Delta + Product
Demand Discovery → Rapid Prototyping → Abstraction & Generalization
🔍

Echo

"What does the user really need?"
  • Embedded in real FT-710 daily operation
  • F4HTB upstream evaluated, gaps identified
  • MRRC 14-month operational gap as signal proxy
  • ~20% of cycle time

Delta

"What's the fastest thing that works?"
  • Each cycle: 1 concrete field signal → 1 working fix
  • SDD updated concurrently, not retrospectively
  • Prototype validates riskiest assumption first
  • ~55% of cycle time
🧩

Product

"How to serve the next 10 users?"
  • 6 reusable assets extracted from Delta hacks
  • Tagged dual-codec audio as stable contract
  • 15-chapter SDD as three-level Harness
  • ~25% of cycle time

Start from Leverage

FT-710 inherited 6+ reusable assets from the MRRC project. Never start from zero.

Asset From How FT-710 Uses It
PTT safety (7-layer model) MRRC Ch15, server.py PTT handler — fire-and-forget TX0 + 500ms poll
AudioWorklet + Opus WASM MRRC rx_worklet_processor.js, tx_opus_worker.js
Glassmorphism design system MRRC css/octen.css — dark amber theme, safe-area support
Multi-instance architecture MRRC server.py lifespan management, env-var config
SDD template (IBM TeamSD) MRRC / SunMRRC All 15 chapters — harness structure reused
Website deploy pattern MRRC / SunMRRC website/deploy.sh + build_sdd.py

Field Signals, Version Steps

Each SDD version is one Echo → Delta → Product loop. Every cycle driven by a real field signal, not a speculative feature.

12
FDE Cycles
16d
V1.0 → V2.1
262
Tests
15
Arch Decisions
6
New Assets
# SDD Date Echo Signal Delta Challenge Product Output
1 V1.0 Jul 6 F4HTB evaluation + MRRC patterns Full baseline: CAT, audio, scope, polling, PTT safety 15-chapter SDD, 7 core modules
2 V1.1 Jul 6 "16kHz TX crackling" Unify TX pipeline to 48kHz AD-011: 48kHz codec + 44.1kHz bridge
3 V1.2 Jul 8 "Freq drifts ~20Hz, TX meters blank" VS/FB active VFO, RM calibration AD-012/013: VFO + meter tables
4 V1.3 Jul 8 "TUNE doesn't work, PTT latency" Priority CAT preemption, TX2+AC003 AD-015: _cancel_polls
5 V1.4 Jul 12 "Waterfall alone is hard to read" FFT spectrum line plot, install.sh FFT overlay, dev tooling
6 V1.5 Jul 18 "SDD docs stale vs. runtime" Doc sync: PTT layers, polling naming V1.5 docs + issues I6/I7
7 V1.6 Jul 18 "SSB filter change — can't hear difference" RX zero-audio watchdog, TX Opus truth sync Dead-carrier fix, WS 403 flow
8 V1.7 Jul 19 "Filter switch works 50% of the time" Stale-read discard, 150ms SH0 read-back 3 regression tests
9 V1.8 Jul 21 "PTT watchdog dead code, TUNE accidental tap" PTTManager routing, press-and-hold, keyboard guards Space-bar PTT, mobile layout
10 V1.9 Jul 21 "USB reconnect → waterfall frozen forever" on_reconnected hook for scope-init CAT 2 regression tests
11 V2.0 Jul 21 "Spurious 'radio disconnected' during operation" NoneType guard + recovery path 1 regression test
12 V2.1 Jul 22 "PTT keys but no voice / no RF power" TX uplink promote + claim, per-session counters Automated tests + TX session: logging

What The Cycles Teach

1

Inherited leverage is the unfair advantage

FT-710 didn't re-solve PTT safety, WDSP, or multi-instance. MRRC's 15-cycle Product phase turned those into reusable abstractions. Starting from zero would have cost months.

2

Version history IS the FDE log

14-version-history.md records every Echo signal, Delta fix, and Product output — in a machine- and human-readable format. No separate "FDE tracker" needed.

3

One cycle = one real problem

Zero speculative features. Each Delta cycle was triggered by a concrete Echo event: a log line, a user observation, an on-air misbehavior.

4

Documentation is concurrent

SDD chapters updated during each Delta phase, not after. The harness records what worked, not what was planned. Your 6-month-future self is the primary audience.

5

Prototype validates the riskiest assumption

V1.0 proved direct CAT works. V1.1 proved 48kHz audio. V1.9 proved scope-init needs re-run after USB reconnect. V2.1 proved multi-client TX needs ownership promotion.

6

Operations IS Echo

MRRC's 14-month operational gap accumulated real pain points. FT-710 benefits from that proxy — but also generates its own Echo through daily on-air use.

SDD as Three-Level Lock-In

The 15-chapter SDD locks down WHAT, HOW, and DELIVERABLE — fed by Echo, Delta, and Product phases respectively.

🎯

Business Harness

Defines WHAT — the problem to solve
  • Ch2: Business direction
  • Ch4: System context
  • Ch5: 65 Non-functional requirements
  • Ch6: 8 Use cases
  • Ch13: Feasibility assessment
⚙️

Technical Harness

Defines HOW — architecture & implementation
  • Ch7: Subject area model
  • Ch8: 15 Architecture decisions
  • Ch9: Architecture overview
  • Ch10: Service model (4× WebSocket)
  • Ch11: Component model (7 modules)
  • Ch12: Operational model
📦

Product Harness

Defines the DELIVERABLE — what ships
  • Ch1: Executive summary
  • Ch3: Project definition
  • Ch14: Version history (FDE cycle log)
  • Ch15: PTT safety architecture
  • Gravel Road → Highway catalog

The critical insight: don't let documentation drive development — let development drive documentation. After each FDE phase, the output updates the harness. The harness is not a plan — it's a record of what worked.

Reusable Assets Created

Each Delta hack that became a Product-phase abstraction — ready for the next FT-710 project.

Gravel Road (Delta Hack) Highway (Product Abstraction) Reusable For
FT4222 ctypes crashed asyncio scope_pipe.py — standalone subprocess with length-prefixed stdout Any FTDI SPI project
44.1↔48kHz mismatch crackles audio_resample.py — frame-aligned linear SRC (960↔882) Any 44.1→48kHz bridge
Fixed-interval polling missed state poll_scheduler.py — skip-on-command, stale-read discard, on_reconnected hook Any CAT-controlled radio
Raw PCM only, no codec flexibility Tagged dual-codec: 1-byte tag (0x00=PCM, 0x01=Opus) + payload Any codec-flexible audio transport
Ad-hoc scope data parsing scope_frame.py — shared format, sync pattern, quality metrics Any FT-710 scope consumer
TX failures with zero diagnostics TX session: — per-PTT-release counters + PCM peak Any TX audio pipeline

Common FDE Pitfalls

Fake Echo

Imagined requirements without field presence — "I think the user wants X"

Spend at least 1 week in the actual usage scenario. Every FT-710 cycle started from a real log line.

Skipping the Product Phase

Delta code shipped directly without generalization — the gravel road stays gravel

Reserve at least 20% of every cycle for abstraction and documentation. scope_pipe.py is a highway because someone took the time.

Premature Abstraction

Writing a generic framework before scenario #1 is validated — future-proofing that never pays off

Wait until at least 2 similar scenarios succeed before abstracting. The FT-710's tagged audio format earned its abstraction.

Starting from Zero

New project, blank repo, no leverage inventory — re-solving problems MRRC already solved

Always audit existing assets first. FT-710 inherited 6 MRRC modules. Your leverage is your unfair advantage.

Requirement Bloat (Echo)

Defined 10 demos with enormous scope — "we'll do all of them this cycle"

Pick 1 demo per cycle. Ship it. Then do the next. Each SDD version addresses exactly one field signal.

Premature Optimization (Delta)

Full error handling + logging + config in prototype #1 — spending weeks polishing unvalidated code

Prototype #1 validates only the riskiest assumption. Polish later. V1.0 was a working baseline in 1 day.

6 Steps to Ship the Next FT-710 Project

A repeatable playbook derived from this project's 12-cycle FDE journey.

# Step FT-710 Application
1 Start from Leverage Inherited 6+ MRRC assets — PTT safety, WDSP, multi-instance, Glassmorphism, SDD template, website deploy
2 Define the Harness SDD V1.0: 15 chapters, 15 ADs, 65 NFRs — written concurrently with first commit
3 Echo: Deploy Field deployment on macOS + Raspberry Pi + Windows. Daily operation as signal generator
4 Delta: Ship Each SDD version within 24h of Echo signal. 12 cycles in 16 days
5 Product: Abstract 6 reusable modules. Dual-codec tagging. Adaptive polling as pattern
6 Accelerate Next FT-710 client inherits WebSocket protocol as stable contract — zero server changes needed

Apply FDE to Your FT-710 Project

The full SDD, source code, and FDE cycle log are open source. Start your own Echo→Delta→Product journey.

Source Code SDD Docs Version History VLSC Agentic Engineering

What this repository hands an agent

And what it never lets the agent sign off.

Contracts loaded before editing

AGENTS.md, constraints.json (21 rules), the pre-edit hook ships as an installable snippet (install_hooks.py) and is not wired in this checkout, so no automated pre-edit gate is claimed here.

TX ownership and PTT closure on a live rig

Who owns the transmitter at any moment, and every PTT closure on a real radio, is signed off by a human at the station.

Contract left behind

The version-step ledger and the multi-client TX ownership rules remain as the contract for whoever edits next.