Skip to main content
← Blog

Writing Down 'If X, Then Y' on a Task

VauDium ·

Decisions made while putting Gollwitzer's 30-year-old if-then plan next to a task — why it lives at the task level, what the card structure looks like, why Rich Text won.

Writing Down ‘If X, Then Y’ on a Task

Today a small entry button appeared on the task detail screen — right under the description (“작전”) section, a horizontal strip labeled “Response Rules.” Tap it and a modal opens, with cards laid out in a stack. Each card has two rows — situation on top, response below.

[1] If I didn't exercise yesterday,
    walk at least 30 minutes lightly today.

This is, almost exactly, the shape of what Peter Gollwitzer formalized in 1999 as Implementation Intentions.

What Gollwitzer Showed

Setting a goal doesn’t automatically translate into action. A goal intention like “exercise more” has a modest execution rate relative to the willpower it costs. A 30-year meta-analysis (94 studies, n > 8000) put the effect size around 0.65 — meaningfully better than plain goal-setting, but not overwhelming.

What Gollwitzer pointed at was the small bridge between intention and action. Encode the goal as a situation → behavior pair in advance. The moment you rewrite “I’ll exercise more” as “if X happens, I’ll do Y,” execution rate goes up significantly.

The neurological reason is simple too. When the situation is encoded as an external cue, the cue itself triggers the behavior without going through willpower. Willpower is an expensive resource — structures that spend less of it travel further.

One More Layer of the Writing Space

One thing Fecit deliberately does differently from other task managers is offer an unusual number of writing surfaces per task. Title, description, intention, target (current state), expectation, obstacle, result, retrospect. Each asks the user a different question. There are many layers to unfold when you want to look deeply at a task (most of them collapsed by default — minimal to maximal).

Response rules add one more layer on top. A place to write, in advance, “while working on this task, if this situation arises, do this.” If description is how, overall, response rules are anticipated branches decided in advance.

At the Task Level, Not Globally

The first call was whether to put this globally (like rules for daily living — “drink water when I wake up”) or per task.

Global works for forming everyday habits — when the situation and the action should always be paired regardless of context.

Per-task is narrower and more precise. An if-then valid only inside the context of this task. For example, a “Write presentation deck” task with a rule like “if I spend more than 30 minutes on the header, move to the body first.” That rule is meaningless outside that task.

Fecit’s other writing surfaces — intention, target, expectation, obstacle — are all per-task. Following the same line felt natural. A global if-then surface can have its own home later, if it’s needed.

A nice consequence of putting it at the task level: rules written on a template carry over when a record is generated. You don’t have to rewrite the same rules every time the same task gets created.

Multiple Rules, Ordered

I considered starting with one rule per task as the simplest shape, but it felt weak in practice. Real tasks have several branches.

[1] If gathering materials takes more than 30 minutes → grab headers, move to body
[2] If headers won't fit → open last year's deck for a moment
[3] If the body is done but I'm out of ideas → walk 15 minutes, return

So I let multiple rules sit on one task, with user-controlled order. Drag-and-drop reorder at the card level. Order isn’t really priority here — it’s more like a checklist flow. When you start the task, a quick scan from the top reminds you which branches you might hit.

Rich Text It Is

It started as a plain <textarea>. Two lines of plain text per card. Easy to build, familiar on mobile and desktop.

But the moment the user actually starts writing, they want to emphasize key words. “if it takes more than 30 minutes. Plain text can’t carry that emphasis.

Swapped in RichDescriptionEditor (the same component Fecit uses for description elsewhere). Now it stores HTML, which means there’s a mix risk with previously stored plain text. The card previews stripHtml the content for display — HTML loses its tags, plain text passes through. Both render cleanly.

Three Screens Instead of One

Originally I fit everything inside a single modal. List with inline edit on tap. Quick to build, but had micro-friction — tapping another card while one was mid-edit dropped unsaved state in a confusing way.

Split into three.

  • List — card list + drag reorder + + button
  • Create — write a new rule
  • Browse — edit / delete an existing rule

On desktop all three are modals; on mobile they’re three routed screens. Headers are simple py-2 (no title, buttons only), and cards have 14px text with 10/12 padding to tighten them. Padding started at 14/12 but came down because how many rules visible at once matters more on this surface.

Count Next to the Chevron

The entry button sits under the description as a single-row horizontal strip. Icon and “Response Rules” label on the left, > chevron on the right. The count sits between them.

At first the count was hugging the label — “Response Rules 3 →” — and it read like part of the label. Changed it to textAlign: right so the count slides to the left of the chevron — “Response Rules … 3 →”. The label stays a label; the count latches onto the chevron, visually hinting they sit inside the card you’d tap into.

When count is 0 I’d had a verbose empty state — “No response rules registered yet.” Replaced it with nothing, following the pattern of other entry fields that leave empty values blank. The chevron carries the “tap to enter” cue on its own.

Making Deliberate Action Non-Deliberate

A response rule works best the moment you don’t look at the card again. You wrote it once, started the task, 30 minutes pass and the materials aren’t coming together, and the next action — “move to the body” — surfaces in your head automatically. That rule has already done its job. A conscious decision was moved earlier in time so it could happen without consciousness.


What decides behavior isn’t the strength of resolve but how much of the decision was finished in advance. Willpower is expensive, and spending it every time eventually empties it. One line of if-then ends a future decision now, so the future self doesn’t have to make it again.

“Who I am” is the accumulation of “what I do in which situation.” Which is why I think a tool should have a place to write those two lines down.