I designed a complete lead management system for a real estate marketplace — translating ambiguous business needs into structured workflows, decision logic, and a delivery-ready PRD that aligned engineering, operations, and QA.
At Hoozing, lead handling involved multiple teams, inconsistent follow-up, unclear ownership, and too much manual judgment. I approached it not as a coordination problem alone, but as a product problem: where decisions break down, what rules should be standardized, and how the system can guide better execution.
My role went beyond documenting requests. I framed the problem, mapped the lead lifecycle end-to-end, defined user interactions and permissions, and translated business complexity into clear logic that engineering and QA could confidently implement.
This project shows how I work in a PM capacity: connecting business goals, user needs, operational realities, and execution detail into one coherent system.
The system had to balance automation with human judgment: deduplicating leads, prioritising follow-up by urgency, matching agents intelligently, and making status transitions reliable enough for reporting and cross-team coordination.
I turned a broad business request into a decision framework. The PRD clarified what should be automated, what required human confirmation, and what should remain manual because of business risk, timing, or operational edge cases.
Instead of only describing screens, I defined the logic that drives the product: lead status transitions, follow-up cadence, ranking rules for agent matching, and operational guardrails to ensure teams make consistent decisions at scale.
The real value of this work was not only documenting requirements, but shaping how the system should think: when to trigger, when to escalate, how to rank, and how to remove ambiguity across operations, sales, engineering, and QA.
Each feature was designed with clear business logic, edge case handling, and cross-functional requirements for engineering, operations, and QA.
Inbound form submissions are combined automatically when the same phone number appears within a 5-hour window. All duplicates are flagged with status "Duplicate" and linked to the canonical lead record.
Top-30 suggested agents are ranked by matching demand (project → district fallback) combined with a weighted behavioral + performance score. Overloaded agents are surfaced with a tag rather than hidden.
Each lead has its own visit calendar with full CRUD, status tracking (Scheduled / Visited / Canceled), and a survey-on-completion flow. Cancellation and visited events feed directly into agent scoring.
A daily Kanban board for Customer Service with cards sorted by lead priority, move-in urgency, and pending follow-up count. Cards appear at the cadence defined by status (daily → every 5 days).
One-click notification dispatch to matched agents with auto-generated Vietnamese templates populated from lead demand data. SMS enforces a 150-character hard limit with Zalo deep-link routing.
A 20-event scoring engine across Behavior (30%), Performance (60%), and Listing Quality (10%) produces a balanced score used to rank agents in the suggestion list and manage overload thresholds.
| Status | How it's set |
|---|---|
| New | Auto |
| Following P1 | Auto Timeline |
| Following P2 / P3 | Auto Timeline |
| Visiting | Auto Event Manual |
| Negotiating | Event (agent trigger) |
| Customer No Reply | Event (3× checkbox) |
| Customer Drop | Manual |
| Cannot Serve | Event Manual |
| Closed Deal | Manual |
| 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 |
I designed a scoring system that evaluates agents across behavior, performance, and listing quality. Scores use time-bounded windows (30–90 days) to prevent permanent penalties and reward sustained improvement.
Final balanced score = Σ (Metric Score × Weighting), normalized against worst/best case across all agents in the system.
Broke down an intricate state machine (lead status ↔ agent status ↔ visit status) into clear, testable rules distinguishing automatic, event-driven, and manual transitions.
Designed a multi-criteria agent scoring and ranking algorithm with time-decay windows, balanced weighting, and fallback logic for district/project matching.
Explicitly documented all "does not allow" cases (e.g. agent assignment blocked when lead is Closed/Dropped), preventing ambiguous developer interpretation and QA gaps.
PRD covers UI interactions, backend business rules, cron job logic, database migration fields, and SMS character limits — bridging product, engineering, and QA in one document.
Notification and SMS templates written in Vietnamese with dynamic field injection. Understood local real estate conventions (VND/USD pricing, 6-month minimum rental policy).
Defined role-specific views (Customer Service vs CS Leader vs Admin) with conditional display logic for dashboards and appropriate action permissions per role.