design by tae
Case study · build log

How I built an AI data pipeline for a Fortune 500 client — and became the person who decides what's worth building next

An interactive build log · IV.AI · Fortune 500 mobility & delivery platform · 8 chapters

Most case studies describe what got built. This one is about what got decided — the real tradeoffs and engineering judgment behind an AI data pipeline that started as a solo build and scaled into infrastructure the entire org now runs on.

A one-off ask to enrich a dataset became a second data type, then a third and fourth — sold into the same account, no new sales cycle. Eventually the system stopped waiting to be asked: it started finding and maintaining what changed on its own.

Eight chapters trace that arc — one supplier relationship maturing into a sticky data partnership. It's why I still sit in the room from the second call on every new deal: sales sources the lead, I decide if it's real.

Eight chapters
  1. Early process — client interest to a real demo, MVP, and a signed contract
  2. Boots on the Ground — why I shot ~400 storefronts myself before writing a line of code.
  3. An MVP That Delivers From Day One — what to build the human-review layer out of, before scale exists to justify anything expensive.
  4. Global-Scale Deployment and Operation — the hiring-to-payroll loop that lets a small admin team run 100+ workers without micromanaging.
  5. Maturing the client — from a supplier for one project into a sticky data partner
  6. Sold on the Data, Not a New Deck — selling a third and fourth capability into the same account, because the client trusted the last three decisions, not because of a new pitch.
  7. The Industry's Long Problem: When and Where to Update — finding new venues from public-record signals before they're searchable anywhere.
  8. Not Data Drops, an Actively Maintained Dataset — why the combination becomes a standing relationship, not another one-off delivery.
  9. Org-level contribution — beyond one product, and how sales runs now
  10. Sharing the Tech Stack Across the Entire Org — what actually generalizes to other teams (the ops layer) and what doesn't (sourcing).
  11. How the Entire Org Now Runs Its Sales + Dev Cycle — the recurring role I hold on every new deal: sales sources it, I decide if it's real.
3M+Total Datapoints Processed
$4M+Year-One Deals Closed
80%+Margin at Scale, Not Pilot
<0.1%Escalated — Real Contradictions Only
Disclosure — every place name, ID, and figure below is synthetic — reconstructed to match real production scale and shape, not actual records. The decisions, tradeoffs, and mechanisms are real. The client stays confidential, the reasoning doesn't.
Role: sole builder, ch. 01–03Infra partners: small eng team, ch. 03 onwardStatus: live, ch. 04 & 07 active now
01

Boots on the Ground

A Fortune 500 mobility & delivery platform wanted real photo coverage of the places people search for on the app — restaurants, shops, venues — not just the road to them. The first pitch wasn't a deck. It was me, a camera, and every business across a NYC commercial district.

01
Walked every block, shot every storefront myself
02
Timed the whole effort, block by block
03
Turned time into a headcount/budget baseline
04
Client signed on a proven ceiling, not a promise

The need was classic — clients have always wanted more coverage than manual capture could afford. What was new was betting on immature multimodal AI early enough to be delivering by the time it caught up, instead of waiting for the tech to prove itself first.

Ground capture — the old way to guarantee quality
Quality is only as good as whoever was standing there with a camera
Be physically there
The only way to guarantee a quality image, for years
Capture
One shot, one worker, one location — no shortcut around headcount
Human check
Confirms what was already shot in the field
AI pipeline — the leaner bet
Quality no longer requires anyone being physically there
Scrape a source image
Whatever's already on the web, no site visit
Generate
The bet: generation tech can hit the same quality bar ground capture set
Human check
Same quality bar, checked without anyone in the field

The bottleneck was never headcount — it was quality image data, and for years being physically there was the only way to guarantee it. The bet: generation tech could hit that same bar without the site visit. The manual run below set the real cost ceiling that bet was measured against, not a made-up number.

Decision — do it manually first, on purpose

Shooting ~400 businesses myself wasn't the plan — it was a deliberately unscalable benchmark, built to make the real decision defensible before making it. Two different things came out of it:

An "ideal" for the client. Real photos of real storefronts set the actual quality bar — not a mockup of what AI-generated coverage might look like.
A doomsday-scenario cost model, for us. Timing myself across ~400 locations gives a real per-location time cost — the basis for "if the AI pipeline fails outright, here's the exact headcount, timeline, and budget to do this with people instead." That number is what makes the next decision defensible internally, not just externally.
Decision — bet the capture pipeline on AI generation, not more people

With that benchmark in hand, the real decision wasn't how to run a photo shoot — it was what to build the entire pipeline around. Three options were actually on the table:

Rejected — scale ground capture with more workers. Solves coverage, but the bottleneck it hits (reconciling submissions from many different people) doesn't go away with headcount — it gets worse.
Rejected — wait for multimodal AI to fully mature, then build. Safer, but it forfeits the entire head start — by the time the tech was obviously ready, so would it be to every competitor.
Chosen — build the pipeline around AI generation now. A bet that generation tech would be reliable enough by the time it needed to be, backed by the cost ceiling above, not a guess.
Businesses shot solo, several blocks~400
People running the whole benchmark1
Engineers hired before the deal was real0
First call to global production1 yr

The client couldn't buy this data from their direct competitor — the incumbent maps/reviews platform — at any price. No competitor sells its core data to a potential rival. That constraint is what made the deal buildable at all.

02

An MVP That Delivers From Day One

With that bet made, one resource-allocation call shaped everything else: invest heavily in the core pipeline's performance, and keep everything around it as lean as possible for as long as it could hold. That core is agentic by one rule — never make the generation model think. Every judgment call about what to preserve or change gets delegated to a prior agent, so generation only does synthesis on an already-decided spec. The interesting decision wasn't the AI — it was what to build the human check out of, cheaply, at this stage.

L1 · Research agent web-native

Finds and evaluates multiple candidate source images and text data for a location from public web sources — filtering for angle, lighting, and address match, then passes the surviving candidates forward as a set, not a single winner.

L2 · Prompting agent the thinking layer

Does the reasoning generation shouldn't have to: cross-references the multiple images and text from L1 and decides what has to be preserved (the place's real signage, facade, distinguishing features) versus what can change. Hands L3 a fully-decided spec — not raw research, not a judgment call left open.

L3 · Generation agent synthesis only, no judgment

Never asked what to preserve — only how to render it. Executes L2's spec exactly, producing authentic data, not a copy of one: people, vehicles, and clutter removed, without inventing a generic storefront that merely resembles it.

It didn't start structured. It started as a raw log of pipeline output, workers free to edit anything — and the structure below got added over weeks, in direct response to what the log actually showed, never planned in advance.

review_log.xlsxillustrative UI recreation
Added later: dropdownAdded later: locked, formula-drivenAdded later: one-click funnel buttons
LocationL1 — research foundL2 — told L3 to preserveL3 — producedFailure funnelStatus (locked)Action
Marlow & Vine (fictional)Usable street-level shot, van obscuring entranceDrop the van, keep signage legibleVan removed — signage softened past legibilityfaulty generation ▾needs_reviewRegenerate
Site 2 (fictional)Wrong business at this addressfaulty research ▾re-sourcingRe-source
Site 3 (fictional)Clean match, high confidencePreserve as-isMatches source exactlyshippedAccept

The "Failure funnel" column started as free text; once enough rows piled up, the real categories emerged on their own — faulty research, faulty curation, faulty generation, hallucination, plus a catch-all. That's when free text became a dropdown, status got locked and formula-driven, and actions became one-click buttons. Same file, just stopped being a log and started being a tool — and that structure is what carried into the Ch.03 platform, not a redesign.

Decision — how to build the human check

Three agents that each fail differently, chained together — that part was straightforward. The real decision was what to build the review layer out of, before scale existed to justify anything expensive.

Rejected — 3rd-party labeling tools (Label Studio, Turk-style platforms). Real learning curve to configure for this specific check; no control over the review workforce; gets expensive fast once volume actually scales; and locks the roadmap to whatever features the vendor ships next.
Rejected — building custom review tooling immediately. Overkill for pilot-scale revenue that hadn't been proven yet — and it assumes the failure categories are already known well enough to design for, when at this point they weren't.
Chosen — a programmed, shared spreadsheet. Flexible and adaptive, not too scalable — exactly the tradeoff this stage needed. Don't assume the failure modes and build for them; run the pipeline, see what actually breaks, and let the real categories emerge before deciding what's worth batching, handling by rule, or automating outright.

The leanness was useful, not just tolerable — a spreadsheet updates in minutes, so structure could change the moment a new failure category appeared. This phase's real job was buying time to learn what the Ch.03 platform actually needed, not guessing upfront.

Metro areas covered at this stage3
Resolved as edge caseslow single %
Client quality re-request ratesub-0.01%
AI agents chained per location3

Figures shown are rounded and representative of production scale, not exact production numbers.

The spreadsheet was never going to be the long-term answer — it was only ever meant to hold until it couldn't. That was the deal: stay lean everywhere except the core pipeline, until real volume exhausts what lean can carry.

Illustrative pipeline trace research_result · prompt_spec · generation_result — synthetic, shape-matched
{
  "location": "Marlow & Vine (fictional)",
  "candidate_images_found": 4,
  "surviving_candidates": [
    { "angle": "street-level", "address_match_confidence": 0.94,
      "obstructions": ["parked delivery van, partial storefront"] }
  ]
}

{
  "location": "Marlow & Vine (fictional)",
  "preserve": ["storefront signage", "facade structure", "window placement"],
  "remove": ["parked delivery van"],
  "curation_notes": "signage is the primary identity marker for this location — do not soften"
}

{
  "location": "Marlow & Vine (fictional)",
  "obstruction_removed": true,
  "signage_legibility_score": 0.61,
  "human_review": "required — every generated image, no exceptions",
  "reviewer_action_available": ["accept", "regenerate", "re-prompt", "re-source_input", "manual_correction"]
}

There's no second independent source to cross-check a generated image against — unlike Ch.04's ratings pipeline, where a contradiction between two sources is the real signal worth escalating. For imagery, every output gets a human look. That's not a gap in automation — it's the correct design when there's nothing to verify against, and it's why this chapter's tagger workforce exists at the scale it does.

03

Global-Scale Deployment and Operation

The reimagined operation from Ch.02 worked at pilot scale — a spreadsheet can't run it at millions of locations, though. Once volume proved the pilot, I built the platform that replaced it — and the hiring-to-payroll loop that let a small admin team run it without micromanaging.

Decision — build the platform myself, not adopt one

By this point the requirements were real, not guessed — the spreadsheet phase had already surfaced them. That changed the calculus on build vs. buy.

Rejected — Label Studio / Turk-style platforms, again. These are optimized for producing training data — a batch artifact you generate once, not a live operational system that has to ship correct output to a paying client continuously.
Chosen — build the review platform in-house. The AI pipeline sets the baseline, but AI isn't perfect — it's only trustworthy in production when paired with human review, and that review has to be a live operational function, not a dataset-labeling task.

Tagging platform review surface

The manual diagnosis from Ch.02 is gone — the platform now runs that same funnel logic automatically, routing each case before a tagger opens it. Every image still surfaces for review, but the tagger's job narrows to confirming the pre-routed funnel with one press, not diagnosing the failure.

Hiring-to-payroll loop ops system

Auto-graded recruiting test → strong scorers routed to HR for contracting → work/pay tracked live → every payout batch graded → a Slack HR bot routes tickets automatically.

tagging_review — queue4 pending
Auto-routed funnelLocationTagger action
pass matches source exactlySite 4 (fictional)Accept
faulty research wrong business at this addressSite 2 (fictional)Confirm re-source
faulty generation signage softened past legibilityMarlow & Vine (fictional)Confirm regenerate
flagged — custom tagger note: awning color mismatch, unseen beforeSite 5 (fictional)Manual correction

Every row still gets a human look, but only one needs a real judgment call — the last, a pattern the router hasn't seen. The other three are one press: confirming a diagnosis, not making one. Override is still available on any row — a strong default, not a rule with no exit. That's the actual throughput unlock: fewer decisions per tagger, not faster ones.

That's one status change. Here's the system underneath it — the part most PMs never build themselves: a hiring-to-payroll loop built for real autonomy and real accountability, not spot-checks.

01
Apply
Candidate takes an auto-graded onboarding test
02
Score
Test grades itself against a rubric, no human review
03
Route
Top scorers routed to HR for contracting, automatically
04
Onboard
Guidelines shared, first queue item assigned same day
ops.internal / my-progressillustrative UI recreation
Tagger — illustrative viewRole: QA Tagger
214
reviewed this week
$189.40
earned, unpaid
96%
last grading pass rate
Daily pace vs. your own average112%
Days until next grading cycle3 of 14
Every action you take is logged the moment you take it — this page reads the same event log that calculates your pay. Nothing here is a summary written later; it's live.

This is the actual mechanic behind "autonomy without micromanaging" — a tagger never has to ask a human "how am I doing?" The system already told them, in real time, off the same log that pays them.

Overdue = work-days accumulated at that tagger's own pace, not a calendar date. A fast tagger hits the 14-day mark sooner and gets flagged sooner — correctly.

ops.internal / grading-queueillustrative UI recreation
OverdueGrade soonBuilding upFreshUp to date
Tagger90-day daily paceActions since paidEst. work daysTheir avg/dayStatus
Tagger A6,14016.8d / 14d366Overdue
Tagger B2,8509.1d / 14d313Grade soon
Tagger C1,1904.2d / 14d284Building up
Tagger D4101.6d / 14d259Fresh
Tagger E301Up to date

The sample graded per tagger is a random draw from their full history, not cherry-picked. Pay is calculated independently of the grade — volume sets the dollar amount, grading decides whether that person keeps getting work. Once a payout is marked paid, the report shown at that moment is locked, so a later correction can't quietly change what someone already got paid for.

The table above is the aggregate queue. This is the admin tool underneath it, mid-cycle on Tagger A's overdue batch — one sampled action at a time, not a spreadsheet row.

ops.internal / grade-cycle / tagger-aillustrative UI recreation
Grade
2Payout
3Confirm
4Receipt
Sampled action
location_review · Marlow & Vine (fictional)
Tagger action taken
re-source_input
Time on task
41s
Grader verdict — sample 7 of 20
Pass
Fail
Note (optional)
Correct call — signage was genuinely illegible after generation, re-sourcing was the right action.
6 passed · 1 failed · 13 remaining

Grade → Payout → Confirm → Receipt runs once per cycle per tagger. The pass/fail call on this one sampled action feeds directly into the pass-rate tile shown in Step 2 — same event log, no separate summary written later.

The same admin team also watches which pipeline stage is actually slow — so engineering time goes to the real bottleneck, not a guess.

ops.internal / efficiencyillustrative UI recreation
78%
First-pass rate
14%
Regenerated
1.3
Avg trips per location
99.4%
Delivered

Avg. time per stage — bars colored by severity, not decoration

scrape → generate
1.8h
generate → review
1.1d
review → regenerate
2.4d
review → deliver
4.2h

The review → regenerate loop is the real bottleneck — not "review" itself. That's the difference this dashboard is built to surface: rework is slow, first-pass review isn't.

The same admin team also watches the machine side of the operation — every batch job, its status, and its real cost, down to which function and which model provider spent it.

ops.internal / processingillustrative UI recreation
job_8f21c4 · image_batch
Batch 214 — regional refresh
started 09:41 · 12,480 places dispatched
Initial estimate$412
Projected (≥10% sampled)$438
Actual so far$401
running
Cost breakdown — by function, by provider
FunctionInputOutputCachedCallsCost
image_scrape_select1.2M84K310K12,480$96.10
image_generate2.4M12,480$268.40
legibility_score640K22K180K12,480$36.50
ProviderInputOutputCallsCost
grounded search model1.2M84K12,480$96.10
image-generation model2.4M22K24,960$304.90
job_7a10b9 · reviews_batch
Batch 213 — ratings refresh
completed 08:55 · 9,102 places · 0 failed
Initial estimate$295
Projected (≥10% sampled)$301
Final, from real usage$298
completed
job_3c88e2 · image_batch
Batch 212 — priority re-source
auto-cancelled 07:12 · cost spike detected, 3.1× baseline
Initial estimate$180
Actually spent, to cancel$68
Projected, if left running~$558
Avoided by cancelling~$490
auto-cancelled

Cost is tracked in three stages: an initial estimate before the batch runs, a projected figure once ≥10% is sampled, and a final cost from actual token usage — split by function and provider. That granularity is what makes the auto-cancel row possible: the system caught its own cost curve spiking 3.1× baseline and killed the run before the bill did.

Workers onboarded & trained100+
Admins running the whole operation~5
Payout visibility per workerreal-time
Batches graded, tied to payevery one

Spot-checks don't scale past a handful of direct reports. What scales ~5 admins to 100+ workers is a system that gives every worker real-time visibility into their own pace and pay, and gives every admin a queue already sorted by whose SLA clock is closest to running out. Autonomy and accountability come from the same system, not opposite ends of a trust spectrum.

04

Sold on the Data, Not a New Deck

active, scaling now

The client didn't just receive the data — they trusted it, which is what opened the door to more projects without a new sales cycle. Same discipline, more data types: imagery was capability one; ratings, reviews, and keyword text came next, indexed to power the client's own recommendation algorithm. Now, structured menu items and menu imagery for a food-delivery vertical — a third and fourth capability into the same account.

Decision — reuse the discipline, not the code

The easy version: point the existing image pipeline at food photos and call it done. Reusing the discipline (research → extract/generate → HITL) instead of the code is what made a new revenue line buildable in weeks, not months — one rule inside that core still had to change per data type, or it breaks the moment the new data doesn't behave like the old data.

The reusable core — same discipline, every capability
Research
Extract / generate
HITL
Capability one
Location imagery
Capability two
Ratings, reviews & keyword text
Capability three
Menu + food imagery
CapabilityWhat varies about the dataHow the reused core absorbed it
Ratings & reviewsEvery source is thin or uncertain somewhere — that's the normal case, not the exception.HITL fires on a verified contradiction between two sources, never on plain uncertainty — flagging normal thinness would put nearly every record in front of a human, so uncertainty routes back to more research instead, and a person only sees the rare case two sources actually disagree.
Menu itemsNo fixed structure across restaurants — price per dish, price per combo, or no listed price at all.Same fixed output shape every time, but almost every field is nullable — a gap fills in null and drags confidence down, instead of writing a bespoke parser per restaurant's own menu format.

Neither fix was a new architecture — both are the same research → extract/generate → HITL core, with one rule inside it adjusted to the new data's actual failure pattern. That adjustment is the whole build; everything around it is untouched.

Capability sold into the same account, no new sales cycle3rd+
Distinct data types enriched: imagery, ratings, reviews, keyword text, menu items, food imagery6
Data points processed across every capabilitymillions
New pipeline architectures required0

"Expansion revenue without a new pitch is the actual proof that the commercial judgment in Chapter 8 is working, not just the technology. A client doesn't hand you a fourth capability because a pipeline runs — they do it because the last three decisions you made for them were right."

05

The Industry's Long Problem: When and Where to Update

The industry-level problem: a city's business landscape can't be fully re-scanned on any reasonable cadence, and by the time a new venue shows up on a maps or reviews platform, competitors already have it. This is a maturity ladder, not one clean idea — each level is a strictly smarter answer to "when and where to look" than the one before it.

Observation — a stale client request is a hallucination request

Across enough projects, the hardest recurring edge case wasn't a research failure — it was a bad starting point. A client request pointing at a place that's closed, moved, or never matched the address doesn't just slow the pipeline down — it asks an AI research agent to find something that isn't there, and an agent instructed to research a specific place will produce an answer regardless. That's the failure mode: asking it to research something that no longer exists is asking for a hallucination, not preventing one.

The fix wasn't a better validity check bolted onto the front of the pipeline. It was starting from a better seed in the first place — a verified signal instead of a raw, unverified client request.

Level 1
A little smart — prioritize by density, not every block equally
Still just geography. Classify terrain first, then spend search budget where it's dense and skip what's obviously empty. Better than brute force, but still a guess about where, not a real signal about what.
Level 2
Very smart — the signal becomes the seed the research agent starts from
Government records are a direct, precise pointer: a specific address filed a specific permit. That record doesn't just tell the pipeline where to look — it replaces the raw client request as the research agent's actual starting point, a verified seed instead of an unverified name and address that might already be stale.
Level 3
The payoff — pinpoint updates, not a citywide re-scan
The actual goal was never a citywide re-scan — it's knowing the small number of exact places that changed, and updating only those.
Decision — public records over waiting for a listing to appear

Every incumbent maps/reviews platform waits for a venue to exist online, then indexes it — a fixed lag no scraping speed fixes. Government records — liquor license applications, health inspections, building permits, LLC / business registration filings, change-of-use planning filings — are legally required to exist before a venue opens. That's not a faster scrape; it's a structurally earlier signal no competitor scraping listings after the fact can access.

Four public-record trails, each required to exist before a venue is searchable anywhere
LLC / business registration
Earliest — often months before opening
Legal entity has to exist before it can sign a lease
Building / change-of-use permit
Early — construction phase
Filed before renovation of the space starts
Liquor license application
Mid — pre-opening
Public hearing process, filed weeks to months ahead
Health inspection record
Latest — right before opening
The most reliable single confirmation a venue is real
No single trail is sufficient alone — see the cross-signal-agreement fix below. Each one just has to exist somewhere before a listing does.

Iterated three times in production, false-positive rate dropping at each step:

v1 — one signal. A licensing flag alone: re-inspections, ownership transfers, and rebrands all looked identical to a genuine new venue.
v2 — cross-signal agreement. Require 2 independent gov. systems to agree — independent bureaucracies rarely produce the same false signal by accident.
v3 — add the earliest signal, then filter it. Planning filings give 90–270 days of lead time but are noisy — a 7-stage pre-filter cuts candidate volume ~66% before any AI verification cost is spent.
Independent gov. data sources cross-referenced3
Candidate volume cut before paying for AI verification~66%
Lead time on the earliest signal, before a venue is searchable anywhere90–270 days
Iterations shipped, tested, and corrected in production3

One documented real-world run of this system, one major city, surfaced ~90 venues either confirmed new or about to open — before any of them existed on a commercial maps/reviews platform. Figures rounded, representative of a real production run, not the exact count.

Government records are the sharp, direct signal — but they don't cover every case (informal permitting, older buildings, jurisdictions with thinner digital records). The Level 1 scan below is the coarser net that still has to run underneath, so a naive area sweep doesn't waste budget while the precise Level 2 signal is doing its job.

Adaptive scan — what was actually built
Resolution follows terrain: dense blocks subdivide, sparse gets one pass, skip is never queried.
Dense — subdivides
Sparse — one pass
Skip — never queried
Naive uniform scan — the alternative
Same city, same cell count, one fixed resolution regardless of what's underneath.
Every cell — same query, same depth
Full-resolution budget spent on parks and water; dense blocks get no more scrutiny than empty lots.
Detail worth knowing — classify terrain once, up front, then let density set the recursion

A naive geographic scan checks every block at the same resolution — wasting budget on parks and water while under-sampling the dense commercial blocks worth the most. The scan I built classifies terrain first, from one bulk public-map-data query over the whole area, not one query per tile: classification has to be cheap, or there's no budget left for the real searches. Each cell is scored by tag priority, checked in this order:

PriorityTag signal foundClassificationWhat happens next
1stCommercial / retail / food tagsDenseAdaptive recursive subdivision
2ndWater, parks, forestSkipNever searched, not even once
3rdResidential / industrial tagsSparseExactly one search, no recursion
fallbackNo map-data signal at allDenseTreated as priority 1, not skipped

Recursion depth is driven by the classification, not a fixed zoom level: sparse gets one query and stops; dense subdivides into four quadrants every time a search circle returns the API's max result count — because hitting that cap is the signal there's more there than one query found, not a guess about it.

Decision — when there's no data, assume dense, not empty

The genuinely non-obvious call is the fallback row above. An area with zero map-data signal has two plausible readings: nobody's mapped it because there's nothing there, or nobody's mapped it because it's an old, poorly-digitized part of a real city. I bet on the second, on purpose.

Rejected — default unknown areas to skip. Cheapest option, and wrong in exactly the cases that cost the most: map-data gaps cluster in old dense downtown blocks with poor digitization history, not in parks — parks are trivially and completely mapped. Skipping on "no data" would silently drop real commercial blocks, the highest-value terrain in the whole scan.
Rejected — scan everything uniformly, ignore classification. Removes the failure mode but reintroduces the exact cost problem the two-tier grid exists to solve — fine-grained recursive search over parks and water that will never return a business.
Chosen — default a data gap to dense. Trades a handful of wasted searches over a genuinely empty lot against the much worse failure of silently skipping a real commercial block because the map provider never got around to tagging it. The cheaper failure mode is the one to eat.

Level 1 and Level 2 both exist to serve Level 3 — pinpointing the handful of places that actually changed, not refreshing a whole city to find them. That pinpoint update is what a real budget actually buys, not a research exercise for its own sake.

06

Not Data Drops, an Actively Maintained Dataset

Multiple capabilities sold into one account (Ch.04), plus a way to find what changed before anyone asked (Ch.05), don't just add up to "more data types." Combined, they make something structurally different possible: a dataset that lives and breathes — actively audited, verified, and enriched, not a standing library that just gets bigger.

Decision — stop supplying data drops, start maintaining the dataset itself

A data drop is a transaction — hand over a batch, the relationship pauses until the next ask. Treating that same dataset as a source of truth instead — auditing what's already there, enriching it continuously, catching what's gone stale — is a standing relationship, not a transaction repeated on a schedule. That shift is only buildable once there's enough surface area to maintain (Ch.04) and a way to know what changed without being told (Ch.05); neither chapter alone gets you there.

It also changed tagging itself. Every earlier chapter escalated on a contradiction between two research sources — now there's a third reference: the dataset itself. A result that agrees with what's already verified ships without a look; a source that actively conflicts with it still goes to a human. Tagging gets more efficient not because taggers work faster, but because the system stops flagging cases it already has good reason to trust.

Verified signals — Ch.05's gov-record discoveryin
Known data — already audited, trustedin
New data — freshly sourced, not yet verifiedin

All three feed the same dataset, not three separate stores — a verified signal, a known fact, and a freshly-sourced result all get checked against each other the same way. That's the real difference from a data drop: nothing just gets appended.

07

Sharing the Tech Stack Across the Entire Org

active now

This one isn't about one client anymore. Other internal teams — running entirely different data-acquisition methods on entirely different data — started asking the same question: can we run our tagging work on what you built, instead of Turk, Label Studio, or a shared spreadsheet?

Decision — what actually generalizes, and what doesn't

The easy, wrong answer is "yes, use the whole platform." A sourcing method tuned for one data domain doesn't transfer to another — different teams already use different methods (on-device capture, panel data, third-party APIs, web scraping). I've had to correct people on this directly: hearing "it's all on the web" doesn't mean an unrelated data domain overlaps with this pipeline.

Not this: "just plug your data into our pipeline." The sourcing method is domain-specific — built and tuned for how this specific data behaves on the web. Forcing another team's sourcing problem through it would mean re-solving problems that are already solved correctly elsewhere.
This: the operations layer generalizes, the sourcing layer doesn't. The part that's genuinely domain-agnostic is everything downstream of "a human needs to look at this": the recruiting test, onboarding, the tagging UI itself, grading, payout, performance tracking. That loop doesn't care whether what's being tagged is a location photo, a review, or something from an entirely different data domain — it only needs a queue and a verdict.
Team ALocation imageryweb-scraped, per-photo review
Team BRatings & reviewsthird-party API, text-contradiction check
Team CMenu datapanel data, field-level verdicts
Team DAnother team's dataon-device capture, its own sourcing
Ops / HITL layerrecruiting · onboarding · tagging UI · grading · payout · performance tracking — shared across all teams

Four different sourcing methods, four different data domains, sitting on one shared foundation — each tower is sealed off from the others, but every tower rests on the same band.

What transfers ops layer

Recruiting, onboarding, the tagging surface, grading, payout, performance tracking — the entire human-in-the-loop operational loop, reused as-is by teams working on completely different data.

What doesn't sourcing layer

How the data gets found and scraped in the first place — that stays domain-specific, one team's method per data type, not a shared black box.

Knowing exactly where that line sits — and saying so directly when someone assumes otherwise — is as much the job as building the platform was. A platform that quietly overpromises "it does everything" is a worse outcome than one that's honest about its edges.

Teams now running tagging on this platformmultiple
Third-party tools and spreadsheets it replacedTurk, Label Studio, sheets
Sourcing method shared across those teams0 — by design
Ops layer shared across those teams1

A platform that spreads because people ask for it is a different kind of proof than one that spreads because a contract requires it. Nobody was told to use this — they asked, because the alternative was a spreadsheet.

08

How the Entire Org Now Runs Its Sales + Dev Cycle

This isn't a one-time chapter — it's the recurring role I hold on every new deal. Sales sources the lead and runs the first call. By the second call, I'm the one in the room with a working demo and a scaling plan, deciding whether it's real.

Call 1Sales sources the leadLeadership brings a brief — new data type, new market, new vertical. This is sourcing, not scoping.
Build & modelI build the proof and the numberA working demo, plus unit economics modeled against actual reconciled cloud billing — not a projection.
GATE
Call 2Go / no-go, decided on evidenceMine to call — not because of a title, but because I'm the one holding the demo and the number.
Go
Buildable, worth it — cost per record clears the client's stated budget ceiling at the proposed volume. Build proceeds.
No-go
Doesn't hold up — the real number doesn't clear the ceiling, or the mechanism breaks on contact with actual data. Killed before it's built.
Decision — who actually calls the deal

The pattern repeats every time a new deal expansion comes up: leadership brings a brief to the table — a new data type, a new market, a new vertical. That's sourcing, not scoping.

Not evaluated on promise. A lead being "interesting" or "big" isn't the bar — plenty of asks sound good in an email and fall apart on contact with the actual mechanism.
Evaluated on a real demo and a real number. By the second call, I've already built a working proof and modeled the unit economics against actual cloud billing — not a projection. The go/no-go is mine, made on evidence, not enthusiasm.

No pipeline diagram shows who decided it was worth building in the first place. On this account, that's me — not because of a title, but because I'm the one who shows up to the second call with a working demo and a real number instead of an opinion.