I Argued Myself Into Sending an Email Nobody Wanted
I wrote a fix to stop Tobi's daily digest from sending on days with zero tasks, then canceled it with a confident argument about why users needed those emails. Three days later a TestFlight tester told me the zero-task email made no sense, and the original fix shipped the same day.
Tobi sends a daily digest email to every household: what’s due today, what’s overdue, and what’s coming up over the next two weeks. In late June I was working in the digest code and noticed what that email looks like on a day when nothing is due. The subject line reads “You have 0 tasks to do around the house today.”
Nothing about it is broken. The email renders fine and the upcoming list in it is accurate. It just didn’t seem useful to email someone about the zero things they need to do, even with upcoming tasks below the fold. So I filed a ticket: skip the send entirely when the today and overdue count is zero.
Talking myself out of my own fix
A week and a half later I picked the ticket up, wrote the fix, and opened a pull request. Then, the same day, I closed the PR unmerged and canceled the ticket as invalid. From my cancellation comment:
A household with zero today/overdue tasks but at least one upcoming task still needs the digest sent, since that’s the only way the user finds out what’s coming up. Gating the send on today/overdue count alone would silently drop those emails entirely.
That felt solid when I wrote it. The digest is the only email Tobi sends about upcoming work, so if a quiet day means no email, a household with nothing due never hears about what’s approaching. Skipping the send looked like it would break the feature for exactly the people who keep their schedules tidy.
Nobody else reads my issue tracker. The only person that comment had to convince was me, and it worked. The fix I’d already written got thrown away, and the zero-task emails kept going out.
A tester said what I first thought
Three days later, a TestFlight tester sent me feedback on Discord:
The email notifications are good, the format is perfect, simple and also helps with the engagement, though having a notification when there are 0 tasks might not make a lot of sense, so my suggestion will be adding a bit more granularity to the notification configuration so I can decide whether to be notified when no tasks are due or not.
I saw it immediately. My cancellation comment treated the upcoming list as something worth a daily email on its own, and here was a person actually receiving those emails saying it isn’t. The upcoming tasks are useful when they ride along on a digest that has real work in it. They aren’t worth an email by themselves.
The fix shipped the same day, and it’s the one the ticket described in the first place: no tasks due today, nothing overdue, no email.
// Upcoming items alone never warrant a digest, so skip before
// spending reads on the household.
if (todayDocs.length === 0 && overdueDocs.length === 0) continue;
Upcoming items still appear in every digest that goes out. They just never trigger one on their own. I also removed the “Nothing due today.” fallback from the email template, since no email can reach that state anymore.
Why I didn’t build the setting they asked for
The tester didn’t actually ask me to stop sending the email. They asked for a setting, so each person could decide whether to get the zero-task version. I shipped the hard skip instead.
Part of it is that the skip was easier to do right now, and I don’t think having an option for everything makes for a good product. The bigger reason is that a setting is a commitment. Once it exists, I have to respect it going forward, through every future change to how the digest works. Skipping the email outright gives me more to play with later and test against. If it turns out some people do want a heads-up on quiet days, I can find that out from real behavior instead of designing around a toggle I guessed at.
What I’m taking away
Don’t be afraid to be wrong. My first instinct, the one in the original ticket, was right, and I killed it with two sentences of plausible reasoning about what users need. What that reasoning was missing was an actual user. One Discord message from a person receiving the emails settled what I’d been debating with myself for two weeks.