Molecular communication is a new paradigm for communication between biological nanomachines over a nano- and microscale range. As biological nanomachines (or nanomachines in short) are too small and simple to communicate through traditional communication mechanisms (e.g., through sending and receiving of radio or infrared signals), molecular communication provides a mechanism for a nanomachine (i.e., a sender) to communicate information by propagating molecules (i.e., information molecules) that represent the information to a nanomachine (i.e., a receiver). This paper describes the design of an invitro molecular communication system and evaluates various approaches to maximize the probability of information molecules reaching a receiver(s) and the rate of information reaching the receiver(s). The approaches considered in this paper include propagating information molecules (diffusion or directional transport along protein filaments), removing excessive information molecules (natural decay or receiver removal of excessive information molecules), and encoding and decoding approaches (redundant information molecules to represent information and to decode information). Two types of molecular communication systems are considered: a unicast system in which a sender communicates with a single receiver and a broadcast system in which a sender communicates with multiple receivers. Through exploring tradeoffs among the various approaches on the two types of molecular communication systems, this paper identifies promising approaches and shows the feasibility of an invitro molecular communication system.