← All examples
Know your unknowns · Pre-implementation

Brainstorm the intervention

Before committing to a fix, ask for the whole option space — grounded in what actually exists in the code — so the choice you make is informed by alternatives you didn't know you had.

The prompt
“Here's my rough problem: Acme users churn after onboarding. Search the codebase and brainstorm 10 places we could intervene, from cheapest to most ambitious. I'll tell you which ones resonate.”
What Claude produced
Acme · post-onboarding churn

10 places to intervene, cheapest to most ambitious

I searched apps/web, services/, and packages/ for onboarding, invite, and first-session code paths. A pattern showed up: a lot of retention machinery already exists but is disconnected — the cheapest options below are mostly wiring, not building. Check the ones that resonate and copy the reply at the bottom.

Ship this afternoon Quarter-long bet
wiringnew UInew lifecyclenew surface
#1

Fix the dead-end empty state

S
apps/web/src/onboarding/EmptyState.tsx

Found in code — The zero-projects dashboard renders the illustration and the copy “No projects yet” — and nothing else. NewProjectButton exists two directories over but was never imported here; the only way forward is the tiny “+” in the top nav. Every churned user's last screen was probably this one.

Impact100% of new users hit this screen; a real CTA plus a “drop a video anywhere” hint removes the most literal dead end in the product.
#2

Turn on the sample project that already exists

S
apps/web/src/projects/sampleProject.ts

Found in code — Someone built a complete seeded demo project — “Product teaser v3” with a 45s clip, four timestamped comments, and one resolved thread — behind the flag sample_project_v1. The flag is still false for everyone and the file hasn't been touched in 8 months. The feature is done; it was just never shipped.

ImpactNew users see what a live review looks like before they've uploaded anything. Cheapest possible “aha” — flip a flag, verify the seed script.
#3

Show pending invites inside the app

S
services/mailer/templates/invite.mjml · apps/web/src/team/TeamPanel.tsx

Found in code — Invites go out as email only. TeamPanel queries team_members but ignores the invites table entirely — an inviter can't see that their teammate never accepted, and there's no resend. For a collaborative review tool, a solo user is a churn-in-waiting.

ImpactSurfacing “2 invites pending · resend” turns invisible invite decay into a visible, fixable state.
#4

Wire the milestones table to a dashboard checklist

M
services/api/src/models/userMilestones.ts · apps/web/src/dashboard/Dashboard.tsx

Found in code — The backend already records first_upload, first_comment, first_invite_accepted, and first_approval in user_milestones — but no client code reads the table. It exists purely for an analytics dashboard. All the ingredients for a “3 of 4 steps done” checklist are sitting there.

ImpactChecklists reliably lift activation; this one needs one endpoint and one component because tracking already works.
#5

Engineer the first-comment moment

M
apps/web/src/review/CommentComposer.tsx · apps/web/src/review/Timeline.tsx

Found in code — Timestamped comments are Acme's core loop, but the affordance is hidden: clicking the timeline seeds the timestamp into the composer, and nothing teaches this. Timeline.tsx has a TODO: first-run hint? from the original author. Add a ghost pin on first play — “click anywhere to comment at this moment”.

ImpactIf first-session comment rate is the activation metric (it should be), this is the most direct lever on it.
#6

Rescue silently failed first uploads

M
services/ingest/src/transcode/queue.ts

Found in code — When transcode fails (unsupported codec, oversized ProRes, corrupt moov atom), the job moves to failed, logs to Sentry, and tells the user nothing — the project card just shows a spinner forever. There's a retry-with-fallback-preset code path that's only reachable from an internal admin script.

ImpactA user whose first upload hangs forever doesn't file a ticket — they leave. Auto-retry plus an honest error email converts a silent churn path into a support path.
#7

Watch-together first session for teams

L
apps/web/src/review/PresenceProvider.tsx · services/realtime/

Found in code — Live presence is fully built — shared playhead, live cursors, “Maya is watching” badges — but it only lights up if two people happen to open the same review. Nothing engineers that coincidence. Add a “review together” scheduling nudge when a teammate accepts an invite, deep-linking both into the same session.

ImpactTeams that experience one live session likely retain at a different rate than solo users; this makes the multiplayer moment deliberate instead of lucky.
#8

Ship five review-workflow templates

L
packages/workflows/src/definitions/

Found in code — Approval workflows (rough cut → client review → final sign-off) are fully configurable — and start completely blank. The definitions directory contains only __fixtures__ for tests. Judging by a comment in WorkflowEditor.tsx, power users copy a shared Notion doc to set theirs up. Ship 5 opinionated templates: agency delivery, YouTube pipeline, client sign-off, internal QA, localization pass.

ImpactTemplates convert “configure this abstraction” into “pick your job” — the classic fix for blank-canvas churn in workflow tools.
#9

Built-in quick screen & camera recording

XL
new surface · services/ingest already accepts chunked webm

Found in code — Today Acme's onboarding has a hard external dependency: you need a finished video before the product is useful. But services/ingest already accepts chunked webm uploads (built for the mobile app), so a MediaRecorder-based “record your screen, get feedback” flow needs no pipeline work — “just” the capture UI. Removes the biggest reason a trial goes idle: nothing to review yet.

ImpactChanges who can activate — designers and PMs without an editor can create the first reviewable artifact themselves. Big build, big surface area.
#10

First-class client review portals

XL
services/auth/src/guestTokens.ts · apps/web/src/share/

Found in code — Guest share links exist but are deliberately crippled: tokens expire after 24h, guests can't comment, and there's a // TODO(sasha): revisit guest perms after launch from two years ago. The users who churn are often the ones whose clients wouldn't sign up. Make guests first-class — persistent portal, comment-with-name, no account — and every external review becomes a retention loop (and an acquisition one).

ImpactAttacks the structural cause: Acme's value depends on people who refuse to create accounts. Quarter-long bet with auth, billing, and abuse-prevention implications.
0 resonate Check the interventions that resonate — your reply builds here.