Harvest Design Doc
Harvest
Lead Sourcing and Qualification System
Find the engineers who need you before they know they need you.
Overview
Harvest (formerly Client Scout) is an intelligent lead sourcing and qualification pipeline for Learn with O.J. The system replaces the current ad hoc process of discovering potential clients through manual LinkedIn browsing and networking with a structured, repeatable pipeline that learns from O.J.'s accept/reject decisions over time.
Problem Statement
The current client discovery process is entirely manual and opportunistic. Potential clients surface through LinkedIn browsing, networking events, and referrals, but there is no systematic way to find engineers who match the ideal client profile. Additionally, the pre-call research process for Focused Hours is unstructured and "vibe based," with no formalized intake checklist. This means valuable preparation time is spent gathering information that could have been collected and organized in advance.
System Architecture
Harvest operates as a three-layer pipeline with a feedback loop.
Layer 1: The Scout
Automated discovery that crawls public sources to identify engineers who match the ideal client profile. The scout looks for signal, not just demographics.
Target Profile Signals
- Job title that undersells their actual output (e.g., mid-level title but leading projects, mentoring, or architecting systems)
- 5-10+ years of experience in software or infrastructure engineering
- Posting about frustration with promotion processes, career stagnation, or imposter syndrome
- Asking career-level questions in public forums (Reddit, Dev.to, LinkedIn)
- Conference speakers or community contributors whose titles don't match their visibility
- Recent job changes or active job searching signals
Source Channels
- LinkedIn (public profiles and post activity)
- Reddit (r/cscareerquestions, r/ExperiencedDevs, r/devops, r/sre)
- Dev.to and Hashnode (career-focused posts)
- Conference speaker lists and meetup organizers
- GitHub contributors with strong profiles but stagnant titles
Scout Output
Each candidate surfaced by the scout includes a confidence score and the specific signals that triggered the match. This raw data feeds into Layer 2 for enrichment.
Layer 2: Profile Prep
For each candidate the scout surfaces, an AI agent assembles a structured client profile. This profile serves two purposes: it powers the review queue for lead qualification, and it becomes the pre-call intake document for Focused Hours. The profile format should match and formalize the research O.J. currently does before every coaching session.
Client Profile Schema
| Field | Type | Description |
|---|---|---|
| name | string | Full name |
| linkedin_url | string | Profile URL |
| current_title | string | Current job title |
| current_company | string | Current employer |
| years_experience | integer | Total years in engineering |
| specialization | enum | swe, sre, infra, devops, platform, security, other |
| title_gap_score | float | Gap between apparent skill level and current title (0-1) |
| public_signals | list | What triggered the scout match |
| content_activity | string | Summary of their LinkedIn/public posting activity |
| career_trajectory | string | AI-generated analysis of their career path |
| potential_pain_points | list | Likely frustrations based on profile signals |
| service_tier_fit | enum | focused_hour, career_accelerator, fresh_squeeze, b2b_contract |
| prospect_type | enum | coaching_client, b2b_decision_maker, recruiter_partner |
| confidence | float | Overall match confidence (0-1) |
| scout_source | string | Where the candidate was found |
| captured_at | datetime | When the scout found them |
Layer 3: The Review Queue
A card-based mobile review interface where O.J. swipes through candidates. Each card shows the profile summary, match signals, and confidence score. Actions are accept, reject, or flag for later, each with a reason tag.
Reason Tags
Accept reasons: title_gap_confirmed, career_stall, job_search_active, strong_referral, technical_depth, culture_fit
Reject reasons: too_junior, too_senior, wrong_specialization, no_clear_pain_point, geographic_mismatch, already_connected, not_target_audience
Flag reasons: interesting_but_not_now, need_more_info, potential_b2b, potential_recruiter_partner
The reason tags are the feedback loop. Every decision teaches Harvest what a good lead looks like for Learn with O.J. specifically. This labeled dataset is gold over time.
Three Prospect Types
Harvest needs to recognize that different prospect types require different discovery signals and outreach strategies.
Coaching Clients
Engineers with 5-10+ years of experience who haven't gotten the senior title yet (or recently got it and feel shaky). They are the core audience. Signals: title frustration, promotion blocks, job search activity, career-level questions in public.
B2B Decision-Makers
People in positions to hire consultants for contract engagements (AI-assisted development training, cloud consulting). These are often engineering managers, directors, or CTOs. They have different job titles and LinkedIn profiles than coaching clients and may not be engineers themselves.
Recruiter Partners
Recruiters who could benefit from O.J.'s technical evaluation expertise. The value prop is not "help me get a job" but "I can tell you whether this candidate is actually operating at the level their resume claims." This is the title gap analysis pointed in a different direction.
Ethical Guidelines
- All data comes from public sources only
- O.J. reviews and sends every message manually
- Candidate data is deleted if not acted on within 90 days
- Transparent about AI-assisted discovery if asked
Implementation Phases
Phase 1: Intake Formalization
Zero engineering required. Formalize the intake process using the Client Profile Schema and intake form above. Start using it manually with every new client. Validate that the fields capture what matters.
Phase 2: Scout MVP
Extend hiring-scout to crawl LinkedIn and Reddit for candidates matching the target profile signals. Output raw candidate cards to a simple web interface for review. No feedback loop yet.
Phase 3: Profile Enrichment
Add the AI profile prep layer. For each candidate the scout surfaces, automatically populate as much of the Client Profile Schema as possible from public data. Generate match scores and gap analyses.
Phase 4: Mobile Review Queue
Build the card-based mobile review interface with accept/reject/flag actions and reason tags. This is where the workflow becomes phone-native.
Phase 5: Outreach Pipeline
Add draft outreach message generation for approved candidates. Messages are personalized to profile data and queued for O.J.'s review and manual send.
Phase 6: Feedback Loop
Implement the feedback loop that uses accept/reject patterns to recalibrate scout matching criteria. This is the compound interest layer that makes the system smarter over time.
Open Questions
- What is the right volume? How many candidates per day/week should the scout surface to keep the review queue useful but not overwhelming?
- Should the intake form be a standalone tool (Typeform, Tally) or built into the Harvest system? (See also: Peel in The Grove index)
- How do we handle candidates who are a better fit for B2B engagements vs. individual coaching?
- Should the outreach queue support different service tier recommendations (Focused Hour vs. Career Accelerator vs. Fresh Squeeze)?
- What is the minimum viable feedback loop? Can we start with a spreadsheet export of decisions before building the automated recalibration?
- LinkedIn crawling has legal and ToS gray areas. What is the risk tolerance and what are the fallback sources if LinkedIn access gets restricted?
- Is there a role for Harvest in qualifying inbound leads (people who find learnwithoj.com) in addition to outbound sourcing?
Harvest | Learn with O.J. | learnwithoj.com