- architecture/network layout - decomposing exactly who does what - event driven vs strict sequence - communication model connections vs connectionless connectionless: anyone serving sets up a socket listening to a specific ip/port anyone sending specifies ip and port to send to and what the message is connections: anyone serving sets up a socket listening to a specific ip/port for connection requests anyone sending specifies ip and port and sents connection request ...once connection established communication takes place simply by send/recv, might require specific message handshake sequence for userids, passwords, etc ... server identifies timeout limits, number of connections it will handle, etc blocking or nonblocking when you specify send/recv, do you halt the thread/program until it completes (blocking) or do you initiate and then wait for an event specifying send completes or recv has got something message composition depending on protocol used (tcp/udp) messages can be broken up into smaller segments, and may arrive out of order, or received multiple times, or may be lost, etc need to decide how you will identify message lengths, order sent, when to resend, etc - accounting for node/connection failures and delays - accounting for interference and intrusion