Understandability

Presentation / verbosity.

Show information when it's relevant, hide information when it's not.

Maturity Levels

📃 Text, text everywhere..

Show the user 200 MB of uncoloured logs per minute.

2021-02-21T15:13:01.123 | Debug | my::krate::module | Starting application.
2021-02-21T15:13:01.325 | Info | another::krate::module | Connecting to server.
2021-02-21T15:13:01.500 | Debug | third::krate::module | Resolving DNS for `some.domain.com`.
2021-02-21T15:13:01.531 | Debug | someones::krate::module | Looking up name server for `some.domain.com`
2021-02-21T15:13:01.570 | Debug | third::krate::module | DNS Resolved to 1.2.3.4
..
🎨 Beautiful

"The ultimate complexity is simplicity."

  • Show useful information.
  • Hide unnecessary information.
  • Could: Show progress detail for current step, hide detail when it's done.
  • Highlight important information, dim contextual information.

Example progress:

 ./target/release/examples/demo --concurrenta Upload App         [████████████████████████████████████████] 26.01KiB/26.01KiB (0s Ok!)
⠦⠦b Create DB          [███████████████████████████░░░░░░░░░░░░░] 68B/100B (0s 1s)
✅ c Download App       [████████████████████████████████████████] 26.01KiB/26.01KiB (0s Ok!)
⏳ d Link App to DB     [                                        ] 0/100 (queued)
⏳ e Run App            [                                        ] 0/100 (queued)
⠤⠤f Allocate Domain    [██████████████████████████░░░░░░░░░░░░░░] 67B/100B (0s 1s)
⏳ g Attach Domain      [                                        ] 0/100 (queued)
⏳ h Notify Completion  [                                        ] 0/100 (queued)

Example error:

 ./target/release/examples/demo --concurrenta Upload App         [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0B/772.42KiB (0s)
☠️ b Create DB          [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0/100 (parent failed)
☠️ c Download App       [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0/100 (parent failed)
☠️ d Link App to DB     [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0/100 (parent failed)
☠️ e Run App            [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0/100 (parent failed)
✅ f Allocate Domain    [████████████████████████████████████████] 100B/100B (0s Unchanged)
☠️ g Attach Domain      [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0/100 (parent failed)
☠️ h Notify Completion  [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0/100 (parent failed)
error[E06]: Failed to connect to artifact server.
  ┌─ artifact_server_address:1:8
  
1  http://127.0.0.1:8000
          ^^^^^^^^^^^^^^ failed to connect to server
  
  = Try running `simple-http-server --nocache -u --ip 127.0.0.1 --port 8000`.

API Implications

  • Provide mechanism to specify end limit and progress.

  • Collect information, present it in a useful way:

    • Real time interactive CLI presentation.
    • Useful errors.

choochoo currently uses indicatif to display progress, and codespan-reporting to display errors.

indicatif provides:

  • Progress rendering
  • Elapsed time
  • Estimated time remaining
  • Styling