Testing Real Goal Tracking Tools That Break Under Pressure
1. Using Notion recurring templates to set quarterly goals
I still haven’t figured out if Notion’s recurring templates are magic or a trap. I built a page template for quarterly goals with linked KPIs, status tags, due dates, and a roll-up that tracked progress from our project database. It looked beautiful. Every three months, I clicked “+ New” and felt like a planning god.
The problem is: the recurrence logic is nowhere in the UI. You can’t just say “repeat every 90 days.” The recurring behavior only happens if you manually duplicate the template, schedule it with a third-party integration (like Make), or script it. I tried the Make method—ran into a versioning issue where the linked databases didn’t re-bind within the new page instance. You’d think a duplicated Notion template would preserve database relationships. Nope. Relational fields break silently. No error, just everything looks normal but none of the rollups calculate anymore.
The fix was to re-link the database views within the template every time I updated the source schema. This wasn’t in any documentation. I only noticed when one quarter, the progress bar sat stagnant at 0% even though we’d closed six tasks. So the idea that Notion “sets up your next quarter automatically” is fiction unless you combine Make, recurring toggles, and a manual database refresh to keep it alive.
2. Why Tana goal tracking looked promising until I tried dates
For about four days, I was convinced Tana was the perfect planning tool. The auto-tagging, fractal notes, and dynamic views made it feel like Notion if it actually listened to you. But then I tried to implement OKRs where progress is evaluated weekly, and the whole system cracked.
The moment you try to attach granular dates to intentions inside Tana, you fall into its “supertag semantics” logic. I tagged a node as a #Goal, nested weekly #Check-In items, and wanted a table grouped by week number. That grouping? Not possible unless every node includes an explicit date property, and those dates are typed as ISO-format dates or selected from the date picker. But the check-in entries I created via voice dictation just said “on Monday” or “this week,” which Tana didn’t parse correctly. They’re treated as plain text unless you manually convert to a date field—each time.
Also, the timeline view does not respect recurring goals unless you pre-generate every instance. There’s no recurring date-type field behavior. My hack was to write a script using their command line API to generate dated goals weekly with parent-child references. That worked… until Tana rate-limited it because of burst writes. No error message—stuff just stopped appearing. That delay made me think the system failed, so I re-ran the script, and that duplicated everything. Cleaning it up felt like reverse-engineering a machine I never assembled.
3. Wrangling Airtable for weekly habit streak tracking
I wanted something simple: track daily habits (like journaling, workouts, and deep work hours), then roll them up into a streak count and weekly completion metric. Airtable seemed ideal. I made a table called “Habits Log” with Date
, Habit
, Completed
. Then a second table where each record was a week, with a roll-up of all habit completions. Goal: turn that into green or red depending on the streak status.
Here’s the flaw: Airtable rollups don’t calculate the difference in days between entries unless you build a lookup date-array parser using formulas. I ended up using a formula like this:
IF(DATETIME_DIFF(TODAY(), MAX(values), 'days') = 1, "Streak Alive", "Streak Broken")
Except MAX(values)
doesn’t work unless all target fields are actual datetime types. One of my rows had a malformed date due to a Zapier insert where the formatter step failed because the date field from Google Sheets came in as 1/1/24
instead of ISO. That broke the entire formula silently. No warning. Just an empty cell where the streak message was supposed to go.
I fixed it by adding a conditional to check for valid datetime values, and then I pushed all new Google Sheet rows through a Date Formatter step before Airtable. Took four debugging loops to isolate that edge case.
4. Tracking team priorities using Coda buttons and sliders
A co-founder asked for a fast way to visualize team priorities during sprint planning. JIRA and Asana felt bloated. I built a Coda doc with three tables: one for team members, one for tasks, one for sprints. Each task had a 1–10 urgency slider and an owner dropdown. Then I made a button column: “Prioritize 🡆” — clicking it moved the task to the current sprint table and triggered an automation that pinged the owner in Slack.
Half the time the Slack automation fired, but only sometimes with the right mention. The culprit was a team member whose name changed in Slack but not in the Coda People column—apparently the People-type relation caches usernames, not email addresses. No docs mention this, but once I deleted and re-added the member’s contact card, it fixed itself.
Another weird thing: if the slider was left at the default middle value (5), the prioritization logic didn’t work as expected. I had a filter that excluded tasks below 5, but 5 itself was treated inconsistently—sometimes excluded, sometimes not. I ended up changing the logic to >= 5.1
just to force it out of the ambiguous zone. It’s tiny stuff like this that kills the automation magic for normal people.
5. Reconciling goal progress manually in ClickUp despite automations
ClickUp has a Goals feature that sounds solid—attach tasks, define targets, assign key results—but in practice it’s way too rigid. I had a recurring monthly objective: “Publish 4 articles.” Each article was a task with a “published” checkbox custom field. I created a goal with a number-based target, linked it to those four tasks. Easy, right?
But here’s the trap: unless the tasks are marked “done” (not just checked), ClickUp doesn’t tick them for goal progress. And “done” is a status—not a field. But our content team workflow passes through “Ready for Review,” “Published,” and then “Archived.” None of those triggered ClickUp’s goal metric advance because only the exact “Done” status counts by default.
A workaround? I had to edit the Goal tracking settings and map “Published” as a terminal status. But that setting only exists if you’re an admin on the workspace. I didn’t have permission on the shared project at the time, so I thought the goal tracking broke entirely. Lost hours checking Zap triggers before someone mentioned it in Slack: “Oh yeah, you need admin to change the progress logic.” That should probably be in the UI.
6. Tracking OKRs with Obsidian and dataview plugin quirks
I set up an OKR vault in Obsidian with dataview queries that surfaced weekly progress logs inside KPI note files. Felt great to see week-on-week gains in a table like:
| Date | Hours Deep Work | Weekly Revenue |
|------|-----------------|----------------|
| 1/1 | 12 | $2,400 |
| 1/8 | 15 | $3,000 |
But the moment I moved a note into a monthly folder for archiving, the table broke. Dataview uses path-based filters unless you scope to tags. My original query was something like:
FROM "weekly"
WHERE contains(file.name, "log")
That stopped catching the logs in /archive/weekly even though they still matched the name pattern. Solution? I had to scope the dataview query to a tag instead, like WHERE contains(tags, "weekly-log")
. Of course that meant backfilling every old note with that tag manually, unless I wanted to write a find-and-replace script. I did it. The script broke on filenames with colons. Because Windows is weird about colons in paths.
Obsidian also doesn’t refresh dataview tables unless you click out of the note and back in. More than once I thought a table was broken when the data just hadn’t re-rendered. An “aha” moment came when I realized flushing the cache via the command palette fixed the visual glitch instantly.
7. Why Reclaim calendar sync caused more stress than clarity
I plugged Reclaim.ai into my Google Calendar hoping to auto-block time for long-term goals like reading, coding, writing. It auto-scheduled them by priority and deadline. Worked great… until a colleague gave me edit access to one of our shared calendars. Then everything exploded.
Here’s the behavior: Reclaim tries to book smart time blocks only on calendars where you’ve set a priority. But the moment another calendar shows up in your account, it treats all “busy” events equally—even phantom ones. I had a stale event copy from an old Zoom sync that existed only on that shared calendar. So my “Deep Work” block kept getting pushed out, day after day, stuck behind a fake event from January.
The root issue? Reclaim doesn’t let you mark which calendars are real context vs ignored noise. You have to go into settings and manually blacklist calendars. It’s buried three clicks deep. And once I unselected the rogue calendar, all the time blocks refreshed instantly and landed where they were supposed to weeks ago.
I also learned Reclaim assumes a maximum density rule—so if your day has back-to-back events, it silently delays goals even if you technically have an open 30-minute slot. No alert, no banner—just subtle delays. Once I shrank the minimum block size from 60 minutes to 30 in the settings sidebar, the goals started scheduling again.