01
Users leave sometimes because of one massive screw-up. But other times, it's a stack of small disappointments that adds up to goodbye.
02
There's almost nowhere decent to eat near my apartment — healthy and tasty options are all a long walk away at other neighborhoods. Kind of annoying, haha.
Today at lunch, halfway through my usual trek, I spotted a newly renovated restaurant. The sign read: congee, cold noodles, meat sandwiches, rice noodles. I stopped.
I thought to myself, "Let me try this place. If it's decent, I'll just eat here from now on — no more long walks."
In other words, before I even walked in, I'd already decided — as long as they could meet this small expectation, I'd happily become a regular.
03
I walked in. I was the only customer.
I ordered chicken broth rice noodles. After 5 minutes of waiting, I added an eight-treasure congee to my order.
The congee came first. Big bowl, had peanuts, rice, barley — but it was watery and thin. Anyone who's cooked before could tell immediately: it had been diluted. My impression dropped instantly. Even just simmering it a bit longer or adding some starch to thicken it would've helped. They couldn't even be bothered with that — tells you everything about the effort they put in.
Then I waited nearly 10 more minutes for the noodles. Other shops take 5 minutes max.
When it arrived: a huge bowl, all broth. Besides the noodles, there were just two lettuce leaves. No tofu skin, no quail eggs, no chicken pieces. The taste was as bland as you'd expect. I thought about asking them to add salt, but then figured — salt wasn't going to save this.
To be blunt, neither dish even qualified as "average."
I finished eating and immediately decided: never coming back.
As I was leaving, another customer walked in, full of hope: "Do you have the chicken broth noodles?"
"We're out."
They hadn't sold many portions all morning, and the main dish was already gone. Items on the sign that they'd run out of. Items they couldn't even make, still listed on the sign. Safe to say — this place wasn't serious about their business. And next time a friend suggests eating here, I'll immediately bring up this terrible experience.
04
Analyzing user churn in indie development follows the exact same structure.
It's not one bug that makes them curse and leave. It's — unclear documentation (the watered-down congee), slow feature response (the 10-minute wait for noodles), missing basic features (a bowl of broth with no toppings), features listed on the website that aren't built yet (the "chicken broth noodles" that are sold out).
Each one alone seems minor. But user perception is cumulative — every small disappointment deducts points. Hit a certain threshold, and they're gone. No coming back. No explanation.
But the saddest part isn't even that.
The saddest part is: before walking in, users have usually already decided to give you a chance.
Users aren't there to nitpick. They're there to see if they can stay. They come with goodwill, with a small expectation — all we have to do is not disappoint them.
So many products stumble right at this threshold, and monetization drifts further away.
Final Thought
So now I've built a habit: every week, I use my own product end-to-end — the full payment and consumption flow — as if I were a first-time user.
Just yesterday I optimized Pay4SaaS's payment success page — loading time dropped from 7–8 seconds to 2–3 seconds. The experience is noticeably better. When I tested it myself after the fix, I was surprised how fast it felt — like using a polished mainstream app. That nagging unease I'd had finally eased. And today, I'm improving the demo video to make the feature showcase richer.
When I walk through the flow, beyond fixing intolerable bugs, I try to feel what the "first-time visitor" would feel — where would they frown? That frown spot is exactly where I'm silently losing users, and where I need to keep improving.