Learn with O.J.internal

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

FieldTypeDescription
namestringFull name
linkedin_urlstringProfile URL
current_titlestringCurrent job title
current_companystringCurrent employer
years_experienceintegerTotal years in engineering
specializationenumswe, sre, infra, devops, platform, security, other
title_gap_scorefloatGap between apparent skill level and current title (0-1)
public_signalslistWhat triggered the scout match
content_activitystringSummary of their LinkedIn/public posting activity
career_trajectorystringAI-generated analysis of their career path
potential_pain_pointslistLikely frustrations based on profile signals
service_tier_fitenumfocused_hour, career_accelerator, fresh_squeeze, b2b_contract
prospect_typeenumcoaching_client, b2b_decision_maker, recruiter_partner
confidencefloatOverall match confidence (0-1)
scout_sourcestringWhere the candidate was found
captured_atdatetimeWhen 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