The Best Digital To Do List Setups I Keep Rebuilding
1. Why nested folders in Notion actually slow you down
Nested folders in Notion feel organized, until you’ve wasted seven clicks digging through a page tree trying to find that one to-do you added last Tuesday. I had a setup with pages inside databases inside a parent planning doc, which sounded great until I had to onboard someone. They looked at my screen and literally said, “I don’t even know where you are right now.” That’s the tell.
The problem is Notion doesn’t strongly separate page vs database navigation. You can embed a task list inside a project page, but there’s no breadcrumb clarity once you’re four layers deep and the left sidebar just says “Untitled” in five places.
Better move: don’t bury projects. Use top-level tasks databases with views filtered by status and relation. Keep project discussions and links in the project page, but leave the actual tasks in a centralized table you can see from the home screen. Compact dashboards beat beautiful hierarchies every time once the novelty wears off.
There’s also a quirk: if you drag a page into a database as an inline page, tasks embedded in that page don’t show up in database views unless you separately relate them — which is counterintuitive since they “look” like they live in the same context.
2. The Trello card chaos when labels replace due dates
I once tried to get smart with Trello by avoiding due dates. I used labels instead — “Today”, “Next”, “Waiting”, etc. Killed all the calendar clutter… and accidentally nuked every chance I had at catching overdue stuff. Trello only natively sorts by due date in filtered views. If you skip dates entirely, you’ve got yourself a chronological void with no escalations.
Here’s where it got weird: when using label-based filtering in the mobile app, there’s a bug where archived cards with that label still show up sometimes. It’s random — might be a sync issue — but seeing “Waiting: Call vendor” pop up three days after you crossed it off absolutely wrecks your sense of done.
Undocumented edge case:
If you subscribe to a board calendar via iCal, only cards with a due date get synced — no surprise there. But here’s the thing: if you add a card with a due date, then remove the date later, it still shows up in external calendars for days. I’m guessing it caches the iCal entry for a while and doesn’t auto-update removals properly.
Still use Trello if you’re fast at scanning lists visually, but if you’re trying to track overdue work, you need real dates — not label hacks disguised as time buckets.
3. Todoist filters that look right but hide everything important
Todoist’s filter system is powerful on paper, but it eats subtle logic errors for breakfast. Here’s what got me one morning: I set a filter for today & !@meetings
trying to hide all tasks tagged @meetings from my daily view. Seemed to work — until I noticed a whole chunk of “quiet tasks” never showed up. Turns out, if a task has no tags at all, it gets excluded because it’s technically not passing the !@meetings
clause. So by trying to hide stuff with a tag, I accidentally hid everything else that didn’t have tags either.
Hunting this down took embarrassingly long. I had to open individual project views to find “forgotten” items. Also ran into an undocumented behavior: filtered views refresh automatically on desktop, but not mobile — unless you navigate away and come back. So if a recurring task triggers while you’re standing in line looking at your phone, your today filter might just not show it until you bounce back in.
“The sorting logic in Todoist filters is strict AND sneaky — they chain left to right. So ‘today | overdue & p1’ gives you something very different than ‘(today | overdue) & p1’. You need the parentheses.”
4. Using ClickUp list views without sprint folders invites madness
If you’re using ClickUp but skipping sprints or date buckets, the All Tasks view at the Workspace or Folder level becomes unusable once you have more than 30 tasks. You’ll see everything — personal notes, long-term roadmap items, random automations — sorted by created date unless you remembered to set a priority, which of course you didn’t.
I tried to go minimalist by ditching the Sprint folders in favor of a single backlog pipeline. ClickUp did not agree. The order I dragged tasks into didn’t persist across devices. Even worse, subtasks don’t show up unless you expand them manually — and that state doesn’t persist between users. So someone says “It’s not on the list,” but it’s literally hiding under the triangle.
I only fixed it after setting up recurring folders for each two-week sprint. Not because I needed the folders, but because ClickUp’s filters and views behave more predictably when grouped by date-defined containers.
Aha moment: List view filters by default ignore goals and targets — but if you use the Dashboard widget and task grouping sets to “By Goal,” you can simulate progress bars per sprint manually. Totally not obvious unless you try to gamify it.
5. Daily task regeneration from templates in Make is finicky
So I had this system where Make would clone a Notion page and recreate tasks daily from a template. It worked for nine days straight, then duplicated the whole thing three times on a Tuesday out of nowhere.
The culprit: my scheduled scenario had a 6am UTC time, but I live in Pacific Time and forgot about daylight savings. The server still ran at 6am UTC, but I had another filter checking the now
timestamp against today
in Notion — and it fell into an ambiguity depending on the execution second.
Workaround tips that actually helped:
- Use ISO-formatted date checks with explicit time zones for comparisons
- Fire triggers from a Make webhook with time payload injected from Zapier to control timing manually
- Cache the originating page ID once per day using Data Store instead of triggering a full search each time
- If tasks are timestamped with ‘now’, use the
formatDate
module to floor them to day start to reduce mismatches
This kind of bug won’t show up in tutorials because 99% of people don’t test what happens when two blueprint executions race each other over midnight UTC.
6. Obsidian task plugins break if you format checkboxes slightly wrong
I like having a local daily note with checkboxes I tick through across the day. Obsidian’s Tasks plugin lets you add queries like “Due today” or “Priority is high” — which sounds clean… until you realize it won’t match tasks that are slightly malformed.
Here’s one that bit me: if you forget the space after the checkbox (- [ ]Do the thing
vs - [ ] Do the thing
), the parser silently ignores it. It looks like a task, but doesn’t get indexed as one. You only notice hours later when your task list says “0 tasks due today,” and you definitely know you wrote three.
Also, the plugin doesn’t reindex the active file until you switch notes. That leads to the especially fun moment where you mark a task complete, but the Tasks query still shows it until you click to another page and back.
There’s no visible error — no log, no warning. Edge case logging is minimal.
7. Monday.com automations silently fail without user assignment fields
I made a recurring board template for marketing campaigns. It cloned itself once a week and triggered four automations: set owner, move to Phase 1, notify a channel, and date-shift start/end. One week, none of it ran. Just a blank board sitting there without assignments.
The reason? Someone deleted the assigned user column from the template. Monday.com doesn’t warn you when automations fail because their dependency field is missing — it just skips the whole automation silently. No red flags, no audit trail unless you check automation history manually (which isn’t even turned on by default).
We only caught it because the Slack channel didn’t get pinged that week, and I had muscle memory that something felt missing. I re-added the column, nothing happened. I had to recreate and re-save all four automations to kick them back into life — they don’t rebind automatically. That’s the part that surprised me.
This is one of the few times I saw a visual platform behave like a compiled build tool: it “bakes in” the structure when saved, and if a reference is lost later, the automation doesn’t throw a runtime failure — it just doesn’t execute.