Feature-Level Friction in Remote Productivity Apps
1. Slack notifications fail silently when Workspace DND is misaligned
Slack lets you set personal Do Not Disturb hours, but what trips people up is the mismatch between team-wide schedule logic and user-level DND rules. I lost an entire afternoon wondering why my automations were working — messages logged in Airtable, timestamps processed through Make — but the recipient never pinged. Turns out, her personal DND hours hadn’t been cleared since she switched time zones last month, and Slack wasn’t showing any warning until she hovered over the tiny “Z” symbol on desktop.
This matters more than you’d expect when you’re pushing system-generated messages through bots or webhooks. Slack accepts the incoming message via API and returns 200 OK, even when it knows the user won’t receive a banner or mobile ping. There’s no webhook response or metadata indicating the suppression.
Workaround:
If you’re using Make or Zapier to pipe updates from tools like Notion or Jira into Slack, inject a timestamped fallback into email or a thread summary. Or check DND status via API first — it’s buried under users.getPresence
and dnd.info
— which no template workflow ever includes.
2. Notion databases break keyboard flow when toggling select fields
Notion’s supposed to be keyboard-first, but select/multi-select properties are oddly inconsistent — especially inside a database table view. If you arrow-key into a Select field and hit Enter, you’d think it’d open a dropdown. Nope, it enters edit mode on the entire cell like it’s a text field. Then Esc doesn’t exit cleanly. You have to click or Tab away manually, which totally breaks that fast data entry rhythm.
I built a personal CRM using Notion and found that editing tags for outreach messages took twice as long as just tab-swiping through an Airtable form view. It’s small, but if you’re inputting 30 records, those micro-hesitations pull you out of flow.
Edge-case: If the select field only has one option and it’s already selected by default, pressing Backspace deletes the value instead of deselecting it. That feels like a text field behavior, which it kind of is — under the hood Notion treats the whole component like a block of inline text with formatting rules. Not select logic. Very non-obvious.
3. Loom recording bugs out when switching mic sources mid-session
You think you’re ok if the icon is red and the timer is running, right? Wrong. I had a five-minute client walkthrough where the audio just… didn’t record. No obvious error. The Chrome tab was fine, webcam showed the usual floating bubble. Turns out switching your input mic *while* Loom is recording live — e.g. when I connected my wired headset because the laptop fan got too loud — silently discards the audio stream without warning you.
There’s no prompt, no browser alert. Just a result where the video is pristine and completely silent. From what I could dig up, Loom captures the WebMedia stream once at recording initiation, and doesn’t dynamically rebind on devicechange events. Studio tools like OBS can, but Loom keeps it simple (and volatile, apparently).
Loom’s web recorder relies on whatever Chrome reports as `navigator.mediaDevices.getUserMedia`, but that API doesn’t refresh streams unless renewed — meaning Loom has no built-in safeguard unless they choose to rebuild their recorder.
4. Coda button packs can’t chain if one fails quietly
One of Coda’s big draws is chaining multiple actions inside “Buttons” — like triggering a webhook, adding a row, then emailing a result. But if the first action throws a non-fatal error — like a 400 from your endpoint that returns a message but no crash — Coda doesn’t stop the button chain. It just silently skips to the next step, ignoring the fact that the upstream system didn’t process anything.
I found this out while prototyping an editorial calendar using Coda + Integromat for moving calendar notes into Airtable. I had a button that both sent a webhook and logged the status locally. When I typoed a date format, the webhook fired, failed preprocessing on my Make scenario, and returned an error response. Coda didn’t parse it as an error; the logging and email step still fired as if all was well.
“Aha” moment:
Button logs show “Completed” unless the payload crashes transport. If the endpoint returns a 400 with valid JSON structure, Coda logs it as a success. You’ll only know something broke if your downstream system screams — or doesn’t.
5. Google Meet shows mic as on but kills audio after tab idle
I was in a Google Meet during a client onboarding, tabbed away to update a shared Doc, and came back to dead silence on their end. My mic icon was still green, and Meet showed “microphone active” in Settings. But they couldn’t hear me at all — because Chrome had started throttling that tab’s audio context after 5+ minutes idle.
There’s no error, no banner, nothing. Meet will just drop outgoing audio signals if the tab is deprioritized by Chrome’s background timer throttle. This kicks in faster on lower-spec machines or if multiple tabs are running intensive processes (which I always do, somehow).
I eventually restarted the call, and audio worked again — and then I recreated it by idling another tab for 6 minutes while watching CPU in Task Manager. As soon as the throttling began, the mic stopped transmitting. Tab focus doesn’t matter. The only workaround is to keep some part of the Meet tab relatively active — hovering video tiles seems to delay the throttle timer slightly.
6. Airtable views lag badly when color filters collide with permissions
I had a shared Airtable base where I was color-coding tasks using single select Status fields. Everything looked fine until one of my interns said their view took 20+ seconds to load. Mine snapped open instantly. Turns out, her permission level (Editor, not Creator) meant her view cache behaved differently when combined with record-level filters and field-based coloring — something Airtable doesn’t disclose anywhere.
Once I removed the conditional formatting, her load time dropped. Digging deeper, when you enable color by select field, Airtable evaluates that style render on the front-end per record, even pre-filtered ones. For Editors with restricted records or hidden columns, those color rules hit edge behavior: it tries to assign colors to records it can’t technically read in full, which delays rendering.
This isn’t documented, and only manifested when mixing hidden fields + colored views + limited collaborators. The weirdest part was there wasn’t a rendering glitch or style bug — just pure sluggishness that made it feel like Airtable itself was choking.
7. Todoist recurring rules break when natural language parses imprecisely
I had a daily reminder: “Post to LinkedIn every weekday at 10am.” And for weeks I swore it was firing inconsistently. Some days it wouldn’t show up until afternoon. Other times it looked fine in the queue, but I missed the push.
Here’s what finally clicked: Todoist parses natural language into CRON-esque rules — and “every weekday at 10am” behaves subtly different from “on weekdays at 10am.” The first creates a single recurring task. The second built five discrete weekly repeating entries. Sounds similar, but only the second pattern respected local daylight saving changes in advance.
If your time zone shifts (e.g. traveling or automatic DST change), the “every weekday” rule locks to the original UTC offset it was created under. Meaning 10am shifted to 11am silently last time my system auto-switched. It’s in the docs, buried under recurrence behavior, but doesn’t surface on editing or confirmation.
8. Trello automation rules trigger unreliably when multiple boards sync labels
If you’re using Trello’s Butler automation to move or label cards between boards, there’s this annoying hiccup where rules run fine for days — and then randomly don’t. I had a workflow where adding a “Blocked” label on Board A would move the card to Board B and assign someone. But about once a week, it’d just… not trigger at all.
The bug? Trello uses label IDs under the hood, not names. If your boards have identically named labels — like “Blocked” — but they were created separately, they have different IDs. So automations that watch for “Blocked” on Board A won’t match “Blocked” from B if a card was moved there and the label got preserved visually. To a user, it looks the same. To Trello, it’s not.
The worst part is Butler doesn’t warn you during setup. It lets you pick “Label name” from a dropdown, but doesn’t disclose that ID-governed behavior. You only find out when inspecting the logs and noticing the rule never even saw the trigger.