What Breaks First When Your Work OS Is Too Clever
1. Setting up synced databases across Notion and Airtable
Look, cross-syncing Notion and Airtable feels possible—until the minute someone renames one field and it all silently desyncs. I had a setup that pulled leads from Airtable, processed them through a Notion-based CRM, and looped updates back for reporting. This lasted almost 19 hours before someone added an emoji to a Notion column title. That broke the whole Make scenario. No warning. Just a persistent HTTP 422 when pushing record data back.
Undocumented edge case? Airtable treats formula fields with emojis as strings with HTML-escaped characters; Notion just… doesn’t. They show fine until piped through their respective APIs, then nothing lines up. Record match fails, updates don’t apply, and since the webhook didn’t error, Zapier logged a clean run. I only noticed because timestamps stopped updating.
Small fix, big consequence: I switched Notion to use internal property IDs instead of titles. Took me an hour to figure out how to get the damn IDs, and now it syncs properly again. But if I had known that emojis in field names could murder a sync? Would’ve saved a full Sunday morning.
2. Invitations and permissions in ClickUp during workspace migrations
I migrated a client’s messy setup from multiple ClickUp spaces into a single WorkOS-style hub. Sounds reasonable, until you learn that ClickUp treats team members as space-specific during invites, even when the team is on the same domain. You send an invite? They get access to that specific space—not to custom fields, automations, or inherited views unless manually re-applied.
Real moment: A client PM tried to edit an automation in a new list and couldn’t see the settings cog. Cue panic in the Slack thread. Meanwhile I’m staring at the same list as admin with full access. Clicking between tabs, I realized she was technically still a guest… in a Workspace she already belonged to. Why? Because I restructured the folders, and ClickUp treats folder-level permissions as hard boundaries even if the overall role is Admin.
“Aha” came from a ClickUp log that quietly buried a line: User access denied for inherited automation edit (scope: folder:8239)
. It wasn’t about the automation—it was that she didn’t have folder edit even though she owned the Space. That’s… not in the docs.
3. Trying to rollup rich text in Coda tables across pages
Got seduced by the clean logic of Coda’s table-to-page linking. You think: “Every client has a page, the page has a table, we’ll roll up stuff from the global CRM.” Except Coda won’t let you pull formatted rich text across table joins unless you convert it—and if that formatting includes checklists, bullets, or links, it just flattens into plaintext.
The live problem: I’m demoing to a client how notes get aggregated. They open their personal dashboard and say, “Where’s the list I made for onboarding?” It’s there. Technically. But all the spacing and bullets are gone. Just one big blob with ellipses.
Tips that mostly helped but not always:
- Use
ToText()
before pulling into a formula, or risk #REF errors - Break rich text into multiple fields if source pages use different block types
- Create an automation that syncs markdown output to a hidden HTML field for support staff
- Resist putting nested checklists inside expandable bullets—it turns into buildup noise
- Combine tables through cross-doc only if updates are one-directional
Eventually I gave up on visual fidelity and trained folks to use labeled H3s instead of bullets. Weirdly, rendered more consistently between views.
4. Filtering Google Calendar event triggers in Make with advanced logic
Simple mistake: You filter a recurring event using title, date, and time but forget that Google sends recurrence metadata in a separate structure. Even wildcards in Make’s filter parsing won’t catch pattern-end overrides unless you unroll the recurrence object manually.
One time I had it set to trigger an onboarding Zap when a user scheduled an intro call in Calendly → synced to Google Calendar. Solid for weeks. Then a user edited a single occurrence of a recurring series to add a new Zoom link. The Make scenario fired twice—once for the original recurring instance and once for the modified occurrence—which looked identical unless you expand .start
and .recurrenceOverride
in full JSON.
Undocumented? Not really. But the docs imply that when you update one event in a recurring series, it just overwrites the instance. It doesn’t. It splits into two in the API.
I ended up filtering on timestamp + event ID hash rather than just start time. That held up longer and caught 99% of dupes. Still gets weird if they drag and drop instead of editing the time field directly.
5. Structuring Work OS dashboards when teams want different default views
This breaks more than tools admit. You build a dashboard view thinking it’s going to be everyone’s home base. Then three teammates open it and immediately hit “save as new view” because they don’t like filtered status=active. Multiply that by 10 teams, and suddenly your clean Work OS is a junk folder of non-synced views named “My View 1”, “Dave’s Filtered Tasks”, and “Unassigned Only”.
I tested this across ClickUp, Notion, and Monday. All of them assume views are either global or fully solo—nothing in between. The missing logic is shared-but-customizable persistent defaults per user. Monday lets you pin views, but it’s not default when embedded. Notion lets database views show per-user filters, but only inside that page session. ClickUp? Resets filters every time unless you save them as global views… which end up cluttering the sidebar for everyone.
The hack: use a template view that includes instructions (as text blocks) on how to duplicate and modify it, with a workaround filter sheet. Clunky, but it restored context per team without polluting top-level structures.
Wouldn’t need this if any of these tools offered actual session-persistent default state per user per dashboard.
6. Problems with field re-mapping when cloning boards in Monday
This was one of those “what did I miss” moments. I’d duplicated a Monday board—the usual client onboarding one—to clone an improved intake template. All fields looked perfect until automation started spitting out error emails saying “Column does not exist on this board.” They existed. Visibly. Same names. Same layout.
Turns out Monday clones fields by name but assigns new internal IDs. Automations reference IDs, not names. So your “Team Lead” dropdown on the original board is lead_21
, but on the clone it’s lead_47
. The automation config doesn’t warn you. It just fails silently unless you open the logs in the automation’s backend config page—which, by the way, is not accessible from the regular board UI.
I had to re-map every automation manually, post-clone. That included re-authenticating integrations with Gmail for email templates since even those broke. Also, if any column is hidden during the clone, it doesn’t replicate properly. Yes, even if you unhide before you hit duplicate.
There’s no visible clue this happened unless you hover over the fail log in Automation Center, and even then it gives you a generic “Some values cannot be applied” warning instead of naming which column failed.
7. Text input limits when pushing dynamic prompts into ChatGPT via Make
Working on a Make scenario that pushes client notes from a Notion table into GPT-4 via the API to generate headline drafts for product pages. Everything chugged fine for most text fields—until one note (ironically the shortest) triggered a clean run but returned zero suggestions.
Theory: token limits? Nope. Prompt was under 500 words. Then I copied the payload and tried it manually in the OpenAI playground. Still nothing. What was different? One invisible bullet—made by pasting from Apple Notes—had an emoji formatted as rich Unicode, not plain text. That single character broke the string serialization on Make’s side, passed a malformed JSON body, got silently corrected by OpenAI into empty input, and returned success because technically nothing failed.
Hunting this down took an hour until I spotted this buried in Make’s log:
"message": "The prompt parameter is empty after encoding. Check original data."
Fixed by wrapping all prompt inputs in a replace()
chain that strips non-Basic-Multilingual-Plane characters before sending them. Basically: kill all weird emoji and special characters. Gross but effective.
8. Conflicts between synced fields and AI agents inside Notion
Notion’s AI has quietly been getting smarter—but not smarter than your own shared property logic. I had an AI agent that auto-filled sales write-up fields based on CRM tags. It worked locally. Then I wanted it to run across multiple synced databases. That’s when it strangled itself.
The core issue: you can sync fields like “Stage” and “Persona” from database to database, but AI commands can’t reference synced fields unless they’re manually expanded in the local view. And if you try to call properties by name that exist in the original database but aren’t expanded in the receiving DB, Notion AI just returns “null”. No popup. No error. Just an empty cell.
It’s worse when the synced field chain includes references to formulas. The AI can’t resolve derived values unless they’re visible in the layer it’s operating from. Made me feel like I was losing my mind. I kept re-running the agent, swearing it had worked once before. It had—but only when I viewed the full base CRM and all properties were natively loaded.
The fix was: first, fully customize the receiving database view to “show all properties.” Then, ironically, hide them from visual display. This satisfied the AI’s lookup layer without cluttering UI. Even now, if anyone changes the properties view on that DB, the AI behavior shifts subtly. You wouldn’t notice unless someone questions why the Persona summary box just stopped updating today.