A few months back my app was down for about 40 minutes on a weekday evening. Database host had a bad node, nothing I did. I fixed it, it came back, I went to sleep feeling ok.
Next morning I had two emails. One said "is this thing abandoned?" The other was a cancellation with no reason given. Neither person was mad about the 40 minutes. They were mad that they hit an error page, checked twitter, checked my site, found nothing, and assumed nobody was home.
That's the part I got wrong. Small products go down, everybody knows it. What hurts is when users can't tell if you even noticed.
So here's the small setup I use now. It costs nothing and took one afternoon.
1. Find out before your users do
If a customer is the one telling you the site is down, you've already lost the first 20 minutes.
- One external uptime check on the homepage AND one on a real endpoint that touches the database (I use a tiny
/healthroute that runsselect 1). The homepage alone lies, it's often cached or static. - Alerts go to my phone as a push notification, not email. Email I see an hour later.
- Check every 1–3 minutes, and alert only after 2 failures in a row. Otherwise you get woken up for one flaky request and start ignoring it.
I wrote about doing this while still having a day job in how to monitor a side project during your day job, the short version is: fewer alerts that you actually trust.
2. Have one place to say "we know"
You don't need a fancy status page product. You need one URL that you can update in 30 seconds from your phone, and that does not live on the same server as your app. (Mine was on the same server for a while. Guess how useful that was.)
Options that work fine for tiny products:
- a free hosted status page from your uptime tool
- a pinned post on whatever social account your users actually follow
- a static page on a different host
Then link it from the error page and the footer. My 500 page now literally says "if this keeps happening, check status here" with the link. That one line would have saved me both of those emails.
3. Pre-write the three messages
When something is broken you're stressed and you write badly. So I wrote these once and keep them in a note:
Investigating: "Some people can't load the app right now. I'm looking at it. Next update in 30 minutes or sooner."
Fixed, watching: "It's back up. Cause was X. I'm watching it for the next hour."
After: a short plain email to anyone who was active during the window. What broke, how long, whether any data was affected (say clearly if not), and one thing I changed so it's less likely next time.
Notice the "next update in 30 minutes". Giving a time is the thing that calms people. Then actually post the update, even if it's "still working on it".
4. Check data, not just uptime
The scariest part of my outage wasn't downtime, it was 10 minutes of not knowing if writes during the failover got lost. They didn't, but I couldn't say that confidently until I checked.
If you can't answer "did anyone lose data?" in a few minutes, that's a backup and restore problem, not a status page problem. I went through that drill in a monthly backup restore routine for a solo SaaS, worth doing before you need it.
5. Write a tiny post-mortem, even just for you
Five lines in a doc:
- What happened and when (with timezone, future you will forget)
- How I found out (alert or customer?)
- How long until users could see a status update
- Root cause, in one sentence
- One change I'm making
Line 3 is the one I watch now. First time it was "never". Now it's under 10 minutes.
What changed after
I've had two smaller incidents since. Both times I got replies like "thanks for the heads up" instead of cancellations. Same kind of downtime, totally different reaction. Turns out people forgive a broken product way faster than a quiet founder.
If you're building in public and want a few early users who are fine with this kind of honesty, launching on a small community board like MakerHunt is where I've found the most patient ones.
How do you handle it when your thing goes down? Do you post a status update, or just fix it and hope nobody noticed? Genuinely curious.
Top comments (0)