DAA System — Sizing Estimate
| Method | Architecture-driven PERT (v3), revised with codebase analysis |
| Last Updated | 2026-03-22 |
| Source PRD | DAA PRD |
| Stories | 122 |
| Expected Duration | ~420 days (down from 587 greenfield) |
| 9-Person Team | ~14-17 weeks (moderate) |
| Confidence | High (Phases 1-4) / Medium (Phases 5-6) |
Executive Summary
The DAA system is sized at 122 stories across 6 phases, with a revised PERT expected duration of ~420 days of active work time (~84 weeks). This is down from a greenfield estimate of 587 days, reflecting significant existing code and services that can be leveraged.
Phase 1 is the largest beneficiary of this revision – reduced from 244.7 days to ~93 days (-62%) because most of the detect-and-notify capability already exists in Clojure-based Themis services and the Go-based flight-traffic-exchanger. Phase 1 is primarily an AI-assisted port and integration effort, not greenfield development.
Existing Code Leverage (Phase 1)
A codebase exploration revealed that the core Phase 1 functionality already exists across multiple services:
| Phase 1 Feature | Existing Service | What Exists | What’s Needed |
|---|---|---|---|
| OCDV/OCAV/WC/NMAC algorithms | duck/daac.cljc (utm-clojure-kit) | ~300 lines of pure functions, all volume checks | AI-port to Go, update constants to PRD values |
| ADS-B ingestion (CAT021 ASTERIX) | utm-themis-daa (Clojure, UDP) | Full parser, 1 Hz ingestion, geo-filter | Already consumed by flight-traffic-exchanger |
| Plot dedup + staleness | utm-themis-daa + flight-traffic-exchanger | Dedup by aircraft ID, 5s staleness | Already in Go service |
| Geo filtering (site proximity) | flight-traffic-exchanger | Provider abstraction, site-based filtering | Config update to 16,093m |
| Intrusion state classification | duck/daac.cljc | All Clear through NMAC states | Port to Go, add Clear to Proceed (new) |
| Real-time data streaming | flight-traffic-exchanger | gRPC-Web streaming, observation cache | Add intrusion alert events to stream |
| Compliance reporting | utm-themis-api | Report endpoints, intrusion summaries | Port to Go or keep as-is initially |
| Air traffic viz + color coding | Apollo TrafficObservationsLayer | Basic aircraft display on map | Extend with DAA status colors |
| OCDV/OCAV circle rendering | utm-themis-spaces (ClojureScript) | Working prototype with interactive demo | Port to React (adapt OperationalAreaLayer) |
| Alert infrastructure | Apollo notification system | TTS, toast notifications, severity levels | Add DAA-specific alert types + audio tones |
| C2 command scaffolding | uncrew-collision-flight-controller | Hold, RTL, GoToCLZ, mission replan | Extend for Crouch command (Phase 2) |
AI-Assisted Translation Strategy
The Clojure DAA algorithm code (duck/daac.cljc) is ideal for AI translation:
- Pure functions with no side effects
- Well-defined inputs (lat, lon, altitude, airspeed) and outputs (intrusion state)
- Comprehensive test vectors available in
utm-clojure-kittest suite - Target: port to Go with property-based tests validating output equivalence
Delivery Timeline (9-Person Team)
Assumptions:
- 9 engineers available full-time
- Completion rate: 0.77 (from Jira historical data – accounts for meetings, reviews, overhead)
- Effective team capacity: 9 x 5 x 0.77 = 34.7 productive days/week
- Phase dependencies constrain parallelism (not all phases can run concurrently)
Per-Phase Delivery Schedule
| Phase | Work (days) | Greenfield Est | Savings | Team Size | Calendar Duration |
|---|---|---|---|---|---|
| 1 – Detect & Notify | 93 | 244.7 | -62% | 9 | 2.7 weeks |
| 2 – Detect & Automated Avoid | 90 | 105.3 | -15% | 7 | 3.3 weeks |
| 3 – Onboard ADS-B Sensor Integration | 36.1 | 36.1 | – | 2 | 4.7 weeks |
| 4 – Onboard + Cloud DAA Orchestration | 82.3 | 82.3 | – | 6 | 3.6 weeks |
| 5 – Terrain & Traffic-Aware Crouch | 52.4 | 52.4 | – | 3 | 4.5 weeks |
| 6 – UAS Performance Calibration | 66.2 | 66.2 | – | 9 | 1.9 weeks |
| Total | ~420 | 587.0 | -28% |
Delivery Scenarios
gantt
title DAA Delivery Timeline — Revised (9-person team)
dateFormat YYYY-MM-DD
axisFormat %b %d
section Moderate
Phase 1 Detect & Notify :p1, 2026-04-01, 21d
Phase 2 Automated Avoid :p2, after p1, 24d
Phase 3 Onboard ADS-B :p3, after p1, 33d
Phase 4 Dual-Authority DAA :p4, after p2, 25d
Phase 5 Terrain Crouch :p5, after p2, 32d
Phase 6 UAS Calibration :p6, after p4, 14d
Scenario A – Aggressive (max parallelism, no buffer):
| Window | Activity | Duration |
|---|---|---|
| Wk 1-3 | Phase 1 (full team, AI-assisted port) | 3 wk |
| Wk 4-7 | Phase 2 (7 ppl) + Phase 3 (2 ppl) | 4 wk |
| Wk 8-12 | Phase 4 (6 ppl) + Phase 5 (3 ppl) | 4 wk |
| Wk 13-14 | Phase 6 (full team) | 2 wk |
| Total | ~14 weeks / 3.5 months |
Scenario B – Moderate (recommended, ~15% buffer):
| Window | Activity | Duration |
|---|---|---|
| Wk 1-4 | Phase 1 | 4 wk |
| Wk 5-9 | Phase 2 + Phase 3 | 5 wk |
| Wk 10-14 | Phase 4 + Phase 5 | 5 wk |
| Wk 15-17 | Phase 6 | 3 wk |
| Total | ~17 weeks / 4 months |
Scenario C – Conservative (pessimistic + 25% schedule risk):
| Total | ~22 weeks / 5.5 months |
Core DAA Capability (Phases 1-4 only)
If Phases 5 and 6 are deferred, the core DAA system (detect, avoid, onboard detection, dual-authority) is:
| Aggressive | Moderate | Conservative | |
|---|---|---|---|
| Work days | 301.4 | 301.4 | 301.4 |
| Calendar | ~11 weeks | ~14 weeks | ~17 weeks |
| Months | ~2.5 | ~3.5 | ~4 |
Domain Staffing Guidance
| Domain | Share of Work | Suggested Allocation (of 9) | Notes |
|---|---|---|---|
| backend-go | 58% | 5-6 | Heaviest domain; AI-assisted Clojure port in Phase 1 |
| firmware-cpp | 21% | 1-2 | Peaks in Phases 3-4 and 6 |
| frontend-react | 17% | 2 | Steady across phases; leverage existing layers |
| data-pipeline | 3% | 0-1 | Phase 5 only; can be backend-go engineers |
| infrastructure | 1% | 0 | One-time HA setup; can be backend or DevOps |
Further Optimization Opportunities
These estimates are conservative. Areas where further reduction is likely:
- Keep Clojure reporting initially – Phase 1 reporting stories (~10d) could be deferred by keeping
utm-themis-apireport endpoints running alongside the new Go services during the transition. - Shared test vectors – The Clojure test suite can be exported as JSON fixtures for Go tests, eliminating redundant test case authoring.
- AI-assisted frontend port – The ClojureScript visualization code in
utm-themis-spaces(traffic layers, OCDV/OCAV circles) can be AI-translated to React/TypeScript with the existingTrafficObservationsLayeras the target scaffold. - Phase 2 reduction – The collision service already has telemetry subscriptions, C2 command integration (Hold, RTL, GoToCLZ), and mission state tracking. Adding Crouch as a new command type is incremental.
- Proto reuse –
flight-traffic-exchangeralready defines observation protos. Extending them for intrusion state is incremental, not greenfield.
Per-Phase Breakdown
| Phase | Stories | Expected (days) | Range (95% CI) | Weeks | Confidence |
|---|---|---|---|---|---|
| 1 – Detect & Notify | 59 | 244.7 | 226.4 – 263.0 | 48.9 | High |
| 2 – Detect & Automated Avoid | 20 | 105.3 | 92.1 – 118.5 | 21.1 | High |
| 3 – Onboard ADS-B Sensor Integration | 7 | 36.1 | 27.2 – 45.0 | 7.2 | High |
| 4 – Onboard + Cloud DAA Orchestration | 15 | 82.3 | 69.7 – 94.9 | 16.5 | High |
| 5 – Terrain & Traffic-Aware Crouch Targeting | 10 | 52.4 | 42.9 – 61.9 | 10.5 | Medium |
| 6 – UAS Performance Calibration & Latency Tuning | 11 | 66.2 | 54.4 – 78.0 | 13.2 | Medium |
| Total | 122 | 587.0 | 555.8 – 618.2 | 117.4 | High |
Per-Phase Effort Distribution
%%{init: {'theme': 'neutral'}}%%
graph LR
subgraph "Phase Effort (expected days)"
P1["Phase 1: Detect & Notify<br/>244.7d | 59 stories"]
P2["Phase 2: Detect & Automated Avoid<br/>105.3d | 20 stories"]
P3["Phase 3: Onboard ADS-B Sensor<br/>36.1d | 7 stories"]
P4["Phase 4: Onboard + Cloud Orchestration<br/>82.3d | 15 stories"]
P5["Phase 5: Terrain & Traffic Crouch<br/>52.4d | 10 stories"]
P6["Phase 6: UAS Performance Calibration<br/>66.2d | 11 stories"]
end
P1 --> P2 --> P3 --> P4 --> P5 --> P6
%%{init: {'theme': 'neutral'}}%%
xychart-beta
title "Expected Days per Phase"
x-axis ["P1: Detect", "P2: Avoid", "P3: ADS-B", "P4: Orchestration", "P5: Terrain", "P6: Calibration"]
y-axis "Days" 0 --> 260
bar [244.7, 105.3, 36.1, 82.3, 52.4, 66.2]
Per-Domain Breakdown
| Domain | Stories | Expected (days) | Share |
|---|---|---|---|
| backend-go | 80 | 370.5 | 63.1% |
| firmware-cpp | 14 | 105.8 | 18.0% |
| frontend-react | 25 | 89.2 | 15.2% |
| data-pipeline | 2 | 16.2 | 2.8% |
| infrastructure | 1 | 5.3 | 0.9% |
| Total | 122 | 587.0 | 100% |
Phase Details
Phase 1: Detect & Notify (59 stories, 244.7 days)
Core cloud-side detection engine, GCS visualization, alerting, and compliance logging.
| # | Story | Domain | Repo | Opt | Likely | Pess | Expected |
|---|---|---|---|---|---|---|---|
| 1 | Ingest ADS-B plots at 1-2 Hz from traffic source | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 2 | Ingest drone telemetry at 1-2 Hz per active flight | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 3 | Plot dedup – maintain latest position per aircraft ID | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 4 | Plot staleness removal – 5s timeout | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 5 | Aircraft type identification from ADS-B emitter category | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 7 | Dynamic site management – hot-reload | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 8 | Multi-region support – 1000+ sites | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 9 | Site proximity filtering – 16,093m radius | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 10 | OCDV detection – cylinder geometry | backend-go | collision-flight-controller | 5 | 10 | 20 | 10.83 |
| 11 | OCAV detection – dynamic radius | backend-go | collision-flight-controller | 5 | 10 | 20 | 10.83 |
| 12 | OCAV radius upper bound capping | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 13 | Time-to-avoid computation – 8-component sum | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 14 | DAA geometric constants – configurable | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 15 | DAA timing parameters baseline | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 16 | DAA timeline selection per surveillance type + UA model | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 17 | Unknown altitude handling – assume co-altitude | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 18 | Unknown airspeed handling – assume max 77.17 m/s | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 19 | 6-state intrusion classification | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 20 | Intrusion state transition event emission | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 21 | Multi-drone evaluation – 50 active, 100 capacity | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 22 | Ended flight cleanup – 60 min timeout | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 23 | Calculation frequency – per-measurement / 1 Hz | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 24 | Warning alert data constraint – current data only | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 25 | Clear to Proceed logic – 4-measurement separation | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 26 | Alert latency <=2s from ADS-B receipt | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 27 | 1000 plot updates/sec throughput | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 28 | Cloud processing latency <500ms P99 | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 29 | Stream connection recovery + operator indication | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 30 | DAA health gate for BVLOS mission approval | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 31 | DAA service unavailability alert + crouch after 10s | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 32 | DAA service recovery – notify, resume, confirm | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 33 | BVLOS scope enforcement | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 34 | 99.9% uptime SLA – arch/infra | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 35 | Intrusion logging – per-second, full fields | backend-go | collision-flight-controller | 5 | 10 | 20 | 10.83 |
| 36 | Differentiated data retention – 30d / permanent | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 37 | Compliance report generation | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 38 | Report export (CSV/XLSX/PDF) | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 39 | Report access control – supervisor/admin only | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 40 | Aircraft icons – intrusion status color-coding | frontend-react | apollo-frontend | 0.5 | 2 | 5 | 2.25 |
| 41 | Aircraft detail panel – DAA fields | frontend-react | apollo-frontend | 0.5 | 2 | 5 | 2.25 |
| 42 | Stale data indicators | frontend-react | apollo-frontend | 0.5 | 2 | 5 | 2.25 |
| 43 | Mission console traffic scope – OCDV radius | frontend-react | apollo-frontend | 0.5 | 2 | 5 | 2.25 |
| 44 | OCAV circle rendering – dynamic, red | frontend-react | apollo-frontend | 2 | 5 | 10 | 5.33 |
| 45 | OCDV circle rendering – yellow, toggle | frontend-react | apollo-frontend | 2 | 5 | 10 | 5.33 |
| 46 | Alert circle position tracking + lifecycle | frontend-react | apollo-frontend | 0.5 | 2 | 5 | 2.25 |
| 47 | Audio alert system – 4 levels, queuing | frontend-react | apollo-frontend | 2 | 5 | 10 | 5.33 |
| 48 | Audio audibility check pre-takeoff | frontend-react | apollo-frontend | 2 | 5 | 10 | 5.33 |
| 49 | Volume control | frontend-react | apollo-frontend | 0.5 | 2 | 5 | 2.25 |
| 50 | Suppress audio on page load | frontend-react | apollo-frontend | 0.5 | 2 | 5 | 2.25 |
| 51 | Active alert list – bearing, velocity, range | frontend-react | apollo-frontend | 2 | 5 | 10 | 5.33 |
| 52 | Alert severity sorting + CPA secondary sort | frontend-react | apollo-frontend | 2 | 5 | 10 | 5.33 |
| 53 | Alert-to-map navigation | frontend-react | apollo-frontend | 0.5 | 2 | 5 | 2.25 |
| 54 | Alert count badge with color distinction | frontend-react | apollo-frontend | 0.5 | 2 | 5 | 2.25 |
| 55 | Alert auto-resolution on OCDV exit | frontend-react | apollo-frontend | 0.5 | 2 | 5 | 2.25 |
| 56 | Intruder selection highlights alert in list | frontend-react | apollo-frontend | 0.5 | 2 | 5 | 2.25 |
| 57 | End-to-end alert latency <=3s | frontend-react | apollo-frontend | 2 | 5 | 10 | 5.33 |
| 58 | 15 fps with 100 aircraft rendered | frontend-react | apollo-frontend | 2 | 5 | 10 | 5.33 |
| 59 | Define DAA proto messages | backend-go | api-private | 2 | 5 | 10 | 5.33 |
| 60 | HA deployment for 99.9% SLA | infrastructure | infrastructure | 2 | 5 | 10 | 5.33 |
Phase 2: Detect & Automated Avoid (20 stories, 105.3 days)
Automated crouch maneuver execution, avoidance state machine, and degraded-mode handling.
| # | Story | Domain | Repo | Opt | Likely | Pess | Expected |
|---|---|---|---|---|---|---|---|
| 6 | Telemetry staleness escalation during active avoidance | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 61 | Notify-then-act path – transmit, wait, crouch | backend-go | collision-flight-controller | 5 | 10 | 20 | 10.83 |
| 62 | Act-and-notify path – immediate crouch | backend-go | collision-flight-controller | 5 | 10 | 20 | 10.83 |
| 64 | Loss of Well Clear response – immediate crouch | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 65 | NMAC response – continue existing descent | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 66 | Notification threshold – configurable 15s baseline | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 67 | Crouch initiation latency <=500ms | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 68 | Crouch confirmation to backend within 1s | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 69 | Non-confirmation escalation after 3s | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 70 | Maximum crouch duration – hold at min altitude | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 71 | Crouch maneuver definition (pause + descend + hold) | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 72 | Clear to Resume – all clear + operator confirm | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 73 | Multiple intrusion handling – continue, log separately | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 74 | Avoidance during lost-link RTH | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 75 | Cloud traffic provider failure – crouch all BVLOS | backend-go | collision-flight-controller | 5 | 10 | 20 | 10.83 |
| 76 | C2 loss with VOs – continue detection, alert VOs | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 77 | Prioritized alerting – actively controlled > supervised | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 79 | Integrate DAA crouch trigger into safety_crouch_fsm | firmware-cpp | mavlink-shim | 3 | 7.5 | 15 | 8.00 |
| 80 | Buffer encounter logs during C2 loss | firmware-cpp | mavlink-shim | 0.8 | 3 | 7.5 | 3.38 |
| 81 | Clear-to-Resume UI with operator confirmation gate | frontend-react | apollo-frontend | 2 | 5 | 10 | 5.33 |
Phase 3: Onboard ADS-B Sensor Integration (7 stories, 36.1 days)
Airborne ADS-B receiver relay, validation, buffering, and cloud-side source fusion. This phase introduces the dual-source (ground + airborne) traffic picture.
| # | Story | Domain | Repo | Opt | Likely | Pess | Expected |
|---|---|---|---|---|---|---|---|
| 82 | Onboard ADS-B receiver relay to cloud | firmware-cpp | mavlink-shim | 7.5 | 15 | 30 | 16.25 |
| 92 | ADS-B receiver parameter configuration from cloud | firmware-cpp | mavlink-shim | 1 | 3 | 7 | 3.33 |
| 93 | Onboard ADS-B validation (lat/lon/speed/alt/ICAO) | firmware-cpp | mavlink-shim | 1 | 3 | 7 | 3.33 |
| 94 | ADS-B relay buffering during C2 loss (60s buffer) | firmware-cpp | mavlink-shim | 1 | 3 | 7 | 3.33 |
| 95 | Cloud ADS-B source fusion – dedup by ICAO | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 96 | Traffic source attribution tagging | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 97 | Source attribution display in GCS traffic view | frontend-react | apollo-frontend | 0.5 | 2 | 5 | 2.25 |
Phase 4: Onboard + Cloud DAA Orchestration (15 stories, 82.3 days)
Porting detection algorithms to onboard C++, dual-mode cloud/onboard operation, handoff logic, and consistency verification between the two detection paths.
| # | Story | Domain | Repo | Opt | Likely | Pess | Expected |
|---|---|---|---|---|---|---|---|
| 63 | Autonomous path – crouch without backend when C2 lost | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 78 | Autonomous recovery after C2 loss – 60s clear | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 83 | Onboard conflict detection – port OCDV/OCAV to C++ | firmware-cpp | mavlink-shim | 7.5 | 15 | 30 | 16.25 |
| 84 | Onboard-to-cloud detection handoff / dual-mode | firmware-cpp | mavlink-shim | 3 | 7.5 | 15 | 8.00 |
| 85 | Onboard sensor failure handling per UA model | firmware-cpp | mavlink-shim | 3 | 7.5 | 15 | 8.00 |
| 86 | GPS degraded/loss behavior for onboard DAA | firmware-cpp | mavlink-shim | 0.8 | 3 | 7.5 | 3.38 |
| 87 | Cloud fallback when onboard detection active | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 88 | Simultaneous cloud + onboard failure handling | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 89 | Onboard ADS-B detection failure handling | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 90 | Extend protos for onboard detection status + handoff | backend-go | api-private | 0.5 | 2 | 5 | 2.25 |
| 91 | Onboard vs cloud detection status indicator in UI | frontend-react | apollo-frontend | 0.5 | 2 | 5 | 2.25 |
| 98 | Onboard intrusion state transmission at 1 Hz | firmware-cpp | mavlink-shim | 1 | 3 | 7 | 3.33 |
| 99 | Detection state disagreement logging (>2s divergence) | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 100 | Onboard encounter log buffer (30 min, 10 intruders) | firmware-cpp | mavlink-shim | 2 | 5 | 10 | 5.33 |
| 101 | Shared reference test vector set for consistency | backend-go | collision-flight-controller | 3 | 7 | 15 | 7.67 |
Phase 5: Terrain & Traffic-Aware Crouch Targeting (10 stories, 52.4 days)
Terrain elevation integration, historical traffic pattern analysis, and intelligent crouch altitude selection to maximize separation from manned traffic.
| # | Story | Domain | Repo | Opt | Likely | Pess | Expected |
|---|---|---|---|---|---|---|---|
| 102 | Terrain elevation data service integration | backend-go | collision-flight-controller | 3 | 7 | 15 | 7.67 |
| 103 | Terrain-based crouch floor computation | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 104 | Terrain data staleness management (90-day refresh) | backend-go | collision-flight-controller | 1 | 3 | 7 | 3.33 |
| 105 | Historical ADS-B altitude aggregation pipeline | data-pipeline | collision-flight-controller | 5 | 10 | 20 | 10.83 |
| 106 | Traffic pattern weekly recomputation (30-day window) | data-pipeline | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 107 | Optimal crouch altitude computation (90% traffic band) | backend-go | collision-flight-controller | 3 | 7 | 15 | 7.67 |
| 108 | Crouch altitude delivery via pre-flight initialization | backend-go | collision-flight-controller | 1 | 3 | 7 | 3.33 |
| 109 | GCS display of configured crouch altitude + active target | frontend-react | apollo-frontend | 1 | 3 | 7 | 3.33 |
| 110 | Operator crouch altitude override UI + logging | frontend-react | apollo-frontend | 1 | 3 | 7 | 3.33 |
| 111 | Insufficient traffic data fallback + site flagging | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
Phase 6: UAS Performance Calibration & Latency Tuning (11 stories, 66.2 days)
Automated flight test infrastructure for measuring UA-specific performance characteristics, end-to-end latency profiling, and per-aircraft timing constant calibration for OCAV computation.
| # | Story | Domain | Repo | Opt | Likely | Pess | Expected |
|---|---|---|---|---|---|---|---|
| 112 | Automated flight test protocol + execution framework | firmware-cpp | mavlink-shim | 7 | 15 | 30 | 16.17 |
| 113 | Performance profile storage per UA model + firmware | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 114 | Profile validity management + re-test notifications | backend-go | collision-flight-controller | 1 | 3 | 7 | 3.33 |
| 115 | Envelope condition test matrix (temp/payload/battery) | firmware-cpp | mavlink-shim | 3 | 7 | 15 | 7.67 |
| 116 | End-to-end latency measurement infrastructure | backend-go | collision-flight-controller | 5 | 10 | 20 | 10.83 |
| 117 | Latency profile storage per C2 link type | backend-go | collision-flight-controller | 1 | 3 | 7 | 3.33 |
| 118 | Production latency monitoring + 50% threshold alerting | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 119 | UA-specific timing constants in OCAV computation | backend-go | collision-flight-controller | 2 | 5 | 10 | 5.33 |
| 120 | Fallback to baseline when no valid profile | backend-go | collision-flight-controller | 0.5 | 2 | 5 | 2.25 |
| 121 | Safety margin preservation (Tmargin floor enforcement) | backend-go | collision-flight-controller | 0.5 | 1 | 3 | 1.25 |
| 122 | Performance calibration admin UI | frontend-react | apollo-frontend | 2 | 5 | 10 | 5.33 |
Comparable Epics
Historical epics from the DroneUp Jira portfolio that provide calibration context:
| Epic | Actual Days | Stories | Relevance |
|---|---|---|---|
| CORE-2775: Simulator Failure Injection | 38.2 | 26 | Similar firmware + backend coordination |
| CORE-2588: UTM ACM & SCD Enhancements | 117.0 | 17 | Airspace management domain, FAA-adjacent |
| CORE-1996: Altimeter Milestone 1 | 1,507.3 | 77 | Multi-phase safety-critical system with certification |
The DAA system at 122 stories and 587 expected days sits between the UTM and Altimeter programs in scope. The Altimeter comparison is instructive: safety-critical systems with FAA involvement consistently exceed initial estimates due to certification overhead and iterative flight testing.
Methodology
This estimate uses architecture-driven PERT (v3) methodology:
- Unit: Days of active work time (not calendar time).
- Per story: Three-point estimate (Optimistic / Likely / Pessimistic), minimum 0.5 days.
- Expected:
(O + 4L + P) / 6per story. - Standard deviation:
(P - O) / 6per story. - Phase aggregation: Sum of expected values;
sqrt(sum(stddev^2))for phase uncertainty. - 95% confidence interval: Expected +/- 2 standard deviations.
- Confidence level: High when
stddev/expected < 0.3, Medium when< 0.6, Low otherwise.
Repos explored: uncrew-collision-flight-controller (Go), uncrew-apollo-frontend (React/TypeScript), uncrew-api-private (Proto), uncrew-mavlink-shim (C++).
Risk flags: faa_related, certification, flight_testing, hard_repo_mavlink, airspace_deconfliction.
Evolution from prior estimate: This 6-phase structure expands the original 3-epic estimate (91 stories, 426.9 days) by adding 31 new stories across Phases 3-6 to account for onboard ADS-B sensor integration, source fusion, terrain-aware crouch targeting, and UAS performance calibration. All original PERT values are preserved exactly.