In the last few decades, the demand for three-dimensional (3-D) inversions for magnetotelluric data has significantly driven the progress of 3-D codes. There are currently a lot of new 3-D inversion and forward modeling codes. Some, such as the WSINV3DMT code of the author, are available to the academic community. The goal of this paper is to summarize all the important issues involving 3-D inversions. It aims to show how inversion works and how to use it properly. In this paper, I start by describing several good reasons for doing 3-D inversion instead of 2-D inversion. The main algorithms for 3-D inversion are reviewed along with some comparisons of their advantages and disadvantages. These algorithms are the classical Occam's inversion, the data space Occam's inversion, the Gauss-Newton method, the Gauss-Newton with the conjugate gradient method, the non-linear conjugate gradient method, and the quasi-Newton method. Other variants are based on these main algorithms. Forward modeling, sensitivity calculations, model covariance and its parallel implementation are all necessary components of inversions and are reviewed here. Rules of thumb for performing 3-D inversion are proposed for the benefit of the 3-D inversion novice. Problems regarding 3-D inversions are discussed along with suggested topics for future research for the developers of the next decades.