Policy of transience
33 points by pushcx
33 points by pushcx
I love Simon’s articulation of a tension I’ve been feeling in my own work. I love REPL workflows. I’m addicted to evaluating expressions in my editor: function interiors, half of a data pipeline, little scripts I write in the middle of a file. You get immediate feedback and can go seamlessly from a “scratchpad” to a working program.
That’s the idea at least. I’ve been burned several times writing data processing scripts that depend on some saved state in R’s “workspace”. It probably sounds crazy to engineers working in other languages, but I’ve seen some horrible situations with load-bearing global state in pipelines in jupyter notebooks or R scripts.
REPL work (and you can make a lot of languages into REPL languages with something like SLIME) frees you from having to think about state or your environment when you’re just hacking around or debugging. The freedom costs something. I won’t give it up, but I need to develop better practices to avoid digging myself too deep of a hole.
It reminds me of https://grahamc.com/blog/erase-your-darlings/ and https://elis.nu/blog/2020/05/nixos-tmpfs-as-root/ that implement similar policies with NixOS.
Personally, I often use /tmp
as a scratchpad and really like the fact that it gets cleaned up automatically.
I also have ~/tmp
(a regular directory, not a ramdisk) but it tends to accumulate cruft. Somehow I never feel confident to just remove everything in there without making sure I won’t miss anything.
One of the benefits of what I have with nsjail-ing a lot of stuff is that persistent mutable profiles for various heavy tools are just not a thing that can happen. Path-dependent behaviour not allowed. It looks like a defensive security measure, but what it defends against best is applications trying to gaslight me.
Ideally, the zone outside «transient», «version controlled» and «append-only / write-once» should be as small as possible. I do have some version-controlled de-facto-shell-history though.
This is like, the opposite of me. I just started a new browser profile two weeks ago, and I currently have 3336 tabs open, across 28 windows. I use an extension and some Sway configs to automatically place them in the correct workspace if I have to restart Firefox for some reason.
As someone who tends closer to the OP’s transient workflow, I find yours fascinating! Do you mind if I ask you a few questions on your workflow?
Given your use of extensions and configs to restore the state of Firefox, am I correct to assume those tabs are mostly references, or bookmarks, as @fanf mentionned; that is, tabs that you keep open and re-read multiple times? Or are they a sort of to-do that you still have to get to, and close once that task is done?
What would you say differentiates a tab from a window? In other words, when do you choose to open a new window, instead of another tab?
How do you keep track of where what is?
How often do you have to manage your extension and configs to update the state when you open a new tab, or close a window?
I thought I was extreme with 295 tabs on my main computer’s browser (another few hundred across other computers).
We had a company policy like this where we just didn’t pay for Slack (impossibly expensive for our setup anyway) and anything you wanted to find two weeks later had to be documented in another place. It worked amazingly well.
Close my entire web browser frequently
I just need to remember to reboot my laptop. I’l often ask myself why my Macbook is so slow and then I see an uptime fo 50+ days.
where we just didn’t pay for Slack (impossibly expensive for our setup anyway) and anything you wanted to find two weeks later had to be documented in another place. It worked amazingly well.
Similar story here. Was a TA at a public university, and paying for Slack was out of the question. We moved a lot of important decisions, training, and discussions to Google Docs, and we generally didn’t run into any problems.
I do remember feeling guilty that every meme I posted in our #random channel would be reaping a more “important” message though 🙃
I made an integration that archived all our Slack memes to a Tumblr so the memes got saved automatically. The business documents we had to do ourselves.
Some of this is new to me (removing persistent shell history might be too out of my comfort zone), but I’m surprised by how much this resonated with me.
In particular, if I see a tab in my browser, I have to recall the context for why I have it there. Quitting browser + closing tabs seems like a no-brainer to me, literally. It’s like I’m giving my brain permission to move onto a different topic.
Very early on I adopted (from my first manager [*]) the habit of using tt
as the name of a temporary file (embellished as tt.go
, tt.hs
etc). This is a signal to my future self that there is nothing of permanent value inside and it can always be safely deleted. I find this helps avoid a lot of the creeping ~/tmp
directory issues. (If I need a dir I can mkdir ~/tmp/tt
, work in there and happily nuke it next time).
I guess I assumed that everyone does something like this (but with different file names)?
[*] - I think he mentioned it came from an AT&T practice, likely early 90s? Unsure.
My ~/tmp
folder is full of dated folders. ~/tmp/2025-05-14/
for today’s tmp work, for example.