Sunday, August 11, 2019

How (Busy) Software Engineers/Scientists Use Their Computers - A Datapoint

Having spent a few years doing HCI research, I know very well the importance and value that getting data points (any data points at all) about how people set up their workspaces and organise their work/workspaces is - especially for anyone involved in Operating System UX, Personal Information Management (PIM), File Systems, or Web Browser UX work.

Today, I thought I'd make a quick post outlining my personal workflow, in the hopes that this will be a useful datapoint for anyone out there designing these systems (*wink wink* Microsoft ;).  Admittedly, the way I work is probably a bit of an outlier, but I there are many elements here that should be of general value. Hopefully this will be of use to some people out there who study this stuff :)

So, without further ado, here is an overview of my typical working environment.

Physical Setup
I prefer a single large monitor over 2 smaller ones.
- With two (or more) monitors, you either have a primary + a secondary you hardly look at, or 2 that are small and angled badly so they're both not great to use. Furthermore, multiple screens don't work that well - you're constantly fighting every single app opening things on the wrong monitor (+ dragging things over to the one you actually wanted them to open on), OR the scrollbar on the edge of screen 1 is permanently impossible to quickly + accurately target.  (Also, on Linux, using multiple screens is often a security risk, as the log in screen often only covers one of the screens!)
- At home, I've got a 27 inch monitor. I first adopted this setup 5 years ago after trying it in my office at Uni for a few weeks. This is the minimum size I work with these days. Anything smaller is painful/too cramped (or the font sizes have to be impossibly small that nothing can be read)
- At work, we've got a single large 43 inch monitors. It does take a little getting used to initially if you're used to full-screening everything (i.e. the "BOOF!" factor every time you open many applications). However, once you're used to it, it is quite nice, and obliterates the need for cubicle dividers in many cases as the screen practically does that for you.

In terms of input equipment:
- I prefer wired equipment over wireless.
   - I'm currently softening my stance on wireless mice, but for keyboards, there are some really real security considerations IMO, which is why I like to at least be able to always see where the USB plug goes into the machine)
   - I prefer wired headphones, preferably with a single cord that goes down the right hand side (not left), due to the way I lay out my workspace. See below.

- Keyboard: I currently prefer the Logitec K120, but will settle for a mechanical Cherry switched one (I find the keycaps on some of those a bit too narrow though).  I strictly avoid Microsoft keyboards, or really any keyboard that has flat + shallow keys (they're usually hard too; some like certain wireless Dell/HP ones also have the added fault of being slow to respond) - as all of those give me really bad RSI (numbness, tingling, muscle weakness, + sore fingers/fingertips after only a few minutes of typing)

Physical Workspace layout:

- Where possible, I like having an L-Shaped layout where there's an empty table on my left (for
putting bags, scribbling papers, documents, etc.  The screen then is sitting directly in front of me - keyboard facing the monitor straight on, mouse + tablet on right hand side beside the keyboard (and ideally, with the mouse on a slightly lower level to the keyboard). The left side of the keyboard will typically have a scratchpad/todo-list + pencil (Note: Pencil not Pen).

- I prefer to have the computer tower on the right hand side, below the desk, but otherwise fully visible + accessible.

Desktop/Virtual Workspaces/Window Setups
I typically have workspace setups open for 3-4 projects at a time (e.g. 1-2 work project workspaces + 1-2 personal + 1 general purpose, or 3x checkouts of the same project while different branches are stuck in different stages of code review). Where possible, I try to split things up so that I have one project per virtual desktop.

For example, a typical project setup will look something like:
- 1-2 browser windows
- 1-2 folder windows (i.e. the main root folder of the project, and another for other resources)
- 1 command prompt window (set to the root directory of the project - for compiling/running the project)
- 1 Git client window  (usually Git Gui, but increasingly Sublime Merge)
- 1-2 Sublime Text editor windows (usually one, but a second may be open occasionally)
- 1-2 windows for the actual program I'm working on
- At times, 3-4 Vim Windows (usually none, but there may be a few when figuring out how things work)
- At times, 2-5 image editors / Word Docs / PDF's  (i.e. when making docs, reading requirements/specs, patching together screenshots/diagrams/image assets)

On top of this, I have the following open as the "base" configuration (on the first desktop, as items 1/2/3 respectively):
- Web browser with email open + current reading list of news/articles/etc.
- "Music Playlists" folder + VLC

(NOTE: I don't generally use IDE's, as among other issues, they tend to lag, choke, and die if my main app goes rogue, pulling down the source code I was working on with them. There's nothing quite like being able to just close the offending terminal window to kill a misbehaving app)

Some variations of my setup occur. For instance, instead of the single command prompt window, I currently have the following windows on my Linux VNC session at work:
- Main Terminal (always open, one per desktop/checkout) - 4x tabs
   1) Project Root - Used for repository-level Git operations - pull/rebase/merge and integration with code review tools
   2) App Root - For compiling the program (+ and secondary executables together) + Running Coverage Tests
   3) App Root 2 / Src Folder - For running the program / main binary
   4) Tst Folder - For running the unit tests
   5) Demo Folder - For running the "demo" version (i.e. offline version with mock test data)

- Second Terminal (often open - long term)
  1) For running the simulator/server components

- Third Terminal (occasionally open, short term)
  1) Random folder - For running various utility scripts (e.g. clearing out all coredumps, checking running processes, SSH'ing into another box, etc.) 

As a result, in total, I typically have something like 20-50 windows open at a time. The problem though is that most window managers are terrible about reopening all these windows and putting them on the correct desktops in the correct order. (I know that i3 can somewhat be used to automatically open specific windows on specific desktops at startup, but that thing has a whole bunch of other issues).

Therefore, it's a pain needing to restart my machine, as it takes a good 5-10 minutes to reconfigure each time it does that... and Windows 10 these days needs to be restarted somewhere between once every 2-3 weeks (the longest I managed to make it go was just over 35 days I think. Sometimes you don't even get any say in this, as it will just bluescreen itself to restart or force its way with dark+confusing UX patterns to get its way).

To make all this work on Windows, I currently need to have 7+ Taskbar Tweaker installed. Otherwise, Windows is flat out unusable, as it combines windows by application.  That is quite bad for my workflow, because each application I use has a bunch of windows for different projects open (e.g. Git Gui has like a main window for each repo, then opens sub-windows for various operations. Managing those if they all get grouped together is a mess), and I use folders to group off sub-projects within each project.

No comments:

Post a Comment