In this chapter, we give an overview of some of the issues that face programmers and designers when building collaborative virtual environments (CVEs). We do this by highlighting three aspects of CVE system software: the environment model (data structures, behaviour description) that the system provides, the data-sharing mechanism (how the environment model is shared), and the implementation framework (the structure of a typical client or platform in terms of the services it provides to the user). When a CVE system is designed, choices have to be made for each of these aspects, and this then constrains how the designers and programmers go about constructing the CVE worlds themselves. We present the main body of the overview by using examples that highlight many of the important differences between CVE systems. We will also relate our discussion to the common topics of network topology and awareness management.