Every feature should have a home. Now it will.
Today we have 2 teams — Funnels and Datalytics — but no clear product boundaries between them.
Ownership lives with specific people, not teams. If that person is busy or on vacation, the feature stalls.
Two teams split by layer — frontend vs backend. Every feature crosses the boundary.
Funnels Team
Editor, dashboard UI, checkout UI, funnels
Datalytics Team
Subscriptions, Analytics, Sessions, Hosting, 20+ integrations...
One team builds it. The other team makes it work.
Four teams split by product — each owns their full stack.
Editor
Editor, Hosting, Funnels, Experiments
Payments
checkout SDK, Payments API
Analytics
Analytics SDK, Pipelines, Charts
Core
DB layers, Queues, Telemetry, Libs
No handoffs. No "that's the other team's part."
Core
db · queues · auth
Each team owns one layer of the stack end-to-end. The funnel is the runtime where the SDKs meet.
Own the funnel builder, hosting, and user experience.
Own the entire monetization vertical — from checkout to revenue.
Own the entire measurement vertical — from event collection to charts.
Other teams have fantastic tools to work fast and reliably.
The funnel wires them together. Each SDK is a black box with inputs and callbacks.
Payments never imports Analytics. The funnel decides what to connect.
Analytics SDK
analytics.track
Payments SDK
onPurchase
Funnel
wires the connection
Core
db · queues · auth
Team lead runs your daily calls
Each team gets a lead who owns priorities, standups, and coordination.
Your team reviews your PRs
CODEOWNERS maps directories to teams. Your teammates are your reviewers.
Each team owns its integrations and webhooks
No more handing off "the Stripe part" to another team. You own the full stack.
Each team manages its own incidents
Clear escalation paths. If checkout is down, Payments owns it. Not "everyone."
We're moving towards public APIs
Well-defined interfaces today become well-designed public APIs tomorrow.