Create a framework
Turned a broad business request into a decision framework.
A lead management product specification that translated messy operational handoffs into standardized lifecycle logic, agent matching rules, scoring signals, and Customer Service execution cadence.
The product work focused on turning manual judgment into clear rules: what the system decides, where users confirm, and which edge cases require guardrails.
At Hoozing, lead handling involved multiple teams, inconsistent follow-up, unclear ownership, and too much manual judgment.
Approached it as a product problem: where decisions break down, what rules should be standardized, and how the system can guide better execution.
Role went beyond documenting requests — framed the problem, mapped the lead lifecycle end-to-end, defined user interactions and permissions, and translated business complexity into clear logic for engineering and QA.
The work was less about listing requested features and more about deciding how the product should behave under operational ambiguity.
Turned a broad business request into a decision framework.
Clarified what should be automated, what required human confirmation, and what should remain manual due to business risk, timing, or operational edge cases.
Defined the logic that drives the product: lead status transitions, follow-up cadence, ranking rules for agent matching, and operational guardrails.
Combines form submissions when same phone appears within 5-hour window. Duplicates flagged "Duplicate" and linked to canonical record.
Top-30 agents ranked by project→district fallback + weighted behavioral/performance score. Overloaded agents surfaced with tag.
Per-lead calendar with CRUD, status tracking (Scheduled/Visited/Canceled), survey-on-completion flow. Cancellation/visited feed into agent scoring.
Daily Kanban for Customer Service sorted by lead priority, move-in urgency, pending follow-up. Card cadence by status (daily → every 5 days).
One-click dispatch to matched agents with auto-generated Vietnamese templates. SMS enforces 150-char limit with Zalo deep-link routing.
20-event scoring engine: Behavior (30%), Performance (60%), Listing Quality (10%). Balanced score ranks agents and manages overload thresholds.
Lead status states are lifecycle logic; dashboard cadence is sequential operational logic. Both stay tabular so teams can read them as rules, not marketing cards.
| Status | Trigger |
|---|---|
| New | AutoAuto (default on creation) |
| Following Priority 1 | AutoAuto + Timeline (lead age ≤ 7 days) |
| Following Priority 2 / 3 | AutoAuto + Timeline (P2: 20–40 days, P3: >40 days) |
| Visiting | AutoAuto + Event + Manual (4-day window around scheduled visit) |
| Negotiating | EventEvent (agent trigger) |
| Customer No Reply | EventEvent (3× checkbox by CS, confirmation dialog required) |
| Customer Drop | ManualManual (mandatory drop reason + drop date) |
| Cannot Serve | ManualEvent (≥3 agents change) + Manual |
| Closed Deal | ManualManual (creates Deal record in background) |
Auto (default on creation)
Auto + Timeline (lead age ≤ 7 days)
Auto + Timeline (P2: 20–40 days, P3: >40 days)
Auto + Event + Manual (4-day window around scheduled visit)
Event (agent trigger)
Event (3× checkbox by CS, confirmation dialog required)
Manual (mandatory drop reason + drop date)
Event (≥3 agents change) + Manual
Manual (creates Deal record in background)
| Lead Status | Card Frequency |
|---|---|
| New | Every day |
| Following Priority 1 | Every day |
| Following Priority 2 | Every 3rd day |
| Following Priority 3 | Every 5th day |
| Visiting | Every day |
| Negotiating | Every 2nd (Rent) / 5th (Buy) |
| Closed / Dropped | Removed from board |
Every day
Every day
Every 3rd day
Every 5th day
Every day
Every 2nd (Rent) / 5th (Buy)
Removed from board
Formula: Final balanced score = Σ (Metric Score × Weighting), normalized against worst/best case across all agents.
End-to-end lifecycle coverage
Weighted performance inputs
Confirmation and action flows
Leads, Visits, Dashboard, Scoring, Notifications
Broke down intricate state machine (lead ↔ agent ↔ visit status) into clear, testable rules distinguishing automatic, event-driven, and manual transitions.
Multi-criteria agent scoring with time-decay windows, balanced weighting, and fallback logic for district/project matching.
Explicitly documented all "does not allow" cases, such as agent assignment blocked when lead is Closed/Dropped.
PRD covers UI interactions, backend business rules, cron job logic, database migration fields, and SMS character limits.
Vietnamese notification/SMS templates with dynamic field injection. Understood local real estate conventions (VND/USD pricing, 6-month minimum rental policy).
Role-specific views (Customer Service vs CS Leader vs Admin) with conditional display logic and action permissions.
Return to the homepage for the full portfolio, PM journey, and supporting work.
Back to Portfolio