Content distribution using the P2P paradigm has become one of the most dominant services in the Internet today. Most of the research effort in this area focuses on developing new distribution architectures. However, little work has gone into identifying the principle design choices that draw the behavior of the system. In this paper, we identify these design choices and show how they influence the performance of different P2P architectures. For example, we discuss how clients should organize and cooperate in the network. We believe that our findings can serve as guidelines in the design of efficient future architectures. Categories and Subject Descriptors C.2.0 [General]: Data communications; C.2.1 [Network Architecture and Design]: Network communications; C.2.4 [Distributed Systems]: Distributed applications General Terms Design, Performance Keywords peer to peer networks, content distribution, performance evaluation