Over the years, I've come across many command line interfaces (CLI) to larger applications, each with varying levels of access and power. Having a CLI at all is a great first step for an application, as it opens up a much wider range of possibilities: administration, extension, and trust.
CLIs also promote scriptability - the ability to create and maintain repeatable scripts, and the easier it is to develop said scripts, the better. Sometimes scripts can solve issues that developers of the app never thought of. (Pro tip: find good user experience designers who know the product and are comfortable on the command line, then put them in charge of the CLI user experience. Your users will love you.
In my opinion, the best ones CLIs have several things in common:
- Interactive / hacker mode
- Extensible to enable custom commands/scripts
- Reasonable syntax/semantics (especially those that blend well-known syntax/semantics like the Unix shell with the app's natural interfaces)
- Secure access
- Built-in 'help' documentation (especially in interactive mode)
- Not be an afterthought ("hey, we can embed an ssh server and let you login and generate a stack trace! Ship it!")
Since joining the Red Hat team, I've taken some time to explore one of the CLIs from the upcoming JBoss EAP 7 release. The CLI has been there for a while, but Wildfly 9 (Wildfly is the upstream project for JBoss EAP) added an Offline CLI feature that allows you to fire up a tiny version of EAP for the purposes of administration - without the baggage of the full stack being deployed (and network ports open).
I imagine the offline CLI is going to please many on-call staffers who get texts at 3am text that the server is down, and the administration server is also down.
I really like how the accessible bits of the server are laid out in a filesystem-like hierarchy, and how commands can be scripted/batched and saved for later use. It also lets me express configuration changes in a much simpler and semantically rich way, as opposed to sed and awk scripts operating on an XML file with no actual knowledge of the product itself. It also has an impressive amount of online help, which is great if you, like me, hate wading through hundreds of pages of docs.
Those of you automating your configuration for CI/CD should find this new feature super useful.