Why a Developer Needs a Thought Record
Last year I hit a wall. Not a bug, not a deployment failure â a cognitive wall. The kind where you ship a fix at 2 AM, stare at the green CI check, and still feel like an impostor who got lucky.
My therapist suggested something old: a CBT thought record â a 7-column worksheet from cognitive behavioral therapy that catches distorted thinking before it spirals. It works. But paper worksheets get lost, and I already live in Notion.
So I built one. This post walks through the structure â Notion properties, relations, and rollups â so you can either copy mine or build your own.
TL;DR â I packaged this as a ready-to-use Notion template ($7). There's also a free preview here if you just want to look around.
What Is a Thought Record?
A thought record is the core homework tool of CBT. When you feel a sudden spike in anxiety, anger, or sadness, you pull it out and fill in seven columns:
| # | Column | What you write |
|---|---|---|
| 1 | Situation | What happened? (Just the facts) |
| 2 | Emotions | What did you feel? Rate intensity 0-100 |
| 3 | Automatic thoughts | What went through your mind? |
| 4 | Cognitive distortion | Which of the 10 distortions fits? |
| 5 | Evidence for | What supports the thought? |
| 6 | Evidence against | What contradicts it? |
| 7 | Balanced thought | A fairer, alternative interpretation |
The magic is in columns 4â7. Most spirals die there. You write "I'm going to get fired" (catastrophizing), look for evidence against, realize your last 3 reviews were "exceeds expectations," and land on "My manager asked for a 1:1 â that's normal, not a PIP."
The Notion Structure
I used two databases with a relation â one for thought records, one for cognitive distortions (a reference table). Here's the setup:
Database 1: Thought Records
| Property | Type | Notes |
|---|---|---|
| Date | Created time | Sort descending |
| Situation | Text | What happened |
| Emotion | Multi-select | anxious, angry, sad, guilty, ashamed |
| Intensity | Number | 0â100 scale |
| Automatic Thought | Text | The hot thought |
| Distortion | Relation â Distortions
|
Pick from reference |
| Evidence For | Text | |
| Evidence Against | Text | |
| Balanced Thought | Text | The reframe |
| Outcome Emotion | Multi-select | Re-rate after |
| Outcome Intensity | Number | Should drop |
| Intensity Drop | Rollup / Formula | Intensity - Outcome Intensity |
That last rollup is the satisfying part. You fill in the record, re-rate your emotion, and Notion shows you the drop. Seeing "42" in green next to a completed record is a small dopamine hit that reinforces the habit.
Database 2: Distortions (reference table)
| Property | Type |
|---|---|
| Name | Title |
| Definition | Text |
| Example | Text |
| Common in devs | Checkbox |
I pre-loaded the 10 classic distortions (Burns, 1980). The ones I flagged "common in devs":
- All-or-nothing: "If this PR isn't perfect, I'm a bad engineer."
- Catastrophizing: "This bug in prod â I'm fired â I'm unemployable."
- Mind reading: "My reviewer left a comment, they think I'm incompetent."
- Should statements: "I should know this already, I'm senior."
- Impostor "labeling": "I got lucky, I'm a fraud."
The Formula That Ties It Together
The Intensity Drop property uses a rollup + formula:
// Rollup: max of Outcome Intensity (via self-relation not needed â same row)
// Formula:
prop("Intensity") - prop("Outcome Intensity")
If you want it to show a colored badge:
if(prop("Intensity Drop") > 30, "â
Big win",
if(prop("Intensity Drop") > 10, "ð Helped",
if(prop("Intensity Drop") > 0, "ð¤ Small shift", "â ï¸ Revisit")))
The 5-Minute Habit
The template includes a daily check-in view â a filtered board showing today's records. The goal isn't to fill one out every day. It's to fill one out within 90 seconds of noticing a spiral.
My rule: if I notice an intensity spike above 60, I open Notion before I open Slack. The record takes 3â5 minutes. By the time I hit "Balanced Thought," the spike is usually below 30.
Does It Work?
I'm not a clinician, and this isn't a substitute for therapy. But anecdotally, over ~80 records:
- My average intensity drop is 34 points (start 72 â end 38).
- The distortions I fall into most: catastrophizing (41% of records) and mind reading (23%).
- The most effective reframe pattern: "This is a normal part of the job, not a verdict on me."
Having the data in Notion means I can see my own patterns. That meta-awareness is its own kind of therapy.
Get the Template
-
Full template ($7): Gumroad â CBT Thought Record
- Pre-built databases, 10 distortions loaded, 3 dashboard views, formula examples
- Free preview: Notion
If you build your own from this post, I'd love to see how you extend it â drop a comment.
If you found this useful, I write about developer tools and occasionally developer wellness. Follow for more.
Top comments (0)