— On reflection
What this work taught me about composing instead of building.
The hardest part wasn't the integration. Webhooks and metadata mappings are fiddly but solvable. The hardest part was deciding which product owned which moment, and holding that line as new requirements came up. Every quarter someone would ask "could Memberstack handle the waitlist?" or "could we generate the Member IDs in Memberstack itself?" The answer was almost always no. Each product is best at one thing; once you let a product creep into another's territory, the seams stop being clean and the next program takes longer to ship.
The second lesson was about brand surface area. The six-product stack felt invisible to the candidate because we put the design budget exactly where the candidate looks: the application page, the invitation email, the enrollment landing, the welcome handoff. The plumbing got engineered judgment, the surfaces got design judgment. That separation kept the system feeling premium even though most of the technology underneath is off-the-shelf SaaS.
The third lesson was about data as a starting condition. Every acquisition project I've worked on since starts with the same question: what data does this company already have, and how can I design around it? When we had years of first-party attendance data to work from, the segmentation layer became the spine of the system. On a project without that data, the architecture would have looked completely different. Designing on top of an existing data advantage taught me to read for the data shape before sketching the funnel.
The fourth lesson was about scope. I could have stopped at Heaven Hill and called it a deployment. I didn't. I treated the first program as a template and the second as a stress test. By the third, the patterns were obvious and the launch curve flattened. The reusability wasn't an accident; it was the design.
What I'd push next: fewer products. The six-product stack works, but every additional integration is a seam that can drift. A natural consolidation candidate is folding Prefinery's referral and waitlist mechanics into Memberstack's metadata, and folding parts of Airtable's CRM logic into Memberstack's member fields. That would take the architecture from six products to four (Klaviyo, Webflow, Memberstack, Stripe), with a thinner custom-code layer for the gating and ID generation. The composition pattern stays. The surface area shrinks.