250 words, or it's a second inbox

A daily summary that takes five minutes to read is another thing to get behind on. The word limit is not a constraint on the feature — it is the feature.

Daily digests have a failure mode so common it's almost a law. Version one is short and people read it. Then someone points out a missing category, so it grows. Then it grows again. By version six it's a comprehensive summary of everything, which is functionally identical to the thing it was meant to replace, and people skim it and then don't open it.

The reason is that a digest competes for the same slot as your inbox: the first two minutes of the working day, when you are deciding what today is going to be about. Anything that doesn't resolve that question in that slot is not a summary. It's homework.

Design the constraint first

So we set the limit before the content: under 250 words, useful in under thirty seconds, readable on a phone while the kettle boils. Every question about what to include is then answered by what it would displace, which is a much better question than "would this be nice to have?"

What survived that filter was six sections, and the interesting thing is that four of them are about time and two are about people.

Generated from queries, not from a pile of text

There's a tempting shortcut when building something like this: hand a model a large dump of recent activity and ask it to summarise. It produces plausible output immediately, and it is quietly unreliable, because the model is deciding both what's true and what's important, and you have no way to audit either decision.

The alternative is more work and much more trustworthy. Run the same structured queries the app's own screens run — overdue actions, items due today, waiting items past their follow-up date, commitments outstanding — assemble the results into a compact set of facts, and give the model exactly one job: phrase this.

Narrow jobs are where language models are reliable. "Turn these eleven facts into four readable sentences" is a narrow job. "Read everything and tell me what matters" is not.

The practical consequence is that the numbers in the brief are the numbers in the database. If it says three things are overdue, three things are overdue — you can tap through and count them. That property sounds unremarkable until you've used a summary tool that didn't have it.

Empty sections should say they're empty

One small decision that turned out to matter: when a section has nothing in it, the brief says so rather than filling the space. "Nothing waiting on anyone" is a genuinely useful sentence. A generated paragraph gesturing at recent activity to avoid a gap is not, and it trains you to distrust the parts that are real.

Which is the general principle underneath all of this. The value of a daily brief is not that it tells you things. It's that you believe it when it does.