Skip to content

DAA System — Sizing Estimate

Andi Lamprecht Andi Lamprecht ·· 16 min read· Draft
MethodArchitecture-driven PERT (v3), revised with codebase analysis
Last Updated2026-03-22
Source PRDDAA PRD
Stories122
Expected Duration~420 days (down from 587 greenfield)
9-Person Team~14-17 weeks (moderate)
ConfidenceHigh (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.

These estimates are still conservative. Further reductions are likely as AI-assisted code translation matures and as teams find additional reuse opportunities during implementation. The per-story PERT values for Phases 2-6 have not yet been revised downward for the existing collision-service scaffolding (C2 commands, telemetry subscriptions, mission integration).

Existing Code Leverage (Phase 1)

A codebase exploration revealed that the core Phase 1 functionality already exists across multiple services:

Phase 1 FeatureExisting ServiceWhat ExistsWhat’s Needed
OCDV/OCAV/WC/NMAC algorithmsduck/daac.cljc (utm-clojure-kit)~300 lines of pure functions, all volume checksAI-port to Go, update constants to PRD values
ADS-B ingestion (CAT021 ASTERIX)utm-themis-daa (Clojure, UDP)Full parser, 1 Hz ingestion, geo-filterAlready consumed by flight-traffic-exchanger
Plot dedup + stalenessutm-themis-daa + flight-traffic-exchangerDedup by aircraft ID, 5s stalenessAlready in Go service
Geo filtering (site proximity)flight-traffic-exchangerProvider abstraction, site-based filteringConfig update to 16,093m
Intrusion state classificationduck/daac.cljcAll Clear through NMAC statesPort to Go, add Clear to Proceed (new)
Real-time data streamingflight-traffic-exchangergRPC-Web streaming, observation cacheAdd intrusion alert events to stream
Compliance reportingutm-themis-apiReport endpoints, intrusion summariesPort to Go or keep as-is initially
Air traffic viz + color codingApollo TrafficObservationsLayerBasic aircraft display on mapExtend with DAA status colors
OCDV/OCAV circle renderingutm-themis-spaces (ClojureScript)Working prototype with interactive demoPort to React (adapt OperationalAreaLayer)
Alert infrastructureApollo notification systemTTS, toast notifications, severity levelsAdd DAA-specific alert types + audio tones
C2 command scaffoldinguncrew-collision-flight-controllerHold, RTL, GoToCLZ, mission replanExtend 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-kit test 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

PhaseWork (days)Greenfield EstSavingsTeam SizeCalendar Duration
1 – Detect & Notify93244.7-62%92.7 weeks
2 – Detect & Automated Avoid90105.3-15%73.3 weeks
3 – Onboard ADS-B Sensor Integration36.136.124.7 weeks
4 – Onboard + Cloud DAA Orchestration82.382.363.6 weeks
5 – Terrain & Traffic-Aware Crouch52.452.434.5 weeks
6 – UAS Performance Calibration66.266.291.9 weeks
Total~420587.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):

WindowActivityDuration
Wk 1-3Phase 1 (full team, AI-assisted port)3 wk
Wk 4-7Phase 2 (7 ppl) + Phase 3 (2 ppl)4 wk
Wk 8-12Phase 4 (6 ppl) + Phase 5 (3 ppl)4 wk
Wk 13-14Phase 6 (full team)2 wk
Total~14 weeks / 3.5 months

Scenario B – Moderate (recommended, ~15% buffer):

WindowActivityDuration
Wk 1-4Phase 14 wk
Wk 5-9Phase 2 + Phase 35 wk
Wk 10-14Phase 4 + Phase 55 wk
Wk 15-17Phase 63 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:

AggressiveModerateConservative
Work days301.4301.4301.4
Calendar~11 weeks~14 weeks~17 weeks
Months~2.5~3.5~4

Domain Staffing Guidance

DomainShare of WorkSuggested Allocation (of 9)Notes
backend-go58%5-6Heaviest domain; AI-assisted Clojure port in Phase 1
firmware-cpp21%1-2Peaks in Phases 3-4 and 6
frontend-react17%2Steady across phases; leverage existing layers
data-pipeline3%0-1Phase 5 only; can be backend-go engineers
infrastructure1%0One-time HA setup; can be backend or DevOps

Further Optimization Opportunities

These estimates are conservative. Areas where further reduction is likely:

  1. Keep Clojure reporting initially – Phase 1 reporting stories (~10d) could be deferred by keeping utm-themis-api report endpoints running alongside the new Go services during the transition.
  2. Shared test vectors – The Clojure test suite can be exported as JSON fixtures for Go tests, eliminating redundant test case authoring.
  3. 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 existing TrafficObservationsLayer as the target scaffold.
  4. 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.
  5. Proto reuseflight-traffic-exchanger already defines observation protos. Extending them for intrusion state is incremental, not greenfield.

Per-Phase Breakdown

PhaseStoriesExpected (days)Range (95% CI)WeeksConfidence
1 – Detect & Notify59244.7226.4 – 263.048.9High
2 – Detect & Automated Avoid20105.392.1 – 118.521.1High
3 – Onboard ADS-B Sensor Integration736.127.2 – 45.07.2High
4 – Onboard + Cloud DAA Orchestration1582.369.7 – 94.916.5High
5 – Terrain & Traffic-Aware Crouch Targeting1052.442.9 – 61.910.5Medium
6 – UAS Performance Calibration & Latency Tuning1166.254.4 – 78.013.2Medium
Total122587.0555.8 – 618.2117.4High

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

DomainStoriesExpected (days)Share
backend-go80370.563.1%
firmware-cpp14105.818.0%
frontend-react2589.215.2%
data-pipeline216.22.8%
infrastructure15.30.9%
Total122587.0100%

Phase Details

Phase 1: Detect & Notify (59 stories, 244.7 days)

Core cloud-side detection engine, GCS visualization, alerting, and compliance logging.

#StoryDomainRepoOptLikelyPessExpected
1Ingest ADS-B plots at 1-2 Hz from traffic sourcebackend-gocollision-flight-controller25105.33
2Ingest drone telemetry at 1-2 Hz per active flightbackend-gocollision-flight-controller25105.33
3Plot dedup – maintain latest position per aircraft IDbackend-gocollision-flight-controller0.5252.25
4Plot staleness removal – 5s timeoutbackend-gocollision-flight-controller0.5252.25
5Aircraft type identification from ADS-B emitter categorybackend-gocollision-flight-controller0.5252.25
7Dynamic site management – hot-reloadbackend-gocollision-flight-controller25105.33
8Multi-region support – 1000+ sitesbackend-gocollision-flight-controller0.5252.25
9Site proximity filtering – 16,093m radiusbackend-gocollision-flight-controller0.5252.25
10OCDV detection – cylinder geometrybackend-gocollision-flight-controller5102010.83
11OCAV detection – dynamic radiusbackend-gocollision-flight-controller5102010.83
12OCAV radius upper bound cappingbackend-gocollision-flight-controller25105.33
13Time-to-avoid computation – 8-component sumbackend-gocollision-flight-controller25105.33
14DAA geometric constants – configurablebackend-gocollision-flight-controller0.5252.25
15DAA timing parameters baselinebackend-gocollision-flight-controller0.5252.25
16DAA timeline selection per surveillance type + UA modelbackend-gocollision-flight-controller0.5252.25
17Unknown altitude handling – assume co-altitudebackend-gocollision-flight-controller0.5252.25
18Unknown airspeed handling – assume max 77.17 m/sbackend-gocollision-flight-controller0.5252.25
196-state intrusion classificationbackend-gocollision-flight-controller25105.33
20Intrusion state transition event emissionbackend-gocollision-flight-controller25105.33
21Multi-drone evaluation – 50 active, 100 capacitybackend-gocollision-flight-controller25105.33
22Ended flight cleanup – 60 min timeoutbackend-gocollision-flight-controller0.5252.25
23Calculation frequency – per-measurement / 1 Hzbackend-gocollision-flight-controller25105.33
24Warning alert data constraint – current data onlybackend-gocollision-flight-controller0.5252.25
25Clear to Proceed logic – 4-measurement separationbackend-gocollision-flight-controller25105.33
26Alert latency <=2s from ADS-B receiptbackend-gocollision-flight-controller25105.33
271000 plot updates/sec throughputbackend-gocollision-flight-controller25105.33
28Cloud processing latency <500ms P99backend-gocollision-flight-controller0.5252.25
29Stream connection recovery + operator indicationbackend-gocollision-flight-controller25105.33
30DAA health gate for BVLOS mission approvalbackend-gocollision-flight-controller25105.33
31DAA service unavailability alert + crouch after 10sbackend-gocollision-flight-controller25105.33
32DAA service recovery – notify, resume, confirmbackend-gocollision-flight-controller25105.33
33BVLOS scope enforcementbackend-gocollision-flight-controller0.5252.25
3499.9% uptime SLA – arch/infrabackend-gocollision-flight-controller0.5252.25
35Intrusion logging – per-second, full fieldsbackend-gocollision-flight-controller5102010.83
36Differentiated data retention – 30d / permanentbackend-gocollision-flight-controller25105.33
37Compliance report generationbackend-gocollision-flight-controller25105.33
38Report export (CSV/XLSX/PDF)backend-gocollision-flight-controller0.5252.25
39Report access control – supervisor/admin onlybackend-gocollision-flight-controller0.5252.25
40Aircraft icons – intrusion status color-codingfrontend-reactapollo-frontend0.5252.25
41Aircraft detail panel – DAA fieldsfrontend-reactapollo-frontend0.5252.25
42Stale data indicatorsfrontend-reactapollo-frontend0.5252.25
43Mission console traffic scope – OCDV radiusfrontend-reactapollo-frontend0.5252.25
44OCAV circle rendering – dynamic, redfrontend-reactapollo-frontend25105.33
45OCDV circle rendering – yellow, togglefrontend-reactapollo-frontend25105.33
46Alert circle position tracking + lifecyclefrontend-reactapollo-frontend0.5252.25
47Audio alert system – 4 levels, queuingfrontend-reactapollo-frontend25105.33
48Audio audibility check pre-takeofffrontend-reactapollo-frontend25105.33
49Volume controlfrontend-reactapollo-frontend0.5252.25
50Suppress audio on page loadfrontend-reactapollo-frontend0.5252.25
51Active alert list – bearing, velocity, rangefrontend-reactapollo-frontend25105.33
52Alert severity sorting + CPA secondary sortfrontend-reactapollo-frontend25105.33
53Alert-to-map navigationfrontend-reactapollo-frontend0.5252.25
54Alert count badge with color distinctionfrontend-reactapollo-frontend0.5252.25
55Alert auto-resolution on OCDV exitfrontend-reactapollo-frontend0.5252.25
56Intruder selection highlights alert in listfrontend-reactapollo-frontend0.5252.25
57End-to-end alert latency <=3sfrontend-reactapollo-frontend25105.33
5815 fps with 100 aircraft renderedfrontend-reactapollo-frontend25105.33
59Define DAA proto messagesbackend-goapi-private25105.33
60HA deployment for 99.9% SLAinfrastructureinfrastructure25105.33
Phase 2: Detect & Automated Avoid (20 stories, 105.3 days)

Automated crouch maneuver execution, avoidance state machine, and degraded-mode handling.

#StoryDomainRepoOptLikelyPessExpected
6Telemetry staleness escalation during active avoidancebackend-gocollision-flight-controller0.5252.25
61Notify-then-act path – transmit, wait, crouchbackend-gocollision-flight-controller5102010.83
62Act-and-notify path – immediate crouchbackend-gocollision-flight-controller5102010.83
64Loss of Well Clear response – immediate crouchbackend-gocollision-flight-controller25105.33
65NMAC response – continue existing descentbackend-gocollision-flight-controller0.5252.25
66Notification threshold – configurable 15s baselinebackend-gocollision-flight-controller0.5252.25
67Crouch initiation latency <=500msbackend-gocollision-flight-controller0.5252.25
68Crouch confirmation to backend within 1sbackend-gocollision-flight-controller25105.33
69Non-confirmation escalation after 3sbackend-gocollision-flight-controller25105.33
70Maximum crouch duration – hold at min altitudebackend-gocollision-flight-controller0.5252.25
71Crouch maneuver definition (pause + descend + hold)backend-gocollision-flight-controller0.5252.25
72Clear to Resume – all clear + operator confirmbackend-gocollision-flight-controller25105.33
73Multiple intrusion handling – continue, log separatelybackend-gocollision-flight-controller25105.33
74Avoidance during lost-link RTHbackend-gocollision-flight-controller25105.33
75Cloud traffic provider failure – crouch all BVLOSbackend-gocollision-flight-controller5102010.83
76C2 loss with VOs – continue detection, alert VOsbackend-gocollision-flight-controller25105.33
77Prioritized alerting – actively controlled > supervisedbackend-gocollision-flight-controller25105.33
79Integrate DAA crouch trigger into safety_crouch_fsmfirmware-cppmavlink-shim37.5158.00
80Buffer encounter logs during C2 lossfirmware-cppmavlink-shim0.837.53.38
81Clear-to-Resume UI with operator confirmation gatefrontend-reactapollo-frontend25105.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.

#StoryDomainRepoOptLikelyPessExpected
82Onboard ADS-B receiver relay to cloudfirmware-cppmavlink-shim7.5153016.25
92ADS-B receiver parameter configuration from cloudfirmware-cppmavlink-shim1373.33
93Onboard ADS-B validation (lat/lon/speed/alt/ICAO)firmware-cppmavlink-shim1373.33
94ADS-B relay buffering during C2 loss (60s buffer)firmware-cppmavlink-shim1373.33
95Cloud ADS-B source fusion – dedup by ICAObackend-gocollision-flight-controller25105.33
96Traffic source attribution taggingbackend-gocollision-flight-controller0.5252.25
97Source attribution display in GCS traffic viewfrontend-reactapollo-frontend0.5252.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.

#StoryDomainRepoOptLikelyPessExpected
63Autonomous path – crouch without backend when C2 lostbackend-gocollision-flight-controller25105.33
78Autonomous recovery after C2 loss – 60s clearbackend-gocollision-flight-controller0.5252.25
83Onboard conflict detection – port OCDV/OCAV to C++firmware-cppmavlink-shim7.5153016.25
84Onboard-to-cloud detection handoff / dual-modefirmware-cppmavlink-shim37.5158.00
85Onboard sensor failure handling per UA modelfirmware-cppmavlink-shim37.5158.00
86GPS degraded/loss behavior for onboard DAAfirmware-cppmavlink-shim0.837.53.38
87Cloud fallback when onboard detection activebackend-gocollision-flight-controller25105.33
88Simultaneous cloud + onboard failure handlingbackend-gocollision-flight-controller25105.33
89Onboard ADS-B detection failure handlingbackend-gocollision-flight-controller0.5252.25
90Extend protos for onboard detection status + handoffbackend-goapi-private0.5252.25
91Onboard vs cloud detection status indicator in UIfrontend-reactapollo-frontend0.5252.25
98Onboard intrusion state transmission at 1 Hzfirmware-cppmavlink-shim1373.33
99Detection state disagreement logging (>2s divergence)backend-gocollision-flight-controller25105.33
100Onboard encounter log buffer (30 min, 10 intruders)firmware-cppmavlink-shim25105.33
101Shared reference test vector set for consistencybackend-gocollision-flight-controller37157.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.

#StoryDomainRepoOptLikelyPessExpected
102Terrain elevation data service integrationbackend-gocollision-flight-controller37157.67
103Terrain-based crouch floor computationbackend-gocollision-flight-controller25105.33
104Terrain data staleness management (90-day refresh)backend-gocollision-flight-controller1373.33
105Historical ADS-B altitude aggregation pipelinedata-pipelinecollision-flight-controller5102010.83
106Traffic pattern weekly recomputation (30-day window)data-pipelinecollision-flight-controller25105.33
107Optimal crouch altitude computation (90% traffic band)backend-gocollision-flight-controller37157.67
108Crouch altitude delivery via pre-flight initializationbackend-gocollision-flight-controller1373.33
109GCS display of configured crouch altitude + active targetfrontend-reactapollo-frontend1373.33
110Operator crouch altitude override UI + loggingfrontend-reactapollo-frontend1373.33
111Insufficient traffic data fallback + site flaggingbackend-gocollision-flight-controller0.5252.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.

#StoryDomainRepoOptLikelyPessExpected
112Automated flight test protocol + execution frameworkfirmware-cppmavlink-shim7153016.17
113Performance profile storage per UA model + firmwarebackend-gocollision-flight-controller25105.33
114Profile validity management + re-test notificationsbackend-gocollision-flight-controller1373.33
115Envelope condition test matrix (temp/payload/battery)firmware-cppmavlink-shim37157.67
116End-to-end latency measurement infrastructurebackend-gocollision-flight-controller5102010.83
117Latency profile storage per C2 link typebackend-gocollision-flight-controller1373.33
118Production latency monitoring + 50% threshold alertingbackend-gocollision-flight-controller25105.33
119UA-specific timing constants in OCAV computationbackend-gocollision-flight-controller25105.33
120Fallback to baseline when no valid profilebackend-gocollision-flight-controller0.5252.25
121Safety margin preservation (Tmargin floor enforcement)backend-gocollision-flight-controller0.5131.25
122Performance calibration admin UIfrontend-reactapollo-frontend25105.33

Comparable Epics

Historical epics from the DroneUp Jira portfolio that provide calibration context:

EpicActual DaysStoriesRelevance
CORE-2775: Simulator Failure Injection38.226Similar firmware + backend coordination
CORE-2588: UTM ACM & SCD Enhancements117.017Airspace management domain, FAA-adjacent
CORE-1996: Altimeter Milestone 11,507.377Multi-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) / 6 per story.
  • Standard deviation: (P - O) / 6 per 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.

Last updated on