My workflow philosophy May 12, 2024 on jfx's site

Introduction

This is a overview of my “workflow”, a really long rant on how I deal with technology choices related to my workflow, and why I do things “my way”. I’m hoping somebody will find this useful in making their choices.

I’m also writing this as a preface for my future blog posts where I discuss part of my workflow. I’ll keep the below updated with links as they come out:

Summary of my workflow

At the moment I use 3 hosts (almost) daily:

On each hosts, some key technologies:

I will try write blog posts on each thing above. In the meantime, most of it is in my dot files, or I scribbled about it in my public notes if you’re bold enough to fish them out.

Principles

Generally I try to follow these principles in regards to my workflow. I also follow some of these when I approach new technologies in system design, but not all are mutually exclusive:

1) secure

This is a no-brainer.

Keep in mind, this is rated number one in importance, but not in practice. There’s a fine balance to strike as things must be secure, but still practical and useable.

If I really wanted things to be truly secure, then I would have no computer or smart phone, and only pay in cash. Of course this is not practical.

Some relevant rules I try to follow are:

These rules are important cause they dictate how I’m able to work. Now in order to work, I should have easy access to hardware keys, and easy access to my non-public facing services.

2) simple and boring

I use a lot of boring technologies. If it’s not boring, then I’ve likely had a good reason to choose it, and have a decent understanding on how it works. I likely understand how the “boring” alternative works in case the “cool” thing I’m using is no longer “cool”.

It’s easy to bet on a bad technology that will no longer be supported or maintained, but it’s even easier to pick a good one. Use proven software that has already solved the problem and has stood the test of time. Software like Linux and GNU.

I’m also generally a slow adopter of new “cool” technology due to being cynical and lazy. Unless I try something for the first time and really think, “wow this is insane, I can’t believe nobody else is using this!”, I’ll probably keep an eye on it and see how it stands the test of time.

If I’m also getting all I need out of something, and I don’t wish to put more time into improving it, why would I risk my current workflow to move to something “cooler”? I call this tactical laziness.

Adopting new technologies takes time and effort. That said, it’s low risk and effort to try something and see what life is like on the other side.

An example is Obsidian. A colleague showed it to me, I was impressed, then it took me a year to switch from my existing workflow with Joplin and VS Code. Why? Cause I had everything set up great already. Linting rules, note sync working, spell checking, and settings I felt were sensible. Everything was just right.

To switch to Obsidian, I needed to migrate my notes, get my sync working, get my settings right, plus learn whatever default / new features are applied by Obsidian and flick things on or off. And the final thing (which will never stop) is to learn how to optimise my workflow with all the new things I can do in Obsidian.

The move to Obsidian has paid off though. It’s made me take more notes and feel better doing it. However, in the year between my colleague showing me Obsidian and when I finally switched to Obsidian, I probably dealt with some more important things short-term things, but I still wish I’d switched sooner.

See also: https://boringtechnology.club

3) stable, but also have workarounds

Reality is things will catastrophically fail at some stage. If I cannot access to my network via my VPN, do I have another point of access or some form of break-glass?

This cascades from the last point: generally simple things are stable, or simple to troubleshoot and resolve.

4) use my preferred technology where possible

Some examples are:

5) fast

Building from my previous point. I want to be fast when working on the computer. If you do things faster, then you can do more things. It’s a superpower, and addicting. Once you get used to being fast you can’t go back to being slow.

Having good, quick tooling, shortcuts / quicker ways of gaining access to something or obtaining information will make you faster than most people.

This doesn’t mean a bleeding edge, fast machine, or a gigabit internet connection. It means spending less time doing or thinking about how to do “crap” (cause you’ve automated it, or figured out you don’t need to do it), and spending that time on more meaningful things.

An example is git aliases, or tools like bash-my-aws. It seems like a gimmick at first, but overall you save a lot of time not typing out the same verbose commands 20 times a day. Once you get used to them, you’ll find yourself using them all the time instead of GUIs, and wanting to use GUIs less.

6) seamless experience between machines

I find it frustrating when devices or software across machines behave differently. Of course it takes some effort to set up a “settings sync” (built into many modern applications now days), or dot files, but it pays off.

This is why I like hotkeys and config to be consistent across devices. It means I don’t need to think about how I’m using one of my machines, and I just use it.

Working across fundamental barriers (such as operating systems) makes this challenging, but I’ve tried to keep things as seamless as possible.

For example, my i3 setup uses tools like alttab and i3-automark which make it feel a lot like Windows, which I used as my daily desktop operating system until 2022. This makes it easy for me to use a Windows machine again as I’ve not lost all my habits. I also don’t think I’ve made myself slower by doing this. I like to think that I’ve taken the best from Windows and brought it to my tiling window manager workflow.

I also bootstrap my machines the same way with my dot files and my scripts. Even on Windows.

7) consistent experience across applications

I prefer using vim bindings where possible so I don’t need to learn application specific hotkeys. This enables me to use the keyboard more and be more efficient.

Other basic things, like CTRL/ALT+Number to select tabs, CTRL + T to open tabs. I want things to be the same.

8) version controlled

If I’ve set something up I like, it should be in some form version control. And if not version controlled, then documented so I can revisit in the future.



Thank you for reading

Thank you so much for reading my post. If you have any feedback or queries, please reach out to me. My details are on the home page.