Discoverability vs Manipulability, GUI vs CLI

Table of Contents

I recently downloaded a piece of software called LaunchControl to manage background jobs on my Mac. The UI is quite good, and makes the management of plist XML files quite managable.
Fundamentally, LaunchControl is a stand in for the launchctl command line tool and manually editing XML files. This got me thinking about user interfaces.
Graphical user interfaces (GUIs) and command line interfaces (CLIs) offer very different user experience and they're both useful in different contexts.

The tradeoffs

GUIs are more easily discoverable. When you don't know how to do something with the software:
  • GUI: Visually scan the interface for help. Not all GUIs succeed in helping you find the functionality you want, but many do.
  • CLI: Stare at a command prompt until you decide to look it up online...
CLIs are more easily manipulable. When you do know how to do something you can get it done very quickly:
  • GUI: Move mouse in error prone arcs across the screen to manipulate the software. Advanced users will use hotkeys, but that's more similar to a CLI (see below).
  • CLI: Type what you want, hit enter.
The CLI is also necessarily more precise, since there are no analog motor skills involved (moving a mouse).

The point

The point here though is that both CLIs and GUIs can be valuable. I tend to favor CLIs because they are precise, fast and scriptable. However, when it comes to discovering functionality the GUI is great.
Disoverability is especially important when you don't want to learn something. In this case, I have no desire to learn Apple's launchctl XML format.