NetCache Command Line Interface (CLI)
Network Appliance, Inc. -- 1999 to 2000
Network Appliance's sucessful NetCache line of network caching appliances are used by organizations around the world to cache (temporarily store) network-accessible data close to the consumers (end users) of that data.
To the end user this makes access faster, since the data is coming from a (relatively) local source rather than having to travel the length and breadth of the internet. To ISPs, network operators, and organizations that lease long-distance network lines, this reduces network traffic across internet trunks; resulting in higher effective bandwidth and lower capital and operating costs. Caching is particularly useful for global enterprises where field offices may not have reliable, high-speed access to the home-office servers, and to ISPs who wish to move large, high-demand, chunks of data such as video streams closer to regional clusters of subscribers.
NetCache appliances are usually rack-mounted in network equipment rooms, and are maintained by network administrators who typically also have to maintain routers, web servers, firewalls and other network equipment. Network administrators need to be able to access NetCaches both by web user interfaces and by terminal (command line) user interface, both onsite and from remote locations. In addition, it's highly desirable for trusted computers on the network to be able to "drive" NetCaches remotely. Particularly in large, geographically dispersed enterprises, this allows administrators to set up master computers to perform automated backups, performance measurements, scheduled "pushing" of updated data, and to monitor a system of NetCaches for trouble that might need an administrator's attention.
As with many technology products the NetCache command line interface had evolved in a somewhat haphazard manner. It was inconsistent, incomplete, hard to use, and only minimally scriptable. Also as often happens in the life of successful technology products it became time to fix all that, and Bill was hired to design an entirely new command line interface (CLI).
Bill started by working with stakeholders to clearly define the goals for the new CLI:
- short learning curve, high knowledge retention rate,
- self-teaching and self-defining as much as possible,
- robustly and efficiently scriptable for remote operation and control by other computers,
- efficient for experienced users,
- gives different levels of users the help they need at their level,
- complete control over NetCache appliances,
- ability to perform multi-cache operations,
- be able to copy the results of a "show" command, then paste it into the terminal as input for the corresponding "set" command.
Bill suggested that it would be best to model the new CLI after one with which network adminstrators were already familar, and the CLI used by Cisco, it's Internet Operating System (IOS) language was chosen for this purpose. But IOS itself is very inconsistent. You never knew when typing a command is going to: Change a setting, return the value of a setting, initiate an operation, or do something else. Also different syntaxes are used for similar commands. So the first thing Bill did was to analyze the "style" of IOS. Then he designed a new NetCache CLI where administrators familar with IOS would intuitively make correct guesses, but which was simple, consistent, easy to use, and also easy to extend in the same style so as to retain these benefits over time.
Then Bill went far beyond integrating the "feel" of the IOS CLI. He defined simple, consistent, extensible syntaxes for formulating commands, for naming objects, for reporting errors and so forth. He developed a comprehensive, multi-level help and interactive self-teaching system. He built in mechanisms for prompting users in a user friendly way when more informatioin was needed, to report errors to the user, and to help users learn the CLI as they went along. He also designed a syntax whereby an experienced user (or a remote computer) could easily and unambiguously enter multiple commands to be exected in a batch. He also developed a way for users (or remote computers) to get a listing of desired configuration settings, to copy it into a text editor, to modify values manually, then to paste it into the terminal window and have all the configuration settings updated in a batch operation. Of course the CLI was also designed to be efficiently and unambiguously "driven" by a remote computer, including unambiguous and easily parseable: delimiters, error reporting and handling, operational handshaking (synchronizing) features, and so forth.
And of course during all this Bill worked closely with the implementation team, the technical architects, the Documentation group, Marketing and management as appropriate.
All this, the project goals, assumptions, design and rationale, was captured in the 118 page formal Language Specification that Bill wrote for to the implementation team.
Note that Bill also, concurrently, designed an entirely new web user interface for the NetCache product line, a project which is described elsewhere in this portfolio.