Design a Project-to-Contractor Matching System
MercorSoftware Engineer · Technical ScreenLast updated
Tests your ability to architect a two-sided matching platform that enforces strict eligibility filters, dynamic availability tracking, multi-stage ranking with exploration, and closed-loop model evaluation.
Scenario
You are tasked with designing the core matching engine for a talent platform that connects technical projects with pre-vetted contractors. When a company posts a project (or a recruiter searches for candidates), the platform must recommend top-matching contractors who are available, eligible, and likely to succeed.
Requirements
Functional Requirements
- Hard Filtering: Filter contractors based on rigid criteria such as minimum timezone overlap, rate range, legal work authorization, and required skills.
- Capacity-Aware Ranking: Score and rank remaining candidates based on profile relevance, previous performance, and current workload/capacity (avoid recommending contractors already overcommitted).
- Cold-Start Exploration: Incorporate newly onboarded contractors who lack historical client feedback without degrading client match quality.
- Outcome-Based Feedback: Track downstream outcomes (client invited, interview passed, contract signed, client review score) to update model weights and contractor scores.
Non-Functional Requirements & Scale
- Scale: 100,000 active contractors; 10,000 active open projects; 500 new projects created daily.
- Latency: Query-time candidate recommendations must return in under 300 ms (p95).
- Consistency: Contractor availability updates (e.g., contractor accepts another contract) should propagate to the matching engine within 10 seconds.
What Your Design Should Cover
- High-Level Architecture: Key services, data storage, and message queues.
- Matching Pipeline: Multi-stage retrieval and ranking (Candidate Generation -> Hard Filtering -> Scoring -> Capacity Adjustment & Exploration -> Top-K Selection).
- Data Model: Core entities (Contractor, Project, Application/Match, FeedbackEvent).
- Cold-Start & Feedback Loop: Strategy for exploring unproven talent and incorporating offline/online feedback to update ranking signals.
Hints
Hint 1
Separate the matching pipeline into an inverted index or vector retrieval phase for candidate generation, followed by strict attribute filtering and fine-grained ranking.
Hint 2
Model contractor capacity as a dynamic budget that decrements upon interview holds or contract signings, using an in-memory cache like Redis for low-latency checks.
Hint 3
Address cold-start candidates using an epsilon-greedy or multi-armed bandit exploration bucket, reserving a small fixed percentage of top recommendation slots for high-potential new talent.
Follow-up questions
- How would you prevent popular contractors from being spammed with invitations while preventing starvation for lesser-known candidates?
- How do you handle delayed feedback signals, such as client ratings that arrive 3 months after a project completes?
- If a client refines their search criteria in real time, how can you optimize query caching while maintaining dynamic capacity constraints?
Solution walkthrough is for members
Get the full walkthrough with reference code and complexity analysis, plus Kitty Coach at 300 messages a day. Hints, the code runner and community answers stay free.