Ingres Corporation (a subsidiary of the ASK Group) -- 1993 to 1994
At the time of this project, Ingres Corporation was still one of the big-three relational database vendors (along with Oracle and Sybase) and was developing a new family of products dubbed OpenROAD, an acronym for "Open-standards-based, Rapid, Object-oriented, Application Development system".
Windows4GL and Architect4GL were to be the two main products, both fourth-generation language-based (hence the 4GL) integrated development environments (IDEs) for Rapid Application Development (RAD) of Client-Server-based business and scientific applications optimized to run against relational databases. PowerBuilder (eventually purchased by Gupta) was an analogous, contemporary product.
This was to be the third generation of a RAD product that had previously run only on Unix Motif. It was in the process of being significantly enhanced and ported to Windows NT (which was just being introduced to the world) when Bill was called in to rescue the user interface.
Bill's first action was to perform a comprehensive evaluation of the design and to present his findings to the development team. His findings were well-received, and from that time on he went down the priority list helping each group in turn fix up the user interface in its part of the product suite.
Below are a few samples.
Multiple Thread Handling
The OpenROAD products were multithreaded, where generally each (main) window represented a separate thread. Thus each window could present modal dialogs when it needed attention from the user. But Bill didn't want any one window to block out the entire application, and to prevent users from dealing with other windows they felt were more important at the moment. So Bill devised a system where any window that was "frozen" by a modal dialog could be treated as follow:
- The modal dialog could be moved aside (so the user could see what was going on in the frozen window).
- The frozen window could be moved aside and the modal dialog would move with it (so that the user could see other, perhaps related windows).
- The frozen window could be iconized and its modal dialog would disappear until it was restored (so that users could ignore it and work on more pressing issues in other windows).
The Component Editor is where the developer creates (or instantiates) all the objects that make up an application. Once created, each object type (frame, query, data model, etc.) has its own specialized editor.
The Frame Editor is where windows and dialogs are laid out. Layouts can include standard GUI controls such as buttons, sliders and popup menus, as well as tables that fill themselves with data from relational databases. The layout engine includes geometry management features so that tables, etc. stretch and objects reposition themselves appropriately, as windows are resized by the end user.
The Query Editor makes it fast and easy to graphically create complex relational database queries involving multiple joins, sorts, and filters.
With the Query Manager it was easy to associate queries (defined in the Query Editor) with forms (defined in the Frame Editor), then to "wire" the forms together; for example to let end users drill down from aggregate to detail views of the data.
Aside from the obvious improvement in the visual appearance, Bill devised a way to build all necessary variations of about boxes out of a small set of tiles that are mixed and matched as needed.