I've been reading several articles about GUIs (notably the new one for MacOS-X) and it seems like there is a simple solution to the complexity plaguing them—complexity of features. Windows has both menus and toolbars, with each application having a custom menu and/or toolbar.
Now, since most modern GUIs are message (or event) driven, it would seem a much better idea to construct an application as a client/server model—the GUI being the client sending messages of what needs to be done to the application, or server.
Just document the messages and parameters required by the server and you can customize the GUI to send those messages. So one user can have a window full of those cryptic hieroglyphic iconic toolbars, another can have a traditional pull-down menu, a third can bind weird keyboard macros and a fourth can have a mixture.
This would also make applications scriptable. Imagine you could do the following with Photoshop:
directory = SELECTFILE(); FOREACH file IN directory { send photoshop 'OPEN file' 'BRIGHTEN' 'SAVE YES' 'CLOSE' } send photoshop 'QUIT'
on a directory with 100 photos. Or even bind this sequence to a cryptic hieroglyphic toolbar image and add it to the current toolbar.