The Lab · notebook 07 · growth marketing & AI operations
A portfolio you can run.
I'm Jordan Green. I build growth systems — the creative that earns attention and the machinery that compounds it. Each experiment below is a real case study with a working demo cell. Don't just read the work. Operate it.
In [ ]hello.py
lab.greet(visitor)
Out [ ]
Experiment 001 · lifecyclelogged 09 Mar 2024 → 22 Aug 2024
Lifecycle email, rebuilt as a system
Hypothesis
An eight-figure DTC skincare brand was leaking revenue between purchases. A state-based lifecycle system — flows triggered by what a customer actually does — will beat their batch-and-blast calendar.
Method
Mapped every customer state worth an email. Wrote 23 emails across 6 flows in the brand's voice — no template-speak. Wired triggers in Klaviyo off warehouse traits, not just ESP events.
The creative work was the hard part: a welcome arc that tells the product's story instead of begging for a review, a winback ladder that holds the discount back until cheaper nudges fail, a VIP track that never discounts at all. The machinery just makes sure the right story reaches the right person at the right hour.
In [ ]lifecycle_flow_sim
toy model — flows & lift math hardcoded for demo. The real system ran in Klaviyo, triggered off warehouse traits.
Out [ ]
RESULT: SUPPORTEDlifecycle share of revenue 24% → 39% in five months · flows outperformed campaigns 3.4× per send
view source of this experiment
# flows.yaml — excerpt from the real engagement (values anonymized)flow: welcome_arc
trigger: first_order_placed
exit: second_order_placed
sends:
- { delay: 0d, angle:"origin story, not a receipt" }
- { delay: 3d, angle:"the 60-second routine", gate: opened_prev }
- { delay: 10d, angle:"review + UGC ask" }
- { delay: 21d, angle:"the pairing customers add next" }
rule: discounts never enter a flow until two non-offer sends are ignored
Experiment 002 · scoringlogged 17 Jan 2025 → 30 May 2025
A lead scorer sales actually trusts
Hypothesis
A field-services SaaS was treating every demo request equally. A transparent points rubric — one a rep can read and argue with — routes leads better than gut feel or a black-box model.
Method
Built the score as plain SQL in the warehouse: firmographics plus intent signals, weights tuned against 18 months of closed-won data. Synced to the CRM hourly. Published the rubric to the sales wiki.
The insight wasn't the math — it was making the math legible. When a rep can see why a lead scored 74, they stop cherry-picking and start trusting the queue. Try it: the rubric below is the actual shape of the model, with the weights in the open.
In [ ]score_lead()
toy model — same rubric shape as production, weights simplified. The real scorer ran as SQL in the warehouse, synced to HubSpot.
Out [ ]
RESULT: SUPPORTEDSQL→opportunity conversion +31% · hot-lead response time 9h → under 4h
Experiment 003 · contentlogged 04 Jun 2025 → 12 Dec 2025
A content engine with humans in the load-bearing spots
Hypothesis
AI can carry research, structure, and first drafts. Humans must own point of view and final edit. Get that division wrong in either direction and you ship slop — or you ship four posts a month forever.
Method
Built a topic-cluster planner and a drafting pipeline with explicit human gates. Every piece is tagged with who did what — a rule we kept in the CMS, not just the deck.
The tags below aren't decoration. They were the operating agreement: human means a person reported and wrote it, AI draft → human edit means the machine structured it and a person made it true and interesting. Publishing the division of labor kept the bar honest at 4× the cadence.
In [ ]expand_cluster()
toy model — three clusters precomputed for demo. The real planner ranked topics by search volume × sales-call frequency.
Out [ ]
RESULT: SUPPORTEDcadence 4 → 16 posts/mo · organic sign-ups +2.1× in two quarters · zero retracted posts
view source of this experiment
# pipeline.yaml — the human gates are the productstage: research owner:ai# SERP + call-transcript miningstage: outline owner:aigate: editor_approves_angle
stage: draft owner:aistage: truth_pass owner:human# every claim checked or cutstage: voice_pass owner:human# POV added — the part AI can't fakestage: publish rule: byline only if a human owned truth + voice
Experiment 004 · paidlogged 02 Feb 2025 → ongoing
Creative volume, with a kill rule
Hypothesis
On paid social, creative testing volume with ruthless kill rules beats bid-tweaking. And there is a spend level where marginal CAC crosses your payback ceiling — past it, growth is just expensive vanity.
Method
Weekly batches of six concepts. Each gets a fixed test budget; it dies unless hook rate and early CAC clear the bar. Winners scale until marginal CAC — not blended — hits the ceiling.
Blended CAC is a comfort metric; it averages your best week into your worst decision. The curve below is the honest version: drag the budget and watch where the next dollar stops paying for itself.
In [ ]cac_curve(spend)
toy model — smooth saturation curve fitted for demo; the real account had steps and seasonality. Payback ceiling fixed at $120 CAC.
Out [ ]
RESULT: SUPPORTEDblended CAC −28% at 1.7× spend · 41 of 68 concepts killed inside week one
view source of this experiment
# testing_rules.yaml — the discipline, codifiedbatch: 6 concepts / week test_budget: $500 each
kill_if:
- hook_rate < 25% at 3s # creative failed to earn the view
- CAC > 1.5× ceiling at $500 # no rescue edits, no "one more day"scale_if: CAC ≤ ceiling for 4 consecutive days
stop_scaling_when: marginal_CAC ≥ $120# blended lies; marginal doesn't
The weekly fight about "what's working" was really a data fight. Put every touch in one warehouse and show first-touch, last-touch, and linear side by side, and the argument becomes a decision.
Method
ELT from ad platforms, ESP, and CRM into BigQuery. dbt models into one attribution mart that computes all three models on the same touches. A dashboard where the model is a dropdown, not a debate.
No attribution model is the truth — each is a deliberate bias. First-touch flatters discovery, last-touch flatters closers, linear spreads credit like peanut butter. Showing all three at once is the point: the budget call lives where the models agree. Flip the toggle and watch which channels move.
In [ ]attribute(revenue, model)
toy model — one quarter of anonymized revenue ($1.9M), touches re-weighted client-side. The real mart lived in BigQuery + dbt.
Out [ ]
RESULT: SUPPORTED — WITH CAVEATSfound email undervalued ~2× under last-touch · caveat: models bound the argument, they don't settle it
view source of this experiment
-- fct_attribution.sql — dbt model, excerptwith touches as (select * from {{ ref('stg_touchpoints') }})
select order_id, channel, revenue *
case model
when'first'then is_first_touch
when'last'then is_last_touch
when'linear'then 1.0 / touch_count
endas attributed_revenuefrom touches cross join models
-- all three models, same touches, one dashboard dropdown
Methods
Two columns, one operator.
Most marketers pick a side. The experiments above only worked because both columns ran in the same head — the copy informed the schema, the schema disciplined the copy.
Creative methods
Positioning & message mapsthe sentence that makes the rest of the funnel easier · exp 001
Lifecycle & email copywritingflows that read like a founder wrote them · exp 001
Creative direction for paidhooks, angles, and the taste to kill your own ads · exp 004
Offer & landing page designthe page is the argument; the button is the conclusion
I've spent ten years in growth roles at DTC brands and B2B SaaS — in-house first, then independent. Somewhere around year four I got tired of handing briefs to engineers and dashboards to marketers and watching meaning die in the handoff, so I learned both jobs well enough to be dangerous in either room.
The notebook format isn't a gimmick. It's genuinely how I work: write the hypothesis down before touching the budget, build the smallest system that tests it, keep what the data supports, log what it doesn't. Most of my wins came from the second attempt at somebody's abandoned first one.
I take on two or three engagements at a time — fractional growth lead, lifecycle rebuilds, or marketing-ops infrastructure. If your growth problem sounds like one of the five experiments above, it probably is one.
Field
growth marketing × AI operations
Years logged
10
Habitat
Portland, OR · works anywhere with a warehouse
Current status
one engagement slot open — Q4 2026
fig. 1 — the bench. paper first, pipeline second.fig. 2 — every experiment starts as ink.
Correspondence
Propose the next experiment.
Tell me the metric that's stuck and what you've already tried. I'll reply with a hypothesis — usually within two business days.