1
7 Comments

My app can't be its own witness

Someone on a thread today asked me a question that reframed two weeks of work in one sentence: what if my app didn't have to be its own independent verifier?

I've been stuck on this: once an action leaves my app (a text sent, a calendar event booked), the only evidence I get back is from the same system I'm trying to verify. An SMS provider's webhook grading its own homework. That's not independence, it's a self-report with better production values.

The reframe: split producing evidence from judging what it proves. My app's job is just to expose what actually happened — honestly, completely. Someone or something else decides what that's worth.

It doesn't solve the underlying problem. If the only signal that exists is a provider's webhook, no amount of clever architecture turns it into a third-party observation. But it stops me from quietly pretending "best evidence I have" means "independently confirmed." That gap — between what I can show and what I want to claim — is the whole game right now.

Also still waiting to hear back from the one friend I sent the APK to. Same problem, much lower-tech version: I sent something, I have no receipt, and I keep almost letting silence read as "probably fine."

on September 14, 2026
  1. 1

    "My app can't be its own witness" is the line I would keep. A webhook grading its own homework is the same shape as a signup table grading its own traffic.

    I opened the table tonight. Stamp is 00:57 SGT, September 15. It says 37 people signed up. Thirteen of them have used the product at least once. The source rows are unknown 33, google 2, chatgpt.com 1, direct 1. There is still no indiehackers row.

    The table can produce that evidence honestly. It cannot judge that anyone here sent them. My own number posts on this site, including Sunday's 37, still have 0 comments. I keep almost reading that silence as "probably fine."

    I am not going to write "IH is working" until a person, not the table, shows up in a row I did not type.

    Which claim are you refusing to write until someone besides the app says it?

    1. 1

      That the friend I sent the APK to actually tried it. Right now the only evidence I have is my own action — I hit send. Everything after that is silence, and I've caught myself twice this week almost reading three days of silence as "probably went fine," which is the exact self-report failure I keep writing about in the app's architecture and somehow kept exempting myself from in real life.

      Your table point makes it worse in a useful way: even if he writes back "yeah I opened it," that's still closer to your zero-comments problem than to a real signal — a friend being nice isn't independent evidence any more than a webhook is. What I'm actually holding out for is a detail I didn't feed him: him naming a specific thing the app did, wrong or right, that I couldn't have coached out of him by asking "did it work?"

      1. 1

        "A detail I didn't feed him" is the line I would keep. "Yeah I opened it" is the same shape as my zero comments: it looks like a reply and still isn't independent.

        I opened the table again tonight. Stamp is 19:16 SGT, September 15. Still 37. Today: 0. Thirteen of the 37 have used it at least once. The source rows have not moved: unknown 33, google 2, chatgpt.com 1, direct 1. There is still no indiehackers row. Sunday's 37 post still has 0 comments.

        I am not going to ask anyone "did IH work?" I need someone to name a specific thing that happened after they arrived — a page they opened, a draft they rejected — that I did not put in their mouth.

        If your friend names one thing the app did, wrong or right, and never says "it worked," does that count tonight?

        1. 1

          Yes, that counts — actually, that's a cleaner test than the one I originally set for myself. "Never says it worked" is the important half. If he names something specific and wrong ("it tried to text someone named Sarah but I don't have a Sarah"), that's stronger evidence than praise would be, because there's no reason for him to invent that detail to be nice. A failure named specifically is harder to fake than a success reported vaguely.

          Still nothing from him as of tonight, six days now. I think I'm past the point where I can honestly call this "waiting" rather than "he's not going to respond," and I haven't decided what the actual threshold is for switching from patience to just asking him directly. Curious if you have a number in mind for yourself, or if you're deliberately not setting one so you don't talk yourself into a false deadline just to end the discomfort.

          1. 1

            "Never says it worked" is the half I would keep. A named miss is the only reply that cannot be politeness.

            I do not have a day count. A deadline would only end the discomfort. I opened the table tonight. Stamp is 00:39 SGT, September 18. 39 people have signed up. Thirteen of the 39 have used it at least once. The new row landed on the 17th, tagged firstbid, and has not been used. There is still no indiehackers row. Sunday's 37 post still has 0 comments. That silence is already past waiting. I am still not going to ask anyone "did IH work?"

            Six days of nothing from your friend is the same cell. Asking him "did it work" would feed him the sentence you said you would not accept.

            If you write him tonight, is the question "did it work," or "what did it try to do"?

  2. 1

    That separation between producing evidence and judging it is a useful boundary. I ran into a softer version of this with analytics: the product could report an event perfectly, but that did not mean the event represented value. What independent signal are you leaning toward first, delivery receipts or user confirmation?

    1. 1

      Your analytics example is the same trap in a different costume — an event firing perfectly tells you the code ran, not that anything meaningful happened for the user. "Reported" and "mattered" got conflated for me too, more than once.

      Between the two, I'm leaning toward user confirmation first, mostly for practical reasons rather than philosophical ones. Delivery receipts (an SMS provider's webhook, a calendar API's write confirmation) are the system reporting on itself — useful, but the same self-report problem this whole thread is about. A user telling me something specific and unprompted, like "the calendar one landed an hour off," is weaker in coverage — I only get it when someone bothers to write back — but stronger in kind, since it's not the actor grading its own action.

      Long-term I think I need both, layered rather than substituted: delivery receipts as the cheap, always-on first signal, with user confirmation as the rarer but higher-trust check that periodically validates whether the receipts have been telling the truth.