cf CLI

Cloud Foundry Command Line Interface (cf CLI): Enabling faster feedback cycles and greater coherency


The practice of CLI design is surprisingly inflexible 🙅🧘🏻🙅...

(Once you have a schema you need to stick to it as long as possible. You also need to strive for consistency in all things so your naming structure and CLI responses become familiar, predictable, and are scriptable.)

nebulous ☁️🌫️.

(You have a new feature. Should it be... a flag on an existing command? a new command, with flags? a new set of commands? something you interact with via the manifest rather than in the CLI itself?).

With an inherited style guide in hand, I focused on interaction design and accelerating the process of developing a feature, from concept to delivery, for each CLI project I worked on.

👀 Gif of a CLI prototype click-through, using Google Docs



Case Study - Designing the CLI’s Domains commands


Fix the convoluted and inconsistent workflows for:

  1. creating a private/shared/global domain

  2. deleting a private/shared/global domain

  3. sharing a private domain.

What I did

  • introduce lean UX process to team

  • rapid CLI prototyping + testing

  • cross-discipline pairing

  • research synthesis


🎉 Winning design confirmed!

  •     Reduced user confusion

  •     Reduced user error

  •     Improved comprehension

  •     Consistent creation and deletion workflows

💪 Stronger team muscle for setting success heuristics, and rapid feature prototyping, testing, and delivery




Before: Commands ‘create-domain’, ‘delete-domain’ do not specify which domain type they affect


After: Clear domain-type specific commands for creation and deletion




  1. Understand the history & reasoning behind the set of domains commands

    👀👉 Whiteboard notes

  2. Scope the problem and timeline in a design brief

  3. Define success heuristics

  4. Diverge: Conduct a design studio to go wide and wild with ideas. Solicit feedback from team and stakeholders.

  5. Converge: Synthesize and consolidate designs into a smaller set of qualified candidates

  6. Create a testing plan + recruit usability testing participants

        🔗 Link to Usability Testing Brief
    👀👉 Screenshots of the Recruiting Plan + Testing Goals, Testing Plan

  7. Conduct usability tests on three distinct prototypes + mini-synthesis sessions after each test

    👀☝️Gif of one prototype click-through above

  8. Synthesize usability testing results, compare results with success heuristics

  9. Choose and refine the successful design

  10. Share findings and design choices with team and stakeholders; move designs into backlog stories for engineering; announce the change via appropriate channels and invite feedback