1. Computer code embedded in a non-transitory computer readable medium and intended to run on a first communication device connected to a network, the code comprising: a bi-directional messaging module configured to (i) progressively generate an outgoing message addressed to a recipient as media associated with the outgoing message is created using the first communication device, the message addressed to the recipient using an identifier associated with the recipient and (ii) progressively receive an incoming message containing media from the recipient; a transmission module configured to progressively transmit the outgoing message including the identifier over the network to the recipient as the media of the outgoing message is created, the identifier and the media progressively transmitted to a server on the network, which uses the identifier to locate a second communication device associated with the recipient and to deliver the media of the message to the second communication device; and a storage module configured to (iii) progressively store the media of the outgoing message in storage on the first communication device as the media is created and progressively transmitted and (iv) progressively store on the first communication device the media of the incoming message as the media is progressively received over the network.