June 16, 2012
A lengthy discussion over the past many days, reading stuff online, and my own experience has taught me one thing related to technology: CLI should be a first-class citizen for every technology and GUI should focus on design while using the CLI underneath. Let me explain a little more.
CLI has many advantages. It can be automated, scales very nicely, documentation is easier, and it can be mixed and matched by the operator while working rather than be designed during creation. It has more advantages but these should suffice for now. GUI, on the other hand, is easier to operate because of two main things: discoverability and guidance. But GUI doesn’t scale as easily as CLI does nor is it easy to automate.
In my ideal world, all tasks are first conceived and designed for CLI operation. For example, installing an application in your OS is designed for CLI only. Then build a GUI on top to perform the same CLI operations but doing so in a way that it guides the user through different steps. This is how apt-get and Synaptic inter-relate to each other in the Debian world.
Granted I’m coming at this from a sysadmin perspective but I really do believe it’s the right approach. Especially in an age when cloud computing is the next big thing. Scalability is the key here and automation is much more scalable when it’s CLI. CLI is quite efficient for a single system (especially for repeated tasks) and scales very well for hundreds and thousands of systems.
Once the functionality has been implemented in CLI, designers should take over the GUI and make it as efficient and pretty as possible. Decouple the two domains and let engineers develop CLI and designers develop GUI. Lots of collaboration between the two teams wouldn’t hurt either. Right now a lot of enterprise software is designed by engineers and then feels clunky and inefficient. Real designers with good ideas should solve that part. Keeps daily sysadmins happy and occasional sysadmins satisfied.