stream as much as possible, rather than going in chunks. ¨ Use a few large transactions rather than many small ones. Large transactions can also be efficiently streamed. ¨ Minimize reliance on the network - recognize that the network is a slow, unreliable resource. ¨ Use a well-architected representation of the data on the network. The data representation should be computer-architecture agnostic, contain no fat, and possibly be compressed. ¨ During initialization and shutdown, do not make the user wait for the network to start up or shut down. Network related initialization could take a relatively long time. Separate the noncritical network code. ¨ Handle errors as appropriate to their impact. Not all errors are critical. Implement recovery mechanisms and provide nonintrusive user feedback. ¨ Use remote procedure calls (RPC) only when necessary (may result in chatty, fat protocols when used with small data.