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

AI translation
Ever since I started personal development, there was something I had always feared. The day when "I might break something with an update." Adding features is exciting, but the moment I press the publish button, my heart always skips a beat. I tell myself it's fine because I tested it, but somewhere in my mind I'm still thinking "what if..."
Enjoyed this article?
Use "Request tipping" to ask the author to set up tip receiving.
Since I started indie development, there was one thing I had always feared: "The day I break something with an update." Adding features makes me happy, but the moment I press the publish button, my heart always skips a beat. I tell myself that I've tested it so it should be fine, yet somewhere in my mind I'm still thinking "what if." That "what if" became reality in the spring of this year. Today, I want to write about that day as honestly as I can. Not so much as a failure story, but rather what that experience taught me.
That day's update wasn't a major change. I tidied up the data handling process a bit and fixed a few display-related bugs—what you'd call a "mundane improvement release." There were no big new features; if anything, it should have been more user-friendly.
I tested it properly. I tried several patterns myself, checked the appearance. I quietly pressed the publish button on a weekday afternoon and posted a brief "Updated!" on X. The response was modest, but that's always the case. I didn't worry about it and moved on to other work.
The problem happened that evening.
A message had come through the app's contact form. "Data stopped displaying correctly starting today," with a screenshot attached.
The moment I saw the screen, my stomach sank. Before I could even think "oh no," I felt my body tense up. Calming down and examining the screenshot, it was definitely displaying strangely. Looking at the date, it was clear this had started right after I released the update.
For a few seconds after reading the inquiry, I couldn't move. The feeling of "I need to fix this immediately" and "what went wrong?" hit me at the same time, leaving me paralyzed—that familiar sensation of not knowing where to start.
I took a deep breath and opened the app myself. I tried to reproduce the same situation... and I could. It really was broken. While organizing my thoughts about which parts were related to today's changes, I went through them one by one.
After about thirty minutes of investigation, I found it. In the process I thought I'd tidied up, there was a section that only malfunctioned under specific conditions. When I tested it myself, I simply hadn't happened to hit that condition.
When I said "Ah, I see," the feeling that overwhelmed me was embarrassment more than anger. A mix of shame at my own oversight and apology to the users who were using it. But this wasn't the time to feel down, so I pushed forward with the fix.
The actual fix didn't take long once I knew what was wrong. I corrected the problematic section, checked it again, and released the fixed version. Looking at the clock, a little over an hour had passed since the initial message.
But to be honest, writing the reply was much harder than the fix itself.
An apology message is tricky to write. If it's too polite, it seems like an excuse. If it's too short, it doesn't feel sincere. My feeling of "I'm truly sorry" is genuine, but when I put it into words, it somehow feels thin.
The reply I ultimately sent was simple. I thanked them for reporting it, acknowledged that I had introduced a bug in today's update, stated that it was now fixed, and apologized for the inconvenience. I wrote it all as straightforwardly as I could.
I didn't make excuses. I didn't mention that my testing was insufficient. I didn't think such things were necessary—they weren't asked for, and even if they were, they wouldn't help. I simply apologized, told them it was fixed, and added that I hoped they'd continue using it.
After pressing send, my breathing felt a little easier.
Since I sent it at night, the reply came the next morning.
"Thank you, it's working now! I was surprised since I use it every day, but I really appreciate the quick response."
...When I read it, the first thing that struck me was the phrase "I use it every day."
Someone uses this app every day.
It might seem obvious, but when you're doing indie development, it's surprisingly hard to know if something is actually being used. You can see numbers like access counts and downloads, but you rarely feel the reality of "being part of someone's daily life." Yet with this message, I felt it clearly for the first time.
Releasing a bug was definitely a failure. But I don't think I would have received this message if that failure hadn't happened.
The fact that they sent an inquiry means they were committed to continuing to use the app. When something went wrong, instead of "I'll stop using it," they thought "I'll let them know." I only truly understood how precious that was at that moment.
My desire to eliminate bugs hasn't changed. But the fact that "someone is using it" might not have been something I'd consciously think about if bugs never appeared. On the day I broke something, I learned it was actually being used. It was ironic somehow, but also strangely precious.
In indie development, everything after release is solo too. Design, implementation, testing, and when bugs appear, the response—all of it. In a team, you could consult with someone or divide the work, but doing it alone means everything falls on you.
That's scary, and developers talk about it often. When something goes wrong, only you can respond. That pressure accumulates a little with each release, leading to the feeling of "what if I break something again?"
But that day, when I received the message from the user, responded, and got back "it's fixed," I felt something beyond fear. Having responsibility means you're creating something meaningful. That realization truly sank in for the first time.
When they wrote "I really appreciate the quick response," I'll be honest—I felt a bit conflicted. Because I still had the thought "it was quick, but I shouldn't have broken it in the first place."
But now I can think about it a bit more gently. Being able to respond properly when problems arise might be more important than releasing perfectly, especially for something that continues long-term. Indie development isn't a one-time thing; it's something that goes on. What stayed with me was not the speed, but the fact that "I didn't run away."
Since then, I've been taking a bit more time before updates. It won't prevent everything, but I've created my own confirmation process and run through it all before publishing. There might be similar incidents again someday. But I feel a little more confident about how I'd handle it.
Also, I made the contact form more prominent. I wanted people to reach out more easily if something happened. Not just for bug reports, but also to make it easier to receive feedback like "I'd love this feature."
When I think back to that day, my stomach still hurts a little. But receiving that one message has become one of those moments that makes me think "I'm glad I'm doing indie development."
On the day I broke something, I was able to truly connect. Maybe that was enough.
You reading this might have had a similar experience. Or you might have one in the future. If you do, I hope you remember "there was someone who got through a day like this." If so, this article will have been worth writing.
Let's keep going together.
Lily (@bokuwalily) — Indie developer. Making iOS apps and web services in tandem with AI.
個人開発をはじめてから、ずっと怖れていたことがありました。「アップデートで何かを壊してしまう日」のことです。 機能を追加するのはうれしいのに、公開ボタンを押す瞬間はいつも少しだけ心臓が跳ねます。テストしたはずだから大丈夫、と自分に言い聞かせながら、それでもどこかで「もし」と考えている自分がいます。 その「もし」が現実になったのが、今年の春のことでした。今日はその日のことを、できるだけ正直に書いてみようと思います。失敗談というより、あの経験が私に教えてくれたことを。
その日のアップデートは、そんなに大きな変更ではありませんでした。データを扱う部分の処理を少し整理して、表示まわりのバグをいくつか修正した、いわゆる「地味な改善リリース」です。大きな新機能はなく、むしろ使いやすくなるはずでした。
テストも一通りやりました。自分でいくつかのパターンを試して、見た目の確認もして。平日の昼間にそっと公開ボタンを押して、Xに「アップデートしました」と短く投稿しました。反応は控えめだったけれど、それはいつものこと。気にしないようにして、そのまま別の作業に移りました。
問題が起きたのは、その日の夕方でした。
アプリの問い合わせフォームに、メッセージが届いていました。「今日からデータが正しく表示されなくなりました」という内容で、スクリーンショットも添付されていました。
画面を見た瞬間、胃がぐっと重くなりました。「あ、やった」と思うより早く、体が緊張するのがわかりました。落ち着いてスクリーンショットを確認すると、確かにおかしな表示になっています。日付を見ると、私がアップデートをした直後から起きていることは明らかでした。
問い合わせを読んでから数秒、私は動けませんでした。「すぐに直さなければ」という気持ちと、「どこがいけなかったんだろう」という混乱が同時にやってきて、何から手をつければいいかわからなくなるあの感じです。
とりあえず深呼吸をして、自分でもアプリを開いてみました。同じ状況を再現しようとして……再現できました。やっぱりおかしい。今日の変更と関係がある部分を頭の中で整理しながら、一つひとつ確認していきます。
三十分ほど調べていたところで、原因がわかりました。整理したつもりの処理の中に、特定の条件のときだけ正しく動かない箇所があったのです。自分でテストしたときは、たまたまその条件に当たらなかっただけでした。
「ああ、そういうことか」と口に出したとき、怒りよりも恥ずかしさの方が強かったです。見落としていた自分への情けなさと、使ってくれているユーザーへの申し訳なさが、ぐちゃぐちゃに混ざった感じ。でも今は落ち込む時間じゃない、と思って修正作業を進めました。
修正自体は、原因がわかってからはそう時間がかかりませんでした。問題のある箇所を直して、もう一度確認して、修正版を公開しました。時計を見ると、最初のメッセージから一時間ちょっと経っていました。
でも正直に言うと、修正よりも返信を書く方がずっと難しかったです。
謝罪メッセージって、書き方に悩みます。丁寧すぎると言い訳がましく見えるし、短すぎると誠意が伝わらない気がする。「本当に申し訳ありませんでした」という気持ちは本物なのに、文字にするとどうも薄く感じてしまいます。
最終的に送った返信は、シンプルな文章でした。ご報告いただいたこと、今日のアップデートで不具合を混入させてしまったこと、現在は修正済みであること、ご不便をおかけして大変申し訳なかったこと。それだけを、できるだけ素直な言葉で書きました。
言い訳は書きませんでした。テストが不十分だったという内情も書きませんでした。そういう話は、聞かれていないし、聞かれても不要だと思ったからです。ただ謝って、直したことを伝えて、これからも使ってほしいという気持ちを添えました。
送信ボタンを押したあと、少し呼吸が楽になった気がしました。
送ったのが夜だったので、返信が来たのは翌朝でした。
「ありがとうございます、直ってました!毎日使っているのでびっくりしましたが、素早い対応助かりました」
……読んで、最初に思ったのは「毎日使っている」という言葉でした。
このアプリ、毎日使ってくれている人がいる。
当たり前のことかもしれないけれど、個人開発をしていると、実際に使われているかどうかって、意外とよくわからないんです。アクセス数やダウンロード数は数字として見えますが、「誰かの日常に入り込んでいる」という実感はなかなか持てない。それが、このメッセージで初めてはっきりと感じられた気がしました。
バグを出してしまったことは、間違いなく失敗です。でも、その失敗がなければ、このメッセージは届かなかったとも思います。
問い合わせを送ってくれるということは、それだけそのアプリを使い続けようとしているということです。問題があったとき、「使うのをやめよう」ではなく「伝えよう」と思ってくれたということです。それがどれほどありがたいことか、このとき初めてちゃんとわかりました。
不具合をゼロにしたいという気持ちは今も変わりません。でも「誰かが使っている」という事実は、バグが出なければ意識することが少なかったかもしれない。壊してしまった日に、ちゃんと使われていたことを知った。なんだか皮肉で、でも不思議と大切な時間でした。
個人開発は、リリースしてからも全部ひとりです。設計も、実装も、テストも、そして不具合が出たときの対応も。チームならば誰かに相談したり、分担したりできますが、ひとりでやっているとすべてが自分にかかってきます。
それが怖い、という話は開発者同士でよくします。何かあったとき、自分しか対応できない。そのプレッシャーはリリースするたびに少しずつ積み重なって、「また壊したらどうしよう」という気持ちにつながっていきます。
でもあの日、ユーザーからのメッセージを受け取って、対応して、「直りました」という返事をもらったとき、怖さとは別の感覚もありました。責任があるということは、それだけ意味のあるものを作っているということでもある。そういう感覚が、初めてちゃんと腑に落ちた瞬間でした。
「素早い対応助かりました」と書いてくださったとき、正直に言うと少しだけ複雑な気持ちもありました。「素早かったのは事実だけど、そもそも壊さなければよかった」という思いが残っていたから。
でも今は、もう少し柔らかく考えられるようになりました。完璧にリリースできることよりも、問題が起きたときにちゃんと向き合えることの方が、長く続けていくうえでは大切なのかもしれない。個人開発は一度きりではなくて、ずっと続いていくものだから。速さよりも、「逃げなかった」という事実の方が、自分には残りました。
あれから、アップデートの前にもう少し時間をかけるようにしました。完全に防げるわけじゃないけれど、自分なりの確認の順番を作って、一通り試してから公開するようにしています。それでもまたいつか、似たようなことが起きるかもしれない。でも、そのときどう動くかは、少しだけ自信を持てるようになった気がしています。
それと、問い合わせフォームを少し目立つ場所に移しました。何かあったとき、もっと気軽に連絡してほしいと思ったからです。バグの報告だけでなく、「こんな機能があると嬉しい」という声も受け取りやすくしたくて。
あの日のことを思い返すと、今でも少し胃が痛くなります。でも、あの一通のメッセージをもらったことは、個人開発をしていてよかったと思える出来事のひとつになっています。
壊してしまった日に、ちゃんとつながることができた。それで十分だったのかもしれない、と今は思っています。
これを読んでくださっている方も、似たような経験をしたことがあるかもしれません。あるいは、これから経験するかもしれない。そのとき、少しだけ「こういう日を乗り越えた人がいた」と思い出してもらえたなら、この記事を書いた意味があります。
一緒に、続けていきましょう。
Lily(@bokuwalily)― 個人開発者。AIと二人三脚で、iOSアプリやWebサービスを作っています