Eight years as CampaignTracker, then a ground-up rewrite, a new stack, and a new name. The honest version, including the cohort numbers that triggered it.
I rebuilt my whole SaaS and renamed it. Here's the honest version of why.
For eight years I ran a product called CampaignTracker. Last month I shut most of it down, moved everyone onto a ground-up rewrite, and relaunched it as Attri. (attri.io) New name, new stack, new pricing, basically a new company wearing the old one's customer list.
This is the part nobody tells you about rebrands: it's rarely a marketing decision. Mine started as an engineering problem and the name was the last thing to change, not the first.
The backstory
CampaignTracker did one thing: you'd make a short link, share it, and we'd tell you which campaigns drove clicks and conversions. Classic UTM-tracking, link-attribution stuff. It worked. People paid for it.
The stack was Laravel, PHP + Javascript, an AWS Lambda tracking service in the middle, and a nightly pipeline that queried Athena and dumped aggregates into MySQL for the dashboard to read. It was fine. It was also like a Rube Goldberg machine that I was increasingly afraid to touch.
Two things were quietly true that I didn't want to say out loud:
The realization that actually triggered it
Here's the uncomfortable number. When I sat down and did a real cohort audit, I had ~1,250 free accounts eating up a lot of cpu and storage.
That stat could read two ways. The doom read: "this isn't a scalable business." The real read, the one I went with: almost none of my infrastructure cost or complexity was actually serving the people paying me. I was running an enterprise-grade nightly data pipeline to give 1,250 free users dashboards they checked once a quarter.
That reframed the whole thing. The rebuild wasn't about chasing scale. It was about making the cost of serving a customer match what that customer was worth, and making the product good enough that the free-to-paid wall actually meant something.
The decision: rewrite, don't refactor
I went back and forth on this for weeks. Refactoring the Laravel app would've been safer. But the problems were structural, not cosmetic, the data layer, the redirect path, the analytics engine all needed to change, and at that point a refactor is just a rewrite you're lying to yourself about.
The new stack:
Next.js, redirect engine at edge, managed Clickhouse for analytics, Postgres for everything else.
The single biggest win wasn't any one piece. It was deleting the nightly batch job. Going from "your numbers updated overnight" to "your numbers update now" changed how the product feels, and it dropped my analytics cost structure at the same time. That almost never happens, better UX and cheaper usually pull against each other.
The messy middle nobody screenshots
Rebranding while migrating live customers is two hard projects pretending to be one.
The whole migration took longer than I told myself it would. The rename was the easy 5%.
What I'd tell past me
Where it is now
Everyone's migrated. Attri is the live product, real-time analytics, edge redirects, custom domains, retargeting pixels, the works. CampaignTracker is in read-only sunset, redirecting to the new domain.
Is it a runaway success? Not yet. The paid base is still smaller than the free top-of-funnel, and the actual work now is turning the second number into the first. But for the first time the product, the name, and the cost structure all point the same direction.
The question I'd genuinely love this community's take on: when you've got a huge free cohort compared to paid, do you make free worse to force the decision, or make paid so good the upgrade is obvious? I leaned toward the second. Curious how others have played it.
The cohort audit feels like the turning point here. It's easy to optimize for the largest group of users, but not necessarily the group shaping the business. Once you realized most of the complexity existed for people who weren't funding it, the architecture, pricing, and even the positioning all started pointing in the same direction. That's a much deeper insight than the rebrand itself.