Separate interface design from internals
Enable multiple user-interface strategies
Enable multiple-platform support