Skip to content

Commit 69b3807

Browse files
committed
Add jujutsu post
1 parent f082e17 commit 69b3807

1 file changed

Lines changed: 54 additions & 0 deletions

File tree

posts/jujutsu-adhd-punisher.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
---
2+
title: "Jujutsu: ADHD Punisher"
3+
date: 2026-08-12
4+
tags:
5+
- dev
6+
- adhd
7+
slug: jujutsu-adhd-punisher
8+
description: jujutsu version control system is kicking dopamine out of me, and that feels wrong.
9+
draft: false
10+
---
11+
I'm trying and continuously fighting with [jujutsu](https://www.jj-vcs.dev/) (jj), a git-backed version control system, for two weeks now. What I'm finding out is that it isn't very friendly towards my ADHD brain, and I'm daring to say it's hostile.
12+
13+
I don't want this to sound like I hate jujutsu (and definitely not the authors!). It's extremely interesting and it made me curious how it works for 2 weeks. It just doesn't work with my brain. At all.
14+
15+
# Mutating when not looking
16+
17+
The *worst* thing about jj is how it does magic things while I don't specifically request them.
18+
jj auto-snapshots everything into the current change. This completely goes against my gazillion unrelated changes I usually have in a repo which go in different commits (I get distracted a lot). I can still commit a subset, but it feels like jj doesn't want me to.
19+
jj auto-rebases. I lost the commits so many times when I thought they would just change order. Nope, they are suddenly in a separate tree, somehow.
20+
jj auto-abandons empty changes. So you are telling me the change is there at one point and then it disappears?
21+
jj's sign-on-push rewrites my commit so it changes the date when it was committed. I thought this would be a nice feature to always ensure signing on push[^forgor], but nope. It. Changes. Every. Commit.
22+
My life is full of decision fatigue. The last thing I want from a VCS is to give me *more decisions* and more things to keep track of.
23+
Git only changes when I tell it to. jj changes when I blink. (And sometimes not, because I need to run a jj command to sync changes. Bizarre.)
24+
25+
# Object permanence? What's that, can I eat it?
26+
27+
Git is simple. You commit something, it stays put until you start doing a rebase.
28+
Jujutsu? Not so much. A jj change keeps morphing - same change ID, new content, new hash, new committer, shifted place in the graph. It's stable just like my life: Same[^same] old me, everything is somehow different all the time.
29+
30+
# Invisible progress? Time is fake, anyway
31+
32+
I *need* dopamine. I do *not* get dopamine when I see how the commit was "committed" 3 days ago just because I started the change via `jj new` (or just throwing stuff at the already created empty change) a few hours or days ago (or months when not touching some projects), and committed it now. Time is a social construct, but come on, starting work on something and claiming it as "I made this at this time" is a demoralizing lie.
33+
Talking about time, I spent hours trying to get signed commits that showed the datetime when I committed. Mission impossible. To keep my private commits (see below) on top and unpushed, I have to run a rebase (one time an auto-rebase would've been useful), my rebase stamps every commit to now. I tried to put the dates back but sign-on-push rewrites the commit at push anyway.
34+
So I get either one commit in the past, or 10 commits that all happened right now. Suboptimal, I'd say.
35+
36+
# /me abstracts your abstraction
37+
38+
I thought we all agreed git is the best worst option there is, and creating another abstraction over it feels like Too Much for me.
39+
I quickly saw that my head will burst from trying jujutsu. LLMs of course have very outdated info about it, as it isn't even at 1.0 yet and things are changing all the time. The issue is that even LLMs are struggling with jj, even after slowly creating the so-called "skill" for them with everything required to work with it.
40+
I had to create an abstraction for the abstraction for the abstraction with custom aliases for working with private commits - the only auto-rebase I want, to keep private commits (`git.private-commits` setting) on top and not be pushed, isn't an option by default, and push refuses to push the private commits. I had to do some manual dance all the time as I _need_ these local repo changes in existing files. Using private commits is encouraged instead of keeping things in the uncommitted files, so this is a head-scratcher.
41+
42+
# jujutsu is still powerful
43+
44+
The `undo` and operation log are _so good_. Sure, git reflog is nice, but even when I was breaking things, I could easily find the command and undo the damage. `evolog`, `run`, `absorb` and so many other commands are great.
45+
46+
# I'm hitting undo on jj
47+
48+
Low working memory can't hold a state that mutates without me acting, and rewards me with stale timestamps. That's a no-go for ADHD, as I need a world that stays put, with visible proof of work. That's exactly what jj removes.
49+
I consider this attempt at using jujutsu[^jj] as unsuccessful. But maybe you will enjoy it more?
50+
51+
52+
[^forgor]: Have I mentioned my ADHD brain is so forgetful? I was happy to find this option, but it's not useful as-is now.
53+
[^same]: Same but different but same, actually.
54+
[^jj]: Is it called jujutsu because it's kicking my ADHD butt?

0 commit comments

Comments
 (0)