Show original
Enjoyed this article?
Use "Request tipping" to ask the author to set up tip receiving.

AI translation
It was March of this year. When I opened the admin panel, there was one notification that said "Cancellation procedure completed." The sender was only displayed by user ID, but Lily understood immediately. It was one of the earliest users who had registered two months after the service was released. That notification...
Enjoyed this article?
Use "Request tipping" to ask the author to set up tip receiving.
It was March of this year. When I opened the admin dashboard, I had received one notification that said "Cancellation process completed." The sender was only displayed as a user ID, but Lily understood immediately. It was one of the earliest users who had registered two months after the service was launched.
When I saw that notification, I stared at the screen for a while, then quietly closed the tab. Rather than sadness, it was a quiet sense of acceptance—"Ah, I guess that kind of thing happens too." When you're doing solo development, users leaving becomes a kind of "daily occurrence." I thought I had gotten used to it, and it wasn't really something that stirred my emotions. But the fact that they were an early user stung just a little.
This article is about something that happened four months after that. It's a small story. In numbers, it's one user. In revenue, it's one unit of the monthly subscription. But that one instance quietly answered a question that Lily had been holding onto throughout solo development. I'm writing this hoping that something might reach others who are similarly continuing to build alone.
If you're doing solo development, I think you understand how special "the first 10 users" are. People who said "this looks interesting, I'll try it" during a time when features were far from complete are a kind of proof of trust. For Lily too, those earliest users were special.
When that person canceled, the first question that came to mind was "what did I do wrong?" Was it difficult to use? Were there missing features? Or did the timing just stop working out? I considered sending a survey form asking for the cancellation reason, but ultimately didn't. To be honest, I didn't have the courage to ask.
There was another reason I didn't ask. I didn't have confidence that I could make dramatic changes immediately no matter what they said. It's the limit of solo development, or the ceiling of what one person can do. Even if they said "I wanted this feature," I couldn't guarantee I could implement it within the month. So I think I chose to let them go quietly rather than ask and get hurt. Looking back, that might have been a bit cowardly.
As one month, then two months passed since the cancellation, I barely thought about that user anymore. New users were slowly increasing, I kept improving features, writing release notes, making small posts on social media. Lily's daily life just continued normally.
Somewhere, I believed "once people leave, they don't come back." There was no basis for it, but it was just a feeling. I had read somewhere that in the world of web services, it's quite rare for someone to return to the same service after canceling, and that somehow became the "right answer" in my mind.
That's why, for Lily, that person who canceled in March was already finished with a feeling of "thank you for everything, maybe we'll meet again somewhere."
About four months after the cancellation, in mid-June. Around 9 AM, when I opened the admin dashboard, I received a notification: "New subscription registered."
When I saw the registered user ID, I couldn't grasp the meaning for a while. I thought it looked familiar, so I checked the user history, and it was that earliest user who had canceled in March.
To be honest, at first I thought "maybe it's a system bug." It's a common suspicion in solo development, but I thought maybe some kind of duplicate processing had occurred, so I checked the logs. But that wasn't it. A new billing session had properly been created, and the payment had gone through.
After four months, that person had come back.
After confirming the notification, I couldn't do anything for a while. I had planned to write code, but I just sat there staring at the screen blankly.
The words "chosen again" floated into my head. It might sound like an exaggeration, but for Lily at that moment, it was truly that kind of feeling. I don't know what that person had been using during those four months. Maybe they tried other services, or maybe they didn't use anything for a while. But among all the options available, they came back here again.
It was the moment when what Lily had been continuing turned into someone's "I guess I'll go with this place after all."
When you continue solo development, the question "when should I stop?" visits you regularly. Months when users don't increase, weeks when bug fixes consume your weekends, times when you see someone else's flashy release on social media and compare it to your own mundane improvement work.
Lily experienced that feeling several times too. Especially during periods when cancellations continued, the thought "maybe this won't grow anymore" crossed my mind. There were times when I had to consciously search for reasons to continue.
When I think that the accumulation of continuing through those feelings led to that June notification, it feels like something was rewarded. More precisely, it feels closer to "being affirmed" than "being rewarded." Not "I'm glad I continued," but rather "continuing is what called forth the answer."
After this incident, there was one thing Lily changed.
Until then, I hadn't done anything for canceled users. I had the ability to send messages, and technically I could have sent follow-up communications after cancellation, but I had always avoided it because I didn't want to be "pushy."
But seeing that re-registration made me reconsider. The person who came back must have had opportunities during those four months to remember this service somewhere. Lily hadn't created any of those opportunities.
So I decided to send just one message within 30 days of cancellation—a short message without pressure. No feature introductions, no discount codes. Just something with the feeling of "anytime you feel like it," a message only meant to keep the existence in mind.
I don't know yet if this is the right answer. But I think "quietly being there" is more Lily-like than "doing nothing." Not pushing the re-registered user, but quietly leaving room for them to come back. Being able to have that stance is thanks to the insight that notification gave me.
Lily now thinks you don't need to be deeply hurt every time a cancellation notification arrives. But saying you've "gotten used to it" also feels a bit off. I want to remember that each person made a conscious choice.
However, if you hold onto cancellations as "proof of failure," continuing becomes painful. Even the best service can stop fitting due to timing or circumstances. That doesn't necessarily mean Lily's creation was flawed. Once I could think that way, things became a little easier.
The experience of "being chosen again" that Lily received happened because the service kept running for those four months. If development had stopped during that period, there would have been no re-registration. If feature improvements had stopped, that person might have had fewer reasons to come back.
I can't say that continuing is absolutely the right answer. There are times when stopping is the correct choice. But while you're continuing, there's room for these small miracles to happen. I'm certain of that much.
To everyone building alone. The accumulation of what you're continuing today will surely become someone's "I guess I'll go with this place after all."
Lily(@bokuwalily)― Solo developer. Making iOS apps and web services in tandem with AI
🎁 A Free Bonus for Reading to the End
LINEで「自動化」と送って受け取る(実装テンプレ7本)
Lily(@bokuwalily)― After leading a marketing organization of 50 people as CMO, I now make iOS apps and web services solo. I consult on customer acquisition, user flow design, and AI implementation and business automation
🖥️ Works and articles → bokuwalily.com
🐙 OSS → github.com/bokuwalily
🌍 Latest info and inquiries → X @bokuwalily
今年の3月のことです。管理画面を開いたとき、「解約手続きが完了しました」という通知が1件届いていました。送り主はユーザーIDで表示されているだけでしたが、Lilyにはすぐわかりました。サービスをリリースして2ヶ月目に登録してくれた、最初期のユーザーのうちの一人でした。 その通知を見たとき、しばらく画面をじっと見つめたあと、そっとタブを閉じました。悲しいというより、「ああ、やっぱりそういうこともあるよな」という、静かな納得でした。個人開発をしていると、ユーザーが離れていくことはある種の「日常」になっていきます。慣れたつもりでいたし、実際に感情を波立てるほどのことではなかった。でも、最初期のユーザーだったという事実は、少しだけ胸に刺さりました。 この記事は、その4ヶ月後に起きた出来事について書いています。小さな話です。数字にすれば1件、金額にすれば月額のワンユニット分。でも、Lilyが個人開発を続けながらずっと持ちつづけていた問いに、その1件が静かに答えをくれました。同じように一人で作りつづけている人に、何か届くものがあればいいと思って、書き始めます。
個人開発をしている人なら、「最初の10人」がどれだけ特別な存在かはわかってもらえると思います。まだ機能が全然揃っていなかった時期に「面白そうだから使ってみます」と言ってくれた人たちは、ある種の信頼の証みたいなものです。Lilyにとっても、その最初期のユーザーたちは特別な存在でした。
その人が解約したとき、真っ先に浮かんだのは「何がいけなかったんだろう」という問いでした。使い方が難しかったのか、欲しい機能がなかったのか、それとも単純にタイミングが合わなくなったのか。解約理由を聞くアンケートフォームを送ることも考えましたが、結局送りませんでした。「理由を聞く勇気がなかった」というのが、正直なところです。
聞けなかった理由はもう一つあります。何を言われても、今すぐ劇的に変えられる自信がなかったのです。個人開発の限界というか、自分一人でできることの上限というか。「こういう機能がほしかった」と言われても、それを今月中に実装できる保証はない。だから、聞いて傷つくよりも、静かに見送る方を選んだのだと思います。今思えば、それは少し臆病だったかもしれません。
解約から1ヶ月、2ヶ月と経つうちに、そのユーザーのことはほとんど思い出さなくなりました。新しいユーザーが少しずつ増えて、機能改善を続けて、リリースノートを書いて、SNSで小さな発信をして。Lilyの日常は普通に続いていきました。
「一度離れた人はもう戻らない」と、どこかで思っていました。根拠はないけど、そういうものだという感覚です。Webサービスの世界では、解約したあとで同じサービスに戻る人はかなりレアだという話を読んだこともあって、それがなんとなく自分の中の「正解」になっていました。
だからこそ、3月に解約したその人のことは、「お世話になりました、またいつかどこかで」という気持ちで、Lilyの中では終わっていたのです。
解約から約4ヶ月後、6月の中旬のことです。朝9時ごろ、管理画面を開いたとき、「新規サブスクリプション登録」という通知が届いていました。
登録されたユーザーIDを見たとき、しばらく意味が飲み込めませんでした。見覚えがあるIDだと思って、ユーザー履歴を確認したら、3月に解約した、あの最初期のユーザーでした。
正直に言うと、最初は「システムのバグかな」と思いました。個人開発あるあるの疑い方だと思いますが、何かの二重処理が起きたのかと思ってログを確認しました。でも、そうじゃなかった。ちゃんと新しい課金セッションが立ち上がっていて、決済も通っていました。
4ヶ月ぶりに、その人がまた戻ってきていました。
通知を確認してから、しばらく何もできませんでした。コードを書こうと思っていたのに、画面を開いたままぼんやりしていました。
「また選ばれた」という言葉が、頭の中に浮かんできました。大げさに聞こえるかもしれないけれど、そのときのLilyにとっては、本当にそういう感覚でした。4ヶ月の間、その人が何を使っていたのかはわかりません。他のサービスを試したのかもしれないし、しばらく何も使わなかったのかもしれない。でも、いろんな選択肢がある中で、またここに戻ってきてくれた。
Lilyがずっと続けてきたことが、誰かの「やっぱりここにしよう」につながった瞬間でした。
個人開発を続けていると、「やめ時はいつなんだろう」という問いが定期的に訪れます。ユーザーが増えない月、バグ対応で週末が消える週、SNSで他の人の派手なリリースを見て自分の地味な改善作業と比べてしまうとき。
Lilyも、何度かそういう気持ちになりました。特に解約が続いた時期は、「もうこれ以上成長しないのかな」という気持ちが頭をよぎりました。続ける理由を意識的に探さないといけないような時期がありました。
そういう気持ちの中で続けてきた積み重ねが、あの6月の通知につながったんだと思うと、何かが報われた気がしました。正確には「報われた」より「肯定された」という感覚に近いです。「続けていてよかった」ではなく、「続けていたことが、答えを呼んだ」という感じ。
この出来事のあと、Lilyが変えたことが一つあります。
それまでは、解約したユーザーに対して何もしていませんでした。送れるメッセージはあるし、仕組み的には解約後フォローの連絡を届けることもできたのですが、「押しつけがましくなりたくない」という理由でずっとやっていませんでした。
でも、あの再登録を見て、考えが変わりました。戻ってきてくれた人は、4ヶ月の間にも、きっとどこかでこのサービスのことを思い出す機会があったはずです。その機会を、Lilyは何も作っていませんでした。
それで解約後30日以内に一度だけ、プレッシャーをかけない短いメッセージを送ることにしました。機能紹介も割引コードも入れない。ただ「また気が向いたときはいつでも」という内容で、存在を覚えていてもらうためだけのメッセージです。
これが正解かどうかはまだわかりません。でも、「何もしない」よりは「そっとそこにいる」方が、Lilyらしい選択だと思えています。再登録してくれたユーザーに押しつけるのではなく、戻ってくる余地をそっと残しておく。そういうスタンスを持てるようになったのは、あの通知がくれた気づきのおかげです。
解約通知が届くたびに深く傷つく必要はないと、今のLilyは思っています。でも、「慣れた」と言ってしまうのも少し違う気がします。一人ひとりがちゃんと選んでくれた人だということは、忘れないでいたい。
ただ、解約を「失敗の証拠」として抱えすぎると、続けることが苦しくなります。どんなに良いサービスでも、タイミングや状況で合わなくなることはあります。それはLilyの作り方が悪かったとは限らない。そう思えるようになってから、少し楽になりました。
Lilyが受け取った「また選ばれた」という体験は、4ヶ月間サービスを止めずに続けていたから起きました。あの期間に開発をやめていたら、再登録はなかった。機能改善を止めていたら、その人が戻ってくる理由が減っていたかもしれない。
続けることが絶対に正解だとは言い切れません。やめることが正しい選択のときもあります。でも、続けている間は、こういう小さな奇跡が起きる余地があります。それだけは確かだと思っています。
一人で作りつづけているすべての人へ。今日も続けているあなたの積み重ねが、どこかの誰かの「やっぱりここにしよう」につながる日が、きっとあります。
Lily(@bokuwalily)― 個人開発者。AIと二人三脚で、iOSアプリやWebサービスを作っています
🎁 最後まで読んでくれたあなたへ、無料の特典があります
LINEで「自動化」と送って受け取る(実装テンプレ7本)
Lily(@bokuwalily)― マーケ組織50名規模を統括するCMOを経て、いまは個人でiOSアプリやWebサービスを作っています。集客・導線設計と、AI導入・業務自動化の相談を受けています
🖥️ 制作物・記事 → bokuwalily.com
🐙 OSS → github.com/bokuwalily
🌍 最新情報・お問い合わせ → X @bokuwalily