Rain Lag

The Three-Bucket Coding Journal: Separate Ideas, Experiments, and Decisions to Calm Your Dev Brain

How to use a simple three-bucket journaling system—Ideas, Experiments, and Decisions—to make coding notes clearer, reduce mental overload, and improve your long-term productivity as a developer.

The Three-Bucket Coding Journal: Separate Ideas, Experiments, and Decisions to Calm Your Dev Brain

Your brain is doing too many jobs while you code.

It’s trying to:

  • Understand the problem
  • Remember half-finished experiments
  • Compare alternative solutions
  • Track TODOs and edge cases
  • Recall why you chose one approach over another

Most of that ends up as a mess: scattered comments, random notes, forgotten decisions, and sticky notes that eventually lie to you.

A simple fix: treat your notes like code.

Enter the Three-Bucket Coding Journal — a minimalist system that separates your thoughts into three clear categories:

  1. Ideas
  2. Experiments
  3. Decisions

This small structural change can calm your dev brain, make your work traceable, and turn “note-taking” into an active, powerful part of your development process.


Why Your Dev Brain Needs Buckets

When everything lives in one stream-of-consciousness log, you get:

  • Mixed half-baked ideas with final conclusions
  • Old experiments disguised as current truth
  • Decisions buried in walls of text
  • Notes you never want to reread

Cognition-wise, your brain is doing sorting, filtering, comparing, and remembering all at once. That’s exhausting.

The solution mirrors a classic algorithmic idea: bucket sort.

Instead of constantly re-evaluating each note, drop it into a bucket first (Idea, Experiment, or Decision). Within each bucket, you can refine and organize later.

By separating what you’re thinking about (ideas), what you’re trying (experiments), and what you’ve chosen (decisions), your journal becomes:

  • Easier to navigate
  • Easier to review
  • Easier to trust

And your brain no longer has to keep everything in RAM.


The Three Buckets: Ideas, Experiments, Decisions

Bucket 1: Ideas

What goes here:

  • Possible approaches
  • Refactorings you might do later
  • Design alternatives
  • Performance improvements to explore
  • “What if we…?” thoughts

Goal: Capture possibilities, not commitments.

Examples:

  • "Idea: Switch from polling to WebSockets for notifications. Pros: less network noise, real-time UX. Cons: infra complexity."
  • "Idea: Extract discount logic into a separate PricingRules service. Could simplify checkout controller."

Why it helps:

  • Frees brain space — you don’t have to remember every clever thought.
  • Creates a backlog of options you can revisit with a clearer head.
  • Separates brainstorm from implementation, so you’re not constantly second-guessing while coding.

Bucket 2: Experiments

What goes here:

  • Things you tried
  • Commands you ran
  • Debugging strategies
  • Small prototypes or code snippets
  • Benchmark and profiling results

Goal: Document what you actually did, even when it failed.

Examples:

  • "Experiment: Tried caching user profile calls with Redis. Result: ~25% faster, but cache invalidation was tricky around profile edits."
  • "Experiment: Reproduced bug by sending empty payload to /api/orders. Stack trace points to OrderSerializer."
  • "Experiment: Benchmark: old version = 450ms, new version = 220ms (profiled with perf – main win from removing N+1 queries)."

Why it helps:

  • Prevents you from repeating the same failed experiments.
  • Makes debugging more systematic and less chaotic.
  • Lets you see your problem-solving process and improve it.

Instead of thinking, "What did I try last time?" you can just scroll through Experiments.


Bucket 3: Decisions

What goes here:

  • Chosen architecture or design
  • Library and framework choices
  • Naming conventions
  • API contracts
  • Tradeoffs you explicitly accepted

Goal: Capture what you decided and why, so future-you (and teammates) don’t have to guess.

Examples:

  • "Decision: Use PostgreSQL full-text search instead of Elasticsearch for v1. Reason: simpler infra, fewer moving parts, good enough for <100k records."
  • "Decision: Keep UserService thin and push business rules into domain objects to avoid anemic model."
  • "Decision: Return 409 Conflict for duplicate signup instead of 400. Reason: more semantically accurate and easier for client to handle."

Why it helps:

  • Makes it easy to answer, "Why did we do it this way?"
  • Reduces bikeshedding over already-settled choices.
  • Acts as a lightweight, human-readable change log for your reasoning.

If you only keep one bucket, make it Decisions — that’s where the long-term value lives.


Make Note-Taking Part of Development (Not a Side Task)

A coding journal works best when you treat it as part of the work, not an afterthought.

Think of it as a development tool, like your debugger or linter.

  • While planning: jot Ideas.
  • While debugging: log Experiments as you try them.
  • After you ship or merge: write the Decision you just made.

This makes you:

  • More deliberate in your choices
  • More rigorous in your experiments
  • More aware of tradeoffs

It also deepens your understanding. Writing forces you to clarify:

  • "What exactly am I trying?"
  • "What counts as success?"
  • "What risk am I accepting with this decision?"

That reflection is where a lot of real learning happens.


One Reliable, Central Place (Stop Losing Your Brain)

The tool doesn’t have to be fancy, but it should be:

  • Centralized – one go-to place you trust
  • Searchable – so you can actually find things
  • Backed up – so it doesn’t vanish with your laptop

Good options:

  • A single Markdown repo (e.g., dev-journal/ in Git)
  • A notes app with tags (Obsidian, Logseq, Notion, etc.)
  • A personal wiki or knowledge base

What matters most: you don’t scatter notes across five systems.

A simple structure might be:

/dev-journal ├─ 2026-01-05-feature-x.md ├─ 2026-01-10-bug-1324.md └─ decisions-architecture.md

Within each file, you use the three buckets as headings.


Borrowing from Bucket Sort: Group First, Refine Later

Bucket sort doesn’t try to compare every element globally right away. It groups into buckets first, then sorts within them.

Use the same principle for your notes:

  1. First pass: Just decide — is this an Idea, an Experiment, or a Decision?
  2. Second pass (later): Clean up, reorganize, refactor, link related notes.

This keeps the overhead low while you’re in flow. You’re not worrying about perfect structure; you’re just

"Put the note in the right bucket now, polish it later."

This also makes review easier:

  • Skim all Ideas when planning next steps
  • Skim Experiments when debugging similar issues
  • Skim Decisions when onboarding someone or starting a refactor

Make Your Journal Easy to Navigate: Tags, Links, and Visuals

Once you’ve got the three buckets, you can upgrade your system with a few lightweight tools.

1. Tags

Use tags to group notes across files and time:

  • #performance
  • #security
  • #frontend / #backend
  • #bug / #feature

Example:

Decision: Switch to JWT-based auth tokens for the mobile app. Reason: offline support, simpler scaling. Tradeoffs: token revocation more complex. #security #mobile

Tags make your journal behave like an index without extra work.

2. Links and Wikis

If your tool supports it, link related notes:

  • Link a Decision to the Experiments that led to it.
  • Link a recurring Idea across projects to see patterns.

Example:

Decision: Use background jobs for email sending (see [[2026-01-05-email-latency-experiments]]).

Over time, you build a small personal wiki of your engineering brain.

3. Simple Visuals

You don’t need full diagrams; small visuals help a lot:

  • ASCII sketches of architecture
  • Sequence-style bullet lists
  • Tables comparing approaches

Example comparison table in your Ideas bucket:

OptionProsCons
WebSocketsReal-time, fewer requestsMore infra complexity
Long pollingSimpler, works everywhereMore server load, latency
Server-Sent Ev.One-way stream, simpleLimited browser support

Visuals make future-you much faster at context loading.


Build a Simple, Consistent Habit

You don’t need a perfect system — you need a repeatable one.

A minimal routine could be:

  • Start of session (2–3 min):

    • Write today’s date and task.
    • List a few Ideas about how you might approach it.
  • During work (ongoing):

    • Log key Experiments as you try them.
    • When something feels like a commitment, write a Decision.
  • End of session (5 min):

    • Review what you wrote.
    • Promote any tentative Ideas/Experiments that clearly became Decisions.
    • Add a couple of tags.

Over weeks and months, this small habit yields:

  • Faster recall of why things are the way they are
  • Better onboarding material (even for future-you)
  • A record of how your thinking evolved

And maybe most importantly: less mental clutter.


Conclusion: Calm the Chaos, One Bucket at a Time

A Three-Bucket Coding Journal is intentionally simple:

  • Ideas – what you might do
  • Experiments – what you tried
  • Decisions – what you chose and why

By separating your thoughts into these buckets, in a single reliable place, you:

  • Reduce cognitive load while coding
  • Turn note-taking into an active part of development
  • Make your reasoning and problem-solving traceable over time

You don’t need an elaborate knowledge-management system. You just need a habit and three clearly labeled buckets.

Next time you sit down to code, open your journal and add three headings:

## Ideas ## Experiments ## Decisions

Then start dropping thoughts into the right bucket. Your future self will thank you.

The Three-Bucket Coding Journal: Separate Ideas, Experiments, and Decisions to Calm Your Dev Brain | Rain Lag