Director of Product · San Diego, CA

I find the edge case before it finds production.

I'm Cole, Director of Product at QuinStreet / Modernize Home Services. I work close to engineering. When someone brings me an idea, I look for the cheapest version that proves it, work out where it's going to break, and write it up so the team can build it without guessing.

01 · About

I took the long way into product.

Portrait coming soon

I went to Purdue to be an aerospace engineer. Physics turned out to be hard, and I figured out that I didn't want to do it for a living anyway. One summer an internship put me in a business-analyst seat next to a product team, and one of the developers offered to teach me JavaScript, HTML and CSS for an hour a week. We kept it up all summer.

I switched to economics with a concentration in management information systems, and I've worked next to engineering teams ever since. I can read the code, query the warehouse and argue about a data model. I also never lose track of why the business asked for the thing in the first place.

I do my best work embedded with engineers: in standup, in PR comments, and in planning, where I'm usually the one asking about the edge case nobody has scoped yet. I'd rather get the real answer early than a polite one late.

  • Ask why before what. Engineering time is the scarcest thing we have, so I want the reason before we spend it.
  • Small scope, safe architecture. Ship the smallest useful version, on a design that won't box us in later.
  • Write it down where everyone can see it. Our engineers in Pune shouldn't have to wait for me to wake up in San Diego.
  1. 2026 →
    Director of ProductQuinStreet / Modernize

    Applied AI, the paid-media platform, and the plan to move an acquired company's core workflow onto it. One PM reports to me, and I work with engineers and QA in the US, India and Mexico.

  2. 2024–26
    Senior Product ManagerQuinStreet / Modernize

    Owned most of modernize.com: lead flows, contractor profiles, programmatic SEO, cost calculators and the B2B sites.

  3. 2022–24
    Product ManagerQuinStreet / Modernize

    Learned lead generation from the inside: consent compliance, contractor tools, and a messaging-vendor migration that turned into a compliance project.

  4. 2021–22
    Associate PMPetDx · Austin

    Ran NetSuite and Salesforce implementations at the same time, touching every part of the business, plus integrations with half a dozen other systems.

  5. 2021
    Associate PMVitu · Austin

    Product owner for an international .NET/Angular team building electronic titling and registration software for Texas.

  6. 2017–21
    Early yearsInternships & BA work

    Engineering and QA internships (test automation in C# and TypeScript), then business analysis at a startup. The developer who taught me to code was in here somewhere.

02 · Skills

Skills, with receipts.

Each skill below comes with a specific time I used it. Details are anonymized where they need to be.

Architect

  • Systems & platform design

    Data models, fallbacks, caching, migration paths. I turned our contractor pages into one shared profile service that now feeds five different surfaces.

  • Integrations & data contracts

    For a server-side conversion feed to Google, I defined what one row means, which fields go in and which timestamp counts, so the ad algorithm learns what a good lead looks like.

  • Migration, cutover & rollback

    I write the rollback plan before the launch plan. When a messaging-vendor switch dropped delivery to about 30%, we hit the trigger we'd agreed on, rolled back, and moved accounts over one at a time.

Investigate

  • Technical skepticism ★

    I went back through four years of notes and counted 45 times I caught a bad assumption. Most were cheap because they came up while the fix was still a sentence in a doc.

  • Discovery

    I asked the paid-media teams where their week actually goes. One analyst spent a full day every week stitching six Tableau reports into Excel. That became an automation track on the roadmap.

  • Data, SQL & measurement

    I pull my own numbers. When a test looked like it had sunk conversion, the data showed the dip started three or four days before the test did. I wrote the checklist we now use to audit "winners."

Build

  • Building with AI

    I build working prototypes myself, mostly in Claude Code and Cursor. A Near Me prototype got design and SEO agreeing on a new results page, and a sales-research plugin I built went into real use.

  • AI product judgment

    Knowing where AI helps, where it doesn't, and what "good enough" costs. I learned a lot of this when the main user of an agent I'd shipped stopped using it.

  • Regulation → product

    When the FCC's one-to-one consent rule landed, I turned it into requirements and consent UX, then a recovery flow that got 7.3% of abandoning visitors to finish.

Operate

  • Phased scoping

    I cut MVPs hard and split work into tiers I can defend. In the acquisition migration, client ops pick group members by hand in tier one, so the first batch doesn't wait on a budget model nobody has settled.

  • Running the delivery system

    100+ sprints with engineers and QA across the US, India and Mexico. Intake, triage, capacity planning. It's unglamorous, and it's most of what keeps a team shipping.

  • Honest post-mortems

    After a launch converted 36% worse, I ran a review over 40 meeting transcripts. One of the misses it found was mine: I'd committed to an integration before I understood how it worked.

Toolbox Build Claude Code · Cursor · AWS Bedrock · Figma · WordPress Measure SQL / Redshift · Heap · Tableau · server-side GTM Ship Jira · Confluence · Notion · Miro

03 · Work

Work I'm proud of, and one launch that went badly.

Three of these went well, with complications. The fourth converted 36% worse than we expected, and the review I wrote afterward taught me more than the wins did.

Migration · 2026 · Requirements & architecture lead

Moving an acquired company onto our platform

After QuinStreet acquired HomeBuddy, I was asked to plan moving its campaign-grouping workflow onto our paid-media platform. I started with a fit-gap, walking all 48 steps of the current workflow against the target system. None of the 48 was supported as-is.

So we planned it properly. I interviewed client ops, media buying, HomeBuddy's analyst and engineers on both platforms, then wrote the data contracts and a diff step that only exports changes above 3%, because ad platforms get twitchy when their inputs churn. The scope is split into two tiers, and about 300 accounts are set to move in batches starting in early 2027.

  • Fit-gap analysis
  • Data contracts
  • Cutover planning

Compliance · 2023–25 · Product lead

When regulation rewrites your funnel

In December 2023 the FCC voted to require consent for each individual company before it could call or text a consumer. Lead generation ran on one consent covering a list of companies, so the rule went straight at how the marketplace worked.

I read the ruling, turned it into product requirements and consent UX, and presented the plan to the executive team and the wider company. On the redesigned form I shipped a flow for people about to leave. 7.3% of them came back and finished, against a 5% target, in the first days of data. The rule never took effect in the end. Once that was clear, we took out the client-selection checkboxes so homeowners wouldn't read a checked box as a guaranteed match.

  • Regulation → requirements
  • Consent UX
  • Executive communication
  1. Lead form
  2. Consent, per company
  3. Visitor starts to leave
  4. Recovery step
  5. 7.3% finish target 5%

Applied AI · 2026 · Product lead & builder

An AI product that lost its power user

I built a Claude Code plugin that does prospect research for our top enterprise seller: account briefs, ranked maps of decision-makers, and market scans. Every claim is sourced and labeled by how sure the agent is, so he knows what it actually checked.

Version one shipped and he used it. After five or six runs he went back to the Claude project he'd built by hand. His went deeper on contacts, and mine was skimming search results and returning people who had already left. So I worked through his setup with him and wrote down how he decides who to contact, and in what order. That became the design for version two, with an eval set that targets 90% accuracy on identifying CEOs and board members.

  • Agent design
  • User research
  • Evals
  1. Verified2+ independent sources
  2. Likely
  3. Inferred
  4. Unknownask, don't guess

Programmatic SEO · 2023–25 · Product lead

The launch that converted 36% worse, and what 40 transcripts said about it

The idea was a local search engine for home services: think Kayak, but for finding a contractor near you. I specced the page templates, the geographic fallbacks and the duplicate-content rules, and the listings launched in April 2025.

The system worked. The results didn't. Conversion fell 36%, and only about 600 of the thousands of pages we generated got indexed. I ran Claude Code over 40 meeting transcripts from that year and found six places where a requirement had turned into a bug. One was mine: I'd committed to an integration before I understood its architecture. The review ended with nine recommendations, including a feasibility check before any spec gets written.

  • System architecture
  • After-action review
  • Owning a miss
  1. 40 meeting transcripts
  2. 6 requirement-to-bug patterns
  3. 9 recommendations

Smaller projects

Messaging-vendor migration

A vendor switch that turned into a compliance project, with a planned rollback halfway through.

Contractor profiles platform

One profile service behind five surfaces, resolved through a campaign → service → global fallback.

Cost calculators

Rebuilt a suite of about 15 tools after we lost the data source, and designed an LLM estimator projected at $4–22 a month.

AI promotions agent

From 50 clients updated by hand to 275+ kept current automatically, for $20–50 a month. An engineer built it; I was the PM.

Inbound calls

Scoped phone-number pools so calls could be attributed. A mobile call-button test moved conversion from 0.31 to 0.41.

Lead validation

An analyst found that some duplicate leads still convert, so we stopped rejecting them and started pricing them.

Internal systems, clients and vendors are described generically on purpose. I'm happy to go into detail in conversation.

04 · Questions I ask

The question nobody wanted to ask is usually the one worth asking.

Real examples, lightly anonymized. Each one was cheaper to ask about than it would have been to find in production.

Q1If we merge two half-exports, do we get the whole thing?

The assumption: During the migration, merging partial exports from the old and new systems would produce the same output as one system.

What I asked: Does that hold for every step? It does for anything calculated per ZIP code. It doesn't for steps that look at the whole group. A ZIP with two legacy campaigns and two new ones is a four-campaign overlap, but each half only sees two.

What happened: I listed every step that has to run after the merge (unique ZIPs, the 3% change check, exclusion lists, top-N cuts, overlap counts). The design kept leadership's rule about not reaching into two systems and still came out correct.

Q2Does "supported" mean supported, or supported if nobody looks too closely?

The assumption: The acquired company's workflow would map onto our platform with minor tweaks.

What I asked: Can we walk all 48 steps of the current workflow against the target platform, one at a time?

What happened: None of the 48 was supported as-is. Grouping became a launch gate, and every gap got written up as a spec. I'd much rather find that in a fit-gap than in a migration retro.

Q3Our churn flag fires on 62% of calls. Is that signal or noise?

The assumption: A vendor's keyword-based churn indicator on recorded calls was good enough to act on.

What I asked: Of the calls it flags, how many are real churn moments? I built an AI call-insights prototype to find out.

What happened: About 1 in 12. Put in front of a team as-is, a flag that's wrong eleven times out of twelve just teaches people to ignore it. The prototype is now on the AI team's backlog.

Q4What's our rollback trigger?

The assumption: Our new messaging vendor would finish registering our phone numbers before we moved traffic over.

What I asked: If we push people onto numbers that aren't registered yet, what happens to our carrier trust score? And what number makes us roll back?

What happened: We agreed on the trigger before launch. Delivery on unregistered numbers fell to about 30%, so we rolled back as planned and moved accounts over one by one as their registrations cleared.

Q5The duplicate filter works. What is it costing us?

The assumption: Rejecting duplicate leads right away protects lead quality.

What I asked: What do the blocked leads look like in the outcome data? And which timestamp counts as "lead created"? The vendor had three.

What happened: An analyst found that some duplicates still convert. We moved from blocking to valuing: flag the lead, follow up, and only reject it if nothing improves.

Q6Did the dip start before the test did?

The assumption: A new listings platform caused a drop in conversion during its A/B test.

What I asked: When exactly did the decline begin, and what else was moving at the time?

What happened: A BI partner and I found it started three or four days before the test, while search volume was falling. We restarted the test under stable conditions, and I wrote a checklist for auditing "winners" (seasonality, lag, caching, significance, segments) that has been reused since.

Q7Can we say what coverage looked like last Tuesday?

The assumption: Logging the alert emails would be enough history. An earlier round of pushback had narrowed the ticket to that.

What I asked: Can we rebuild what coverage looked like on a given day? The emails tell you what changed. They don't tell you what the state was.

What happened: I proposed saving each run's coverage file to S3 instead of building new tables, and point-in-time snapshots moved into V1.

Q8Is that a per-lead number, or a per-ZIP average?

The assumption: An analysis comparing revenue per lead across markets was ready to automate.

What I asked: What's the denominator? It divided summed revenue per lead by the number of ZIPs, which gives an average price across ZIPs, not a true per-lead figure.

What happened: We fixed the math before anyone automated it.

Q9What if the suburb is really part of the city?

The assumption: One ZIP per city was enough to build local "near me" pages.

What I asked: What about metros where a suburb is effectively part of a bigger city?

What happened: We grouped locations by media market instead, and fell back to market-level averages wherever city data was thin.

Q10What happens if either site goes down?

The assumption: Linking a partner's local pages to our contractor profiles was a simple static test.

What I asked: Who gets credit for the lead? Is there a cap on the traffic we send? What do visitors see if their site or ours goes down?

What happened: Each one went into the partnership scoping with a contract clause to cover it.

There are more where these came from, including a few where the bad assumption was mine.

05 · Contact

Building something with
sharp edges?

I like building and running products and platforms, close to the technology and the people who write it. If that sounds like your team, I'd like to hear about it.