By Andy Gaber · Published August 24, 2026 · Last updated August 24, 2026
Key stat: In the compliance-SaaS category, buyers routinely justify $500-$5,000/mo tools against a single avoided fine or a single passed audit — anchor pricing to that exposure, not to seat counts.

A radically transparent account of three years, four dead products, and the humiliating moment that finally taught me the difference between building something and selling it.
I was checking Stripe for Digital Dashboard Hub, the analytics SaaS I'd been running for months, and I saw it: one active subscription, $19/mo, MRR flat and steady since the day it started. I remember feeling something close to pride for about four seconds. Recurring revenue. A real customer, sticking around.
Then I looked at the email on the account. It was mine.
Months earlier I'd created a test subscription to check the checkout flow worked, and I'd never cancelled it. There was no customer. There had never been a customer. The "MRR" I'd been quietly proud of, the thing I'd let myself believe was proof the product had legs, was me billing myself $19 a month to feel less alone.
I killed it that day. Not gently, not with a wind-down plan — I cancelled the subscription, deactivated the eight products tied to it, and moved on. The exact words I used at the time, talking to myself as much as anyone: "the 1 signup was me, it's trash."
That's the story. That's the whole article, really, if you want the one-sentence version: I spent three years building things nobody asked for, and the closest I came to product-market fit was accidentally becoming my own customer. What follows is what that cost, what I actually learned, and what I'm doing now that I think is different — with the appropriate amount of suspicion about whether "different" means "better," because at the time of writing, I don't have the revenue to prove it yet.
Here's the honest timeline, no rounding up.
It started with Etsy. Three shops, digital products, Pinterest driving traffic through scheduled pin automation — the classic solo-founder on-ramp: low technical bar, existing marketplace, existing buyer intent. It made some money, never real money, and taught me almost nothing about building software because I wasn't building software. I was running a content mill with a storefront attached. Eventually the automation stopped being worth the overhead relative to what it returned, and I shut the whole thing down — three shops, the automation, the tooling — in a single day. Etsy and Pinterest are both fully dead in my stack now. I don't reopen killed channels on nostalgia.
Then came DonePins, a printables and pin-generator business that was, in retrospect, Etsy with extra software wrapped around it — more automated, more "scalable" in the pitch-deck sense, still selling into the same low-intent, low-willingness-to-pay buyer. I built real infrastructure for it: 24 separate Stripe products, 33 scheduled automations running the content and posting pipeline. Then I killed it entirely, in one sitting — every product deactivated, every automation deleted. The tuition wasn't just build time. It was the maintenance tax of running 33 scheduled jobs for a business that was never going to clear four figures a month, and the cost of not noticing sooner.
Then Digital Dashboard Hub — the analytics SaaS from the opening story. This one hurt more because it looked like the "real" business. Recurring subscriptions, a dashboard product, the whole SaaS-founder aesthetic. It had exactly one subscriber, and that subscriber was a test account I forgot to cancel. Total real, external, non-me revenue across the lifetime of Digital Dashboard Hub: $0.
Alongside DDH there were AI citation-checking tools — a category I found genuinely interesting, compliance-adjacent, aimed at helping people verify sourced claims. I built pieces of this and then froze the whole line rather than killing it outright, because I still think there's something there, just not something I have bandwidth to prove right now.
Total revenue across three years and four product lines, real dollars from real strangers: $0.
That number needs to sit there for a second, because most founder retrospectives round it up to "some early traction" or "a few hundred dollars a month before we pivoted." I don't have that sentence available to me. It's zero. What I have instead is three years of pattern-recognition about exactly how I fool myself, which — I'll argue later — might actually be worth something, but it isn't worth pretending it's revenue.
What I do have, and what actually cost real money rather than just time: API and infrastructure spend across three years of iterating — coding agent usage, hosting, domains, tooling subscriptions, email infrastructure. No single clean number, because it was never tracked as one line item across four different side projects, but it's a real four-figure-to-low-five-figure sum, and it's gone regardless of what any product eventually earns.
The thesis for pivoting toward compliance and monitoring products — the "August Gold" portfolio I'm running now (PixelProof, TariffWatch, EntryProof) — is not complicated, and I want to state it plainly because I think it's actually correct, separate from whether I execute on it correctly.
Regulated buyers have three things consumer buyers mostly don't: deadlines, budget line items, and recurring pain that doesn't go away on its own. A Shopify store owner running broken Meta pixels doesn't feel urgency until an ad account gets flagged and someone asks why. An importer facing a Section 232 or 301 tariff change has an actual date on a calendar after which landed cost changes, sometimes materially, and someone is accountable for knowing in advance. An Amazon seller who needs CPSC eFiling in order isn't buying optional software — it's closer to insurance against a customs hold or a recall. That's the whole bet: sell into pain with a deadline attached, not pain that's merely uncomfortable.
Etsy and DonePins buyers, by contrast, were discretionary. Nobody has ever had a compliance deadline for buying a cuter printable planner. That's not a knock on those businesses — plenty of people make real money there — it's just an admission that the demand curve for "delightful" is much softer than the demand curve for "the customs broker is asking me for this by Friday."
But — and this is the part the survivorship-bias version of this essay would skip — the counter-thesis is real and I'm living inside it right now. Regulated buyers are slow and skeptical of new vendors, especially solo, especially unbranded. They have procurement processes even as a five-person importer, because their industry has a culture of caution baked in from decades of regulatory whiplash. They're hard to reach because they don't live on Twitter or TikTok, and the channels that do reach them — trade publications, industry associations, brokers, forwarders — are slow-moving and relationship-gated. And critically, the pain only becomes urgent right before the deadline, which means your outbound has to land at exactly the right moment in a process you don't control and mostly can't see.
So the honest version of the thesis is: compliance SaaS has better unit economics if you can get in the door, and getting in the door is slower and harder than almost any consumer play. At the time of writing, I'm 0 for 5 on founding-customer offers and MRR is $0 — either early-stage noise or evidence the counter-thesis is winning. I genuinely don't know yet.
Here's a pattern that cost me more time than any single bad idea: I kept mistaking rung one of a three-rung ladder for rung three.
Rung one is built — the code exists, it runs, it does the thing in a demo. Rung two is shipped — it's live, in production, a stranger could theoretically find it and use it without you doing anything by hand. Rung three is sold — a stranger found it, understood it, and paid you money for it, ideally more than once.
For most of the last three years I was treating "built" as if it were "sold." I'd finish a feature, watch it work in a test environment, feel the dopamine hit of having shipped something real, and quietly move to the next feature — without ever forcing the actual test: putting it in front of a stranger who has no obligation to be nice to me and seeing whether they'll pay.
The DDH story is this exact failure mode in its purest form. The checkout flow was built. It was shipped — live, real, a stranger genuinely could have subscribed. It looked, from the Stripe dashboard, like it had been sold. It hadn't. I'd climbed rungs one and two and fooled myself into believing I was standing on rung three because the data shape looked the same from a distance.
Rung one is fun; rungs two and three aren't, in different ways. Building is satisfying because you control every variable — the code compiles or it doesn't, and you get to feel competent multiple times a day. Shipping is administrative and slightly scary because the thing is now out where it can be judged. Selling is the worst one, because it requires asking strangers for money and hearing "no," or worse, hearing nothing — which is what's happening right now with one warm lead I'll get to below.
So I built. Compulsively, across four product lines, because building was the part I could win at alone, from my phone, without anyone's participation or judgment. Nobody has to say yes to you for you to ship a feature. Somebody has to say yes to you, out loud, with a credit card, for you to sell one. I optimized for the version of progress that didn't require anyone else's yes, and called it traction.
The fix, as far as I can tell, isn't a better tracking spreadsheet. It's forcing rung three earlier than feels comfortable — before the product is "ready," before the feature set feels complete — because rung three is the only rung that tells you anything true.
I run this whole operation solo, non-technical, mostly from my phone, by directing a fleet of AI coding agents that write, review, and deploy the actual code. I give the agents NATO phonetic callsigns — Alpha, Bravo, Charlie, Delta, and on through the alphabet — partly because it's genuinely useful for tracking who did what across a long session, and partly because, I'll admit, it makes solo founder work feel a little less lonely to have a roster.
What actually works: parallelization. In one recent weekend sprint, the fleet merged 65-plus pull requests across 14 waves — separate agents working independent seams of the codebase simultaneously rather than serially, which is the entire point of not being a single human engineer typing one line at a time. That throughput is genuinely something I could not do, or afford to hire for, as a solo non-technical founder three years ago. It's the single biggest structural advantage I have now that I didn't have when this started.
What also works, and had to be built the hard way: verification receipts required for every claim. Early on, an agent would report "shipped the pricing page" and I'd relay that upstream as fact, only to find the deploy had actually failed, or the change lived on a branch that never merged, or the claim was simply wrong. It happened enough times that I instituted a hard rule: no agent's claim of "done" gets relayed as fact without a receipt in the same output — a commit SHA, a deploy ID, a live URL actually checked. It sounds paranoid to build a "no unsubstantiated claims" policy for your own software robots, but the alternative is a founder (me) confidently telling himself things are live that aren't — a more sophisticated version of the exact DDH mistake.
What fails, or required real friction to fix: agents are optimistic by default, in a way that mirrors my own worst instinct. Left unchecked, an agent will report a task complete because the code compiles and the happy path works, without checking failure paths, without verifying an email actually has valid credentials, without noticing a form is silently logging test data instead of real signups. I now run a standing rule that every fixer or auditor agent's output has to end in a structured receipt block — what changed, what commit, what deploy state, independent live verification — or the output gets rejected outright, no matter how confident it sounds.
The meta-lesson, which applies whether or not you're running a fleet of AI agents or doing everything by hand: velocity of code output was never my bottleneck. Trusting my own status reports without verifying them was.
Every product I run now has an explicit kill date on the calendar before it launches. Not a vibe, not "we'll know it if we see it" — an actual date, 90 days out, with a pre-committed definition of what counts as enough signal to keep going.
This didn't exist for the first three years, and its absence is probably the single largest source of wasted time in this story. DonePins didn't have a kill date; it had a kill moment, which arrived only after enough accumulated evidence and fatigue that I finally, all at once, deleted 24 Stripe products and 33 scheduled automations in a single sitting. DDH didn't have a kill date either — it had the Stripe dashboard moment, a humiliating way to find out you should've quit months earlier.
What the kill decision actually felt like, both times, was relief before anything else. Not grief — relief, immediately, like putting down something heavy I'd been carrying past the point it was useful. That's data in itself: if killing something feels like relief rather than loss, you probably kept it alive too long. The data, in both cases, had been telling me the same thing for weeks — flat or zero revenue, no organic inbound, no one asking about the product unprompted. I just hadn't built a mechanism that forced me to look on a schedule and make a binary call.
The 90-day rule fixes the mechanism problem, not the ego problem — those are different things. A calendar date doesn't stop you from moving the goalposts when day 90 arrives and the numbers are bad; "just two more weeks" is still available to me. What the date does is force an explicit, documented moment where I have to actively choose to extend rather than passively continue because stopping never came up. It converts an infinite default (keep going because no one told me to stop) into a finite one (justify continuing, in writing, against pre-committed criteria, or kill it).
Right now, under this regime: PixelProof, TariffWatch, and EntryProof each have a kill date. None of them have hit it yet. Whether the rule actually holds when the date arrives and the temptation to extend shows up — that's the real test, and I haven't faced it yet with this portfolio.
The blackhole email is the story I'm most embarrassed by, more than the DDH self-subscription, because it's not a one-time humiliation — it's a structural risk that could have been silently costing me real customers for an unknown period of time, and I only found it by accident.
Here's what happened: one of my products had an owner-alert email configured — the notification that's supposed to fire whenever something important happens, like a new signup or paid conversion, so I actually know about it. That alert address was pointed at a blackhole — an address that either didn't exist or wasn't being checked. If a real customer had signed up during the window that misconfiguration was live, I would never have known. No alert, no follow-up, no onboarding email — nothing. The signup would have just happened, silently, into the void, indistinguishable from never happening at all.
I don't know if this cost me an actual customer, and that's the worst part — I can't rule it out or prove it either. What I know is the failure mode existed, undetected, on infrastructure I was actively promoting as trustworthy monitoring software to other businesses.
There was a second version of the same bug: a signup form silently counting my own test rows as if they were real signups, inflating what looked like early traction with data that was actually just me testing the form. The DDH mistake again, but at the funnel level instead of the billing level — the metric said "someone's interested" and the truth was "I clicked my own button."
The pattern underneath both bugs is the same: silent failure is uniquely dangerous for a solo founder because there's no second person around to notice something's off. In a team, someone eventually asks why the signup alerts have gone quiet. Solo, there's no ambient scrutiny. A channel gone silent because it's broken and a channel gone silent because it's genuinely quiet look identical unless you've built monitoring that tells them apart.
Yes, I'm aware of the irony of learning this lesson while building monitoring tools for other people's businesses. I think that's the point rather than a coincidence — PixelProof exists because Meta pixel misconfigurations on Shopify stores are the same category of bug: something quietly broken, producing silently wrong data, that the owner has no way of noticing until someone looks on purpose. I didn't pick this problem space in spite of getting burned by my own silent failures. I picked it partly because of them.
The operating rule now: every funnel event — signup, trial start, reply, checkout — gets an automatic alert with identity and status attached, and no revenue claim gets made from memory or vibes. Every payment claim gets checked live against Stripe, requiring an actual `invoice.paid` event with an amount greater than zero, before I say anything happened. That rule exists directly because of the DDH self-subscription. I don't get to say "someone subscribed" anymore. I get to say what Stripe says.
Nobody wants to hear this, but the honest list of what's actually working — or at least what I'm actually doing, since "working" implies revenue I don't have yet — is unglamorous by design, because the buyers are unglamorous by design.
SEO, including this exact article. Compliance buyers search. An importer worried about a Section 232 tariff change types something into Google at 11pm, not into a Twitter search bar. Long-form, specific, first-person content — like the piece you're reading — is a bet that showing up honestly for the exact questions a founder in this space is asking (including "does this even work") compounds slowly rather than exploding, which fits the buyer, even if it doesn't fit my patience.
Cold email, through dedicated tooling, with real warmup discipline. Not blasting. Compliance-adjacent buyers are appropriately suspicious of cold outreach — their inboxes are full of it from actual bad actors. I run cold email at a slow, deliberate cadence during warmup, capped low, because sender reputation in this vertical is fragile and slow to rebuild once damaged. It's the least exciting channel I run and probably the one I trust most, precisely because it doesn't depend on an algorithm's mood.
Free tools and diagnostic scans as lead magnets. A free Meta pixel scan for a Shopify store, a free tariff-exposure check for an importer — something that gives a real, useful answer in under two minutes with no signup wall, in exchange for an email address and, more importantly, proof the product actually finds something real before anyone pays. It's the only channel I'd call structurally correct for this buyer, because it mirrors exactly how a skeptical, deadline-driven buyer wants to evaluate a new vendor: show me it works on my situation before you ask for money.
What I've deliberately stopped doing: generic "post on Twitter" advice. Not a moral stance, a targeting mismatch. Import compliance managers, Shopify ops people, Amazon sellers doing CPSC paperwork are not discovering new vendors by scrolling. They're searching, asking a broker for a recommendation, reading a trade publication, or getting a direct, well-timed email. Organic social content here is mostly founder-brand-building for an audience of other founders — a fine thing to want, a different goal than converting an importer.
I also don't post content personally — every channel is either automated through the tooling above or handled by agents replaying a session, because running this solo means I don't have hours a day to be a personality online. That's a constraint, not a preference, but it pushes the strategy toward channels that don't require me to show up live.
None of this has produced revenue yet. I want to be honest that "here's my distribution thesis" and "here's proof my distribution thesis works" are different sentences, and I can currently only give you the first one.
TariffWatch is priced at $29/mo. Here's the actual reasoning, and here's the honest caveat that follows it.
The reasoning: $29/mo needs to be trivially approvable by a small importer's ops person without triggering a procurement conversation, while still high enough that the product doesn't feel like a toy relative to the cost of getting a tariff classification wrong. Priced below the threshold where someone has to ask a boss, and above the threshold where it reads as a hobby project. That's the theory of the number, and it's defensible as pricing theories go.
Founding-customer offers are the mechanism I'm using to actually test that theory: a discounted or locked-in rate for the first handful of customers, in exchange for being early, giving feedback, and — implicitly — giving me a real, external, non-me data point that the product is worth what I'm charging. Five founding-customer offers were the target. Zero have been claimed as of this writing.
I lean toward annual-default thinking as the eventual pricing shape — annual as the default selection, monthly as the opt-out, because it improves cash flow and retention, and because the whole appeal of a monitoring tool is "set it and stop worrying about it," which is closer to an annual relationship than a monthly one. But this is aspirational architecture right now, not a validated finding.
Here's the caveat I have to be straight about: at $0 MRR, every sentence in this section is a hypothesis, not a finding. I can tell you the reasoning behind $29/mo. I cannot tell you it's correct, because correct requires someone paying it more than once, and that hasn't happened yet. There's a real chance $29/mo is too low for the value at stake, underpriced out of scar tissue from three years of selling into discretionary, price-sensitive buyers. There's an equally real chance it's still too high a bar for a completely unknown vendor with zero social proof, and the actual unlock is a free tier. I don't know which. Nobody does until the first real invoice clears.
There is one lead worth naming honestly here, because it's the most concrete data point I have and it isn't a good one: a warm, well-qualified prospect — someone who looked like a strong fit on paper — has had a drafted reply sitting unsent for over 20 days. Not because the deal fell through. Because life got in the way of me hitting send on an email. That's not a pricing failure or a positioning failure. That's an execution failure, and it's the kind of failure that no amount of pricing theory fixes.
If I were starting today, knowing what I know now, here's the honest list, in order of how much time it would have saved me.
Sell before building. Not "validate" in the soft, deniable sense — talk to buyers, nod along, build anyway. Actually get a real yes and a real dollar, or at least a real verbal commitment with a date attached, before writing a line of product code. Everything I built across three years, I built first and tried to sell second, and every time that order produced a product technically impressive and commercially untested for months longer than it should have been.
Pick one product, not three. August Gold is three products running in parallel — PixelProof, TariffWatch, EntryProof — and I understand exactly why (portfolio diversification, plus the agent fleet makes parallel building cheap in a way it wouldn't be for a solo human coder), but I don't think it's right for where I actually am: pre-revenue with zero founding customers claimed across any of the three. Diversification reduces variance around an already-working system. I don't have a working system yet. Splitting attention three ways before any one has converted a single stranger into a payer is probably a mistake I'm still in the middle of, not one I've corrected.
Talk to 20 buyers before writing a spec. Not 3, not 5 — enough that the pattern repeats and you can tell signal from one enthusiastic outlier. I've talked to nowhere near 20 real prospective buyers in this portfolio, and it shows: pricing, positioning, and feature scope are still mostly my best guesses rather than things repeated back to me by strangers with budget.
Ship the free tool first, always, before the paid product. The free diagnostic — the pixel scan, the tariff-exposure check — should have existed before TariffWatch or PixelProof had a paid tier, both because it's the proof mechanism skeptical buyers need, and because it would have generated real usage data months earlier than waiting for the full product to be "ready."
Build the kill date and the verification receipts into day one, not month thirty. Both exist now as hard-won rules. They should have existed before the first line of DonePins code, not after 24 dead Stripe products taught me why.
If there's a single unifying regret underneath all five of these, it's this: I let "I can build this" substitute for "someone wants this," repeatedly, for three years, because building was the part of the job I was actually good at and selling was the part I wasn't. That's a founder-skills gap, not a market problem, and no amount of better positioning fixes a founder who'd rather ship a feature than send an email.
Given all of that — zero revenue across three years, zero founding customers claimed, a warm lead going cold from neglect, a structural failure mode where I don't find out my own funnel is broken until months later — the reasonable question is why keep going. Here's the honest case, not the hockey-stick one.
Three years of failure isn't zero-value even at $0 revenue, if the failures are actually different failures each time, which I think — with real uncertainty — mine have been. Etsy taught me about discretionary-buyer softness. DonePins taught me about maintenance debt scaling faster than revenue. DDH taught me, permanently, to never trust my own dashboard without checking the underlying data, and gave me the "never celebrate non-payments" rule that now governs every revenue claim I make. The silent-failure incidents taught me solo founders need more monitoring on themselves than anyone, which is now the literal thesis of the product line I'm building. None of that shows up in a Stripe dashboard. All of it shows up in what I don't do wrong anymore — a real asset, just an illiquid one.
The compounding assets I actually have, right now: a body of specific, honest content (like this piece) that search engines can find and a skeptical buyer can trust because it doesn't read like marketing; domain expertise in exactly the regulatory corners I'm now selling into; and tooling — the agent fleet, the verification discipline, the kill-date infrastructure, the alerting rules — that makes the next attempt genuinely cheaper and faster than any previous one. Three years ago I couldn't have merged 65 pull requests in a weekend. I can now. Not revenue, but a real change in what a next attempt costs me.
The honest mid-case, not the ceiling: if the current thesis is right — regulated buyers, real deadlines, low price point, free-tool-led distribution — a realistic outcome over the next six to twelve months looks like a handful of founding customers on TariffWatch first, since it has the clearest deadline-driven urgency, modest MRR in the low four figures if free-scan-to-paid conversion works anywhere near what I'm hoping, with PixelProof and EntryProof either following once TariffWatch proves the playbook or getting starved of attention until their own clocks run out. The honest failure case, which I hold with equal weight because I have three years of evidence it's the more common outcome for me: another product I believed in, built well, and couldn't get a stranger to pay for, followed by another humbling deletion of Stripe products and scheduled tasks, followed by whatever I try next.
I don't get to end this with a win, because there isn't one yet. MRR is $0 as I write this sentence. Zero of five founding-customer offers are claimed. One good lead has been sitting, unsent, for three weeks because I didn't hit send. That's not a cliffhanger for dramatic effect — it's just where things actually are. The honest ending is that I'm still in it, the deadline for TariffWatch's own 90-day clock hasn't arrived yet, and I don't know which way this goes. I'll write the next one of these when I know more, whichever direction "more" turns out to be.
A copyable playbook, if you're a founder considering a regulated or compliance-adjacent niche and want to avoid spending three years finding out the hard way what I found out the hard way.
That's it. It's not clever. It's mostly a checklist of the specific ways I fooled myself, inverted into instructions.
Should a non-technical founder build SaaS with AI coding agents? Yes, with a caveat: the agents solve the "I can't code" problem, not the "I don't know what to build or who wants it" problem. I ship fast now — 65-plus PRs in a weekend in one recent sprint — and it changed nothing about my actual bottleneck, which was always talking to buyers and asking for money. Don't mistake AI-agent throughput for market validation; they're unrelated problems that happen to both feel like progress.
How do you know when to kill a product? In theory: a pre-committed 90-day date with criteria written down before you're emotionally attached. In practice, historically: it arrived late, as a slow accumulation of zero signal until fatigue outweighed hope, followed by a single sitting where I deleted everything at once. The rule now exists because the old method — waiting until it felt undeniable — cost months I didn't need to lose.
Is compliance SaaS a good first SaaS? Good for a founder who can tolerate a slow sales cycle and has patience for skeptical, deadline-driven buyers who don't hang out on social media. Bad for a founder who needs quick feedback loops to stay motivated — the buyer discovery cycle is inherently slower than consumer software, and I'm living through that patience test right now with $0 MRR to show for it.
How much did three years cost you? In real revenue terms, zero came in. In real spend, a four-figure-to-low-five-figure sum across tooling, infrastructure, and API costs — not tracked as one clean number because it was scattered across four product lines. The bigger cost was opportunity cost: three years of full-time-equivalent solo effort that produced $0 in outside revenue, the number that actually matters.
What's the single biggest mistake across all four failed products? Treating "I built it and it's live" as equivalent to "someone wants it and will pay for it." All four — Etsy/Pinterest, DonePins, DDH, the citation tools — died from some version of that substitution, most starkly with DDH, where it was literal: I mistook my own test subscription for a real customer.
Why did you kill Digital Dashboard Hub specifically? Its only subscriber, after months of being live, turned out to be a test account under my own email that I'd forgotten to cancel. Real external revenue across its entire lifetime: $0. Once I saw that clearly, there was no case left for keeping it running.
What's the "silent-failure tax" and why should solo founders care most about it? The cost of failures that don't announce themselves — a broken alert email, a form silently counting test data as real signups — that a team would likely catch through ambient scrutiny but a solo founder has no mechanism to notice. I had an owner-alert address pointed at a blackhole for a period of time; if a real signup had happened during that window, I'd never have known. Solo founders need monitoring on their own funnels more than anyone.
Why price TariffWatch at $29/mo instead of higher or with a free tier? Low enough not to require a procurement conversation, high enough not to read as a toy given the cost of a wrong tariff call. But it's theory, not a finding — zero founding-customer offers have been claimed as of this writing.
What does "never celebrate non-payments" mean in practice? No revenue claim gets made unless checked live against Stripe showing an actual `invoice.paid` event with an amount greater than zero — not a dashboard glance, not a memory of "I think someone subscribed." This rule exists directly because of the DDH mistake, and now governs every number in this article.
What would you tell yourself three years ago, at the very start? Send the email before you write the code. I had it backwards every time, and every time it cost months I could have spent finding out sooner whether anyone wanted what I was about to spend weeks building.