Even today for semi- or non-routine tasks I'll do weird stuff like copy text to Notepad to remove formatting then past it back into the same app/web page to enter information. I'll also do some weird things like instead of using an entire screen to read text on a long web page article I'll just keep my eyes near the top of the screen and scroll so my eyes don't have to move. Not sure what I'm trying to say but maybe there are entirely new ways of building existing app types out there that have an audience out there.

I wish we spent as much time on HCI in our field. I get a lot more value out of seeing how people I develop software for do their tasks and then thinking about how that could be improved. An implication of that is that I'm not building a fancy UI for my resume's sake; that I'm actually improving their day-to-day workflows. That takes some cost and time but in my projects nobody wants to pay for that.

> I'll do weird stuff like copy text to Notepad to remove formatting then past it back into the same app/web page to enter information.

I do that too! In fact, I do that so often that on Windows, I have the following workflow in my muscle memory:

  CTRL+C ;; copy
  Win+R  ;; open "Run"
  CTRL+V ;; paste
  CTRL+A ;; select what I just pasted
  CTRL+X ;; cut it out (disappearing text serves
         ;; as a visual proof of operation completion)
  ESC    ;; close the "Run" box, restoring focus
         ;; to original application
  CTRL+V ;; paste cleaned-up text
I do that without thinking in under 2 seconds.

On Linux, I usually abuse the address bar of the browser.

I think software designers underestimate how powerful this sort of muscle memory is. Even if something isn't technically one action away, if you can get to it with a sequence of actions you can perform consistently right after each other, you quickly start to think of that sequence as "one action".

This is one reason why old-school, keyboard-shortcut-driven UI can feel so good to use (and why animations that block interaction are so frustrating).

And which is why I abandoned both Windows and Linux for using Emacs as my OS :).

No, seriously. I try to port all my workflow to Emacs, because with all the power and consistency of that keyboard-driven platform, I can finally put my muscle memory to use.

Beyond that, I finally developed a habit of automating annoyances away. Today, if I do something frequently and find it annoying, I fix it with a script. Be it elisp (Emacs), CL (Linux - I use StumpWM as my WM), or AutoHotkey (Windows).

--

Actually, some random recent examples:

- I frequently deal with Lisp code that outputs large structured or semistructured blobs of text; at some point I decided I need a quick way to pipe such output to a separate Emacs buffer: https://gist.github.com/TeMPOraL/8715c9dd9837e0b601d1cdce059....

- At my previous workplace, I found myself pasting some strings to various communications channels quickly. Since I already used AutoHotkey to remap Caps Lock to CTRL, this is what I came with (and later expanded): https://gist.github.com/TeMPOraL/d330edccf8ba9a2b13d01b4e7f1....

- Speaking of whipping up ad-hoc UIs on the fly, the Hydra package (https://github.com/abo-abo/hydra) is perfect for that in Emacs. My config becomes increasingly full of ad-hoc popup menus like these: https://gist.github.com/TeMPOraL/d3a0b3065c43d41526bcb3fe2c9....

- StumpWM - https://github.com/TeMPOraL/conffiles/blob/master/stumpwm/.s... - unlike my Emacs config, most of this was written by me, on the fly, to fix some annoyances.

The point of giving those examples, beyond obviously showing off :), is that this is what IMO good software enables. Improving your life on the fly, one simple binding or one simple script at a time. Scripting isn't only for shell commands. It's definitely useful for UI experience as well. I regret it took me that long to figure this out.

This is also why I try to port as much of my workflow as I can to Emacs. It's because Emacs makes such modifications seem trivial. If you need something to interoperate more, you can glue it with together with a little bit of Elisp. If you need something new, you can probably add it with a little bit of Elisp in no time. Emacs, being a runtime-modifiable, introspectable and tremendously well documented system with a decent REPL, makes this quick and relatively painless.