J
a m u s z y n
golemsp
golem start
golem is running pid 4821
To check the status of your node type golem status

Golem CLI

GolemSP, a deliberately simplified command line for running a Golem provider node. Few commands, plain words, and a first run a person can finish without reading the documentation.

Client

Golem Factory

Role

Lead UX designer. Research, specification and reporting to the board

Type

Command line UX

Year

2019–2020

Who it was now for

Developers who would build applications on the protocol and publish them to a marketplace. Golem was meant to be a generic computing protocol, and Brass was the proof of that drawn on Blender rendering, but the market had started reading Golem as a rendering application.

What it cost

The audience Brass had brought in. The research had measured that cost a year earlier, and the company accepted it, because turning toward developers was the point rather than a side effect.

Moving the node to a terminal

Golem was moving off a desktop application and onto a node you run from a terminal. The provider research flagged the cost of that before the work started: most existing node runners were on Windows, and Windows and Mac users are not used to a terminal. Linux providers would not replace them in the same numbers.

GolemSP was the answer: not a full command line with every capability exposed, but a small one a person could get through unaided. Few commands, almost no nesting, plain words, and a first run that sets the node up by asking four questions.

I led the UX on it. That meant owning the direction and the rules every command had to obey. The research, the specification and the command set were built with the team, not by me alone.

UX tools used

Jobs to be done Personas User stories Usability and effort matrix Command tree

Written for

Linux macOS

The first run

One command starts everything. Four questions follow, in the order a person needs them: accept the terms, give an Ethereum address for the earnings, name the node so other people can identify it, then read back the configuration it is starting with. Nothing is asked twice, and nothing is asked that could be defaulted.

golemsp
golem start
golem is running pid 4821
Welcome to Golem.
(1) To continue using Golem please accept our Terms and conditions:
y accept the terms
n decline. You will not be able to use the Golem Node
view read the T&C
y
(2) Paste the Ethereum address that Golem will pay your earnings to.
You can change it later in settings.
0x8A2f19C4b7D0e63aF41c2Be95d7710C41e
Use this address? y / n
y
(3) Name this node. Other people on the network will see the name.
studio-tower
Node name changed to: studio-tower
(4) You can start using the Golem Provider.
Your node is starting with the default config:
CPU 2 cores
RAM 2 GB
Disk 200 MB
Market GNT value
Change any of it with golem settings set.
For the logs type golem logs in a new terminal window.
golem status
server running yes
active / idle active, 34% cpu
jobs computed 128
last job 2020-06-14
wallet 0x8A2f…C41e on etherscan
balance 12.4 GNT / 3.1 on layer 2
pending 0.8 GNT
logs ~/.golem/logs

What the commands say back

Most of the work was in the replies, not the command names. The old output gave you no way to tell whether what you typed did what you meant. We went through all 33 commands and rewrote the output against one set of rules: say what happened, repeat the value back, carry the unit, name the argument that is missing, and end on how to check.

That rule went at the top of the specification the developers worked from: every command answers either with what it did or with what went wrong.

Beforesettings set node_name studio-tower Completed in 0.01 s
Aftersettings set node_name studio-tower Node name changed to: studio-tower To confirm run golemcli settings show
Beforenetwork connect 192.168.0.14 The following arguments are required: port_
Afternetwork connect 192.168.0.14 Required arguments are `ip` and `port`. Port is still missing
Beforeaccount withdraw 0x8A2f…C41e 40 20000 ['0x7b1c…9fe2']
Afteraccount withdraw 0x8A2f…C41e 40 20000 Sent 40 GNT to: 0x8A2f…C41e. With gas fee: 20000 WEI Transaction hash (check on etherscan.io): ['0x7b1c…9fe2']
Beforesettings set min_price 0.2 Completed in 0.01 s
Aftersettings set min_price 0.2 Minimal price set to: 0.2 GNT To confirm run golemcli settings show

The whole surface

This is all of it. Six commands at the top level, and only settings goes deeper, because settings is the one place with many decisions to make. The rest are verbs: start, stop, pause, status, back up the keys.

Keeping it flat was the point. The research note reads that commands should be as direct as possible, with not so many layers in one line.

  • golem start run the node
  • golem status state, latest jobs and wallet in one table
  • golem settings manage settings
    • show show current settings
    • set --cores shared CPU cores
    • set --memory shared RAM in GB
    • set --disk disk space in GB
    • set --starting-fee price for starting a task
    • set --env-per-hour price for the environment, per hour
    • set --cpu-per-hour price for CPU, per hour
    • set --payout-address where earnings go
    • env show / env enable / env disable WASM and VM
    • cache clear clear provider cache files
  • golem backup your private keys
    • key export
    • key import
  • golem pause / golem resume stop earning for a while, then carry on
  • golem stop
  • golem help this message, or the help for one subcommand

What the research warned about

The provider research has a section called possible risks, and it argues against the direction the team had been given. Moving from a graphical node to a command line only node would discourage a large number of people. The biggest group of existing users ran Windows, and Windows and Mac users are not accustomed to working this way, because an application normally does it for them. Replacing them with Linux providers is not as easy as it sounds.

It stayed in the document, and we designed on both tracks: keep the command line small enough for a non technical person to finish the first run, and keep a tray indicator and a thin graphical layer on the table. The rule between them was that anything the interface can do, the command line can also do, and the command line is allowed to do more.

Personas on their own were not enough to design the presets from, which the research states in a line of its own: it is not only about personas, it is persona plus computer.

What shipped

GolemSP went into production as the way to run a provider node, with the first run, the flat command set and the rewritten output intact. It shipped for Linux and macOS.

There was no Windows build. The design answered the half it could, by making the command line simple enough to get through without help. The other half was strategy rather than oversight: Golem was turning back into a protocol for developers to build on, and the audience it was leaving behind was the one the Brass GUI had brought in.

All work

Newest first
← Back to Work Next project iMapp

Want to create
something awesome?
Drop me an email

jamuszyn@gmail.com