Dopants and defects are important in semiconductor and magnetic devices. Strategies for controlling doping and defects have been the focus of semiconductor physics research during the past decades and remain critical even today. Co-doping is a promising strategy that can be used for effectively tuning the dopant populations, electronic properties, and magnetic properties. It can enhance the solubility of dopants and improve the stability of desired defects. During the past 20 years, significant experimental and theoretical efforts have been devoted to studying the characteristics of co-doping. In this article, we first review the historical development of co-doping. Then, we review a variety of research performed on co-doping, based on the compensating nature of co-dopants. Finally, we review the effects of contamination and surfactants that can explain the general mechanisms of co-doping.