What’s missing to make the platform attractive, intelligent, and production-ready
2026-07-16
ULDA today is a strong data foundation: one immutable master identity per lead (1.07M), an event-sourced activity ledger with automatic first/last-channel tracking, a 75-field Lead-360 record, serviceability + compliance data, a premium filterable grid, and a nightly off-host backup. The data layer is enterprise-grade.
What’s missing is the layer above the data — the dashboards, workflows, AI, and governance that turn a clean database into a product sales and management actually run on. This review inventories those gaps across 10 domains and prioritizes them by business impact × implementation effort.
Impact: 🟢 high · 🟡 medium · ⚪ low · Effort: S/M/L
| Missing | Why it matters | Impact | Effort |
|---|---|---|---|
| Executive dashboard (KPIs, trends, funnel) | Leadership has no single pane; decisions run on gut | 🟢 | M |
| Sales funnel / conversion viz (lead→contacted→booked→sold) | See where leads leak | 🟢 | M |
| Source/campaign ROI dashboard | Kill losing sources, scale winners | 🟢 | M (needs order data) |
| Geographic heat map (state/county serviceability + leads) | Territory planning, fiber targeting | 🟡 | M |
| Agent leaderboard / activity dashboard | Performance visibility & motivation | 🟡 | S |
| Cohort & trend charts (leads by week/source/score) | Spot momentum & decay | 🟡 | S |
| Real-time ops board (today’s dials/texts/replies) | Floor management | 🟡 | M |
| Missing | Why | Impact | Effort |
|---|---|---|---|
| Lead assignment / routing engine (by territory/score/round-robin) | Leads sit unassigned; no ownership | 🟢 | M |
| Cadence / follow-up automation (next-touch scheduling) | Missed follow-ups = lost deals | 🟢 | M |
| Lifecycle state machine (stages + transitions + SLAs) | No governed pipeline | 🟢 | M |
| Event alerts (hot reply, high-intent, litigator hit) | React in the moment | 🟡 | S |
| Auto-enrichment orchestration (fill gaps on ingest) | last_enrichment_* still empty |
🟡 | M |
| Reverse-ETL activation (segments → dialer/SMS/Instantly) | Contract exists, not running | 🟡 | M |
| Dedup auto-merge workflow (302K review queue) | Duplicate identities linger | 🟡 | M |
| Missing | Why | Impact | Effort |
|---|---|---|---|
| Governed KPI framework — speed-to-lead, contact rate, conversion %, cost-per-lead, cost-per-acquisition, MRR/ARR, source ROI, agent productivity, list decay | You can’t manage what you don’t measure | 🟢 | M |
| SLA tracking (time-to-first-touch, follow-up adherence) | Enforce responsiveness | 🟡 | S |
| Data-freshness & coverage KPIs | Trust the data | ⚪ | S |
| Missing | Why | Impact | Effort |
|---|---|---|---|
| Full pgvector embeddings (currently 200-row sample) | Semantic “similar leads” at scale | 🟢 | M (replica) |
| ML lead-scoring v2 (trained on outcomes) | Heuristic score → real propensity | 🟢 | L |
| Lookalike / audience modeling | Find more of your best leads | 🟢 | L |
| Next-Best-Action (which channel/offer/time) | Lift conversion per touch | 🟡 | L |
| NL→SQL query assistant (“show TX fiber litigators”) | Self-serve for non-technical users + AI agents | 🟢 | M |
| LLM enrichment/summarization (lead brief, call-notes) | Faster context for reps | 🟡 | M |
| Anomaly/drift detection (source quality, dup spikes) | Catch data problems early | 🟡 | M |
| Churn / re-engagement propensity | Reactivate dormant leads | 🟡 | L |
| Missing | Why | Impact | Effort |
|---|---|---|---|
| Least-privilege app role (app runs as superuser now) | Breach blast-radius = total | 🟢 | S |
| RLS / role-scoped access (agent sees own leads) | Data minimization | 🟡 | M |
| Secrets vault (passwords currently file-based) | Credential theft risk | 🟡 | M |
| MFA + SSO on the apps | Account takeover defense | 🟡 | M |
| PII masking / field-level encryption for non-privileged roles | Compliance | 🟡 | M |
| Audit-log UI + immutable trail | Forensics & SOC-2 | 🟡 | M |
| Missing | Why | Impact | Effort |
|---|---|---|---|
| Consent gate enforced at send-time (view exists, not wired) | TCPA fines / litigators | 🟢 | S |
| Data catalog + lineage UI (partial today) | Discoverability, trust | 🟡 | M |
| Data-quality dashboard (DQ findings, trends) | Ongoing quality mgmt | 🟡 | S |
| DSAR / right-to-erasure automation | Legal obligation | 🟡 | M |
| Retention & archival policy (events grow forever) | Cost + compliance | 🟡 | M |
| Data contracts per source | Stop bad data at the door | 🟡 | M |
| Missing | Why | Impact | Effort |
|---|---|---|---|
| Scheduled / emailed reports (daily digest, weekly ROI) | Push insight to inboxes | 🟢 | S |
| Export center (async large exports, history, PII gating) | Ops need bulk data safely | 🟡 | M |
| Self-serve report builder (pick fields → chart/table) | Reduce ad-hoc requests | 🟡 | L |
| Missing | Why | Impact | Effort |
|---|---|---|---|
| Saved filter presets (table ready, not wired) | Power-user speed | 🟢 | S |
| Bulk actions (assign, tag, export, add-to-campaign) | Operate at scale | 🟢 | M |
| Lead timeline visualization (journey as a vertical timeline) | Instant context | 🟡 | S |
| Inline edit + column customization | Personalization | 🟡 | M |
| Global command palette / quick nav | Speed | ⚪ | S |
| Notifications center | Don’t miss events | 🟡 | M |
| Missing | Why | Impact | Effort |
|---|---|---|---|
| Read replica + PITR (single host, ~24h RPO) | DR / scale-out reads | 🟢 | L (needs host) |
| External observability (Prometheus/Grafana + alerts) | Operate blind today | 🟡 | M |
| Migration framework (added baseline table; adopt Sqitch) | Reproducible change mgmt | 🟡 | S |
Partition automation (pg_partman) |
Event scale | ⚪ | S |
| Order/revenue integration (65K paysheet rows unlinked) | Close the ROI loop | 🟢 | M |
| Missing | Why | Impact | Effort |
|---|---|---|---|
| Public API + API keys (for partners/tools) | Ecosystem & automation | 🟡 | M |
| Webhook/event bus (lead events → subscribers) | Real-time integrations | 🟡 | M |
| b2c/ad_leads real-time CDC (batch today) | Freshness | ⚪ | M |
quadrantChart
title Business Impact vs Implementation Effort
x-axis Low Effort --> High Effort
y-axis Low Impact --> High Impact
quadrant-1 Big Bets (plan)
quadrant-2 Quick Wins (do now)
quadrant-3 Fill-ins (later)
quadrant-4 Money Pits (defer)
Least-privilege role: [0.15, 0.9]
Consent gate wiring: [0.15, 0.85]
Saved presets: [0.2, 0.7]
Agent leaderboard: [0.25, 0.6]
Scheduled reports: [0.25, 0.72]
Exec dashboard: [0.5, 0.92]
Lead routing: [0.55, 0.9]
KPI framework: [0.5, 0.85]
Order/revenue integ: [0.55, 0.88]
NL to SQL assistant: [0.5, 0.78]
Full embeddings: [0.6, 0.75]
Read replica/PITR: [0.8, 0.85]
ML scoring v2: [0.85, 0.8]
Self-serve report builder: [0.85, 0.55]
RLS + secrets vault: [0.6, 0.6]
P0 — Quick Wins (this sprint · high impact, low effort): 1. Least-privilege app role (drop superuser) — security. 2. Wire the consent gate into dialer/SMS — TCPA. 3. Saved filter presets (table ready) + lead timeline viz — UX. 4. Scheduled digest report (daily leads/activity email) — reporting. 5. Agent leaderboard — visibility.
P1 — Big Bets (next quarter · high impact, medium
effort): 6. Executive + funnel dashboard with
the governed KPI framework. 7. Lead
assignment/routing + cadence workflow engine. 8.
Order/revenue integration
(accounting_db.paysheet_lines) → close the ROI loop. 9.
NL→SQL assistant (self-serve + AI-agent querying). 10.
Full pgvector embeddings + semantic “similar
leads”.
P2 — Foundations (parallel · medium impact): 11. Read replica → PITR + OLAP offload; external observability. 12. RLS + secrets vault + audit-log UI; DSAR + retention policy. 13. Reverse-ETL activation live; auto-enrichment orchestration. 14. Bulk actions, export center, saved views.
P3 — Strategic (later · high effort): 15. ML scoring v2 / lookalike / next-best-action. 16. Self-serve report builder; public API + webhook bus.
Bottom line: the database is done right; the next dollar of effort belongs above the data — dashboards, workflows, and AI — plus closing the two live risk items. That is what turns ULDA from an excellent lead database into an indispensable lead platform.